mirror of
https://github.com/HigherOrderCO/Bend.git
synced 2024-10-05 15:57:08 +03:00
Make imports relative to the file it is declared
This commit is contained in:
parent
9f9b8d7ce1
commit
d17ccc0544
@ -21,7 +21,7 @@ pub fn load_to_book<T: Display>(
|
||||
let builtins = ParseBook::builtins();
|
||||
let mut book = do_parse_book(code, origin, builtins)?;
|
||||
|
||||
book.imports.load_imports(&mut package_loader)?;
|
||||
book.imports.load_imports(None, &mut package_loader)?;
|
||||
book.apply_imports()?;
|
||||
|
||||
let mut book = book.to_fun()?;
|
||||
|
@ -30,13 +30,18 @@ impl Imports {
|
||||
self.names
|
||||
}
|
||||
|
||||
pub fn load_imports(&mut self, loader: &mut impl PackageLoader) -> Result<(), String> {
|
||||
pub fn load_imports(&mut self, dir: Option<Name>, loader: &mut impl PackageLoader) -> Result<(), String> {
|
||||
for (src, sub_imports) in &self.names {
|
||||
// TODO: Would this be correct when handling non-local imports? Do we want relative online sources?
|
||||
// TODO: Normalize paths when using `..`
|
||||
let src = dir.as_ref().map_or(src.clone(), |p| Name::new(format!("{}/{}", p, src)));
|
||||
|
||||
let packages = loader.load(src.clone(), sub_imports)?;
|
||||
|
||||
for (psrc, code) in packages {
|
||||
let mut module = do_parse_book(&code, &psrc, ParseBook::default())?;
|
||||
module.imports.load_imports(loader)?;
|
||||
let parent_dir = psrc.rsplit_once('/').map(|(s, _)| Name::new(s)).unwrap_or(psrc.clone());
|
||||
module.imports.load_imports(Some(parent_dir), loader)?;
|
||||
self.pkgs.push((psrc, module));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user