ModuleResolver – Resolución de Módulos y Paquetes
Archivo: src/module.rs
¿Por qué existe?
Gestiona la carga y composición de módulos de código Forja, permitiendo que los archivos .fa se importen entre sí y que dependencias externas provengan de paquetes publicados.
Cómo funciona
- Normaliza la ruta solicitada, evitando traversals (
../) y rutas absolutas. - Intenta resolver la ruta dentro del directorio raíz del proyecto.
- Si el archivo existe, lo lee, tokeniza, parsea y resuelve recursivamente cualquier
Importarinterno. - Almacena el resultante
Programaencachepara reutilización.
- Si el archivo existe, lo lee, tokeniza, parsea y resuelve recursivamente cualquier
- Si no está presente localmente, delega al
PackageResolver(si está configurado) para buscar el módulo en paquetes externos. - En caso de error, devuelve
ErrorForjaexplicando la causa (ruta inválida, archivo inexistente, paquete no encontrado).
Estructuras clave
Estructuras clave
El módulo define ModuleResolver con los campos root_dir, cache y package_resolver. Proporciona los métodos new y resolver para crear y resolver módulos.
Relación con otras partes del compilador
- Se invoca desde la CLI (
main.rs) y el REPL al cargar scripts. - Utiliza
LexeryParserpara transformar el código fuente en AST. - El
PackageResolvermaneja dependencias externas (crates Forja).