From aa4fd06ae5d67ffec861aead4bb8845cba143fcc Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Mon, 22 Feb 2021 21:46:00 +0100 Subject: [PATCH] fix: clean up file resolvement --- src/builder/mod.rs | 9 ++++++++- src/parser/rules.rs | 8 +------- tests/importable_module/foo/bar.sb | 1 + tests/importable_module/foo/baz/module.sb | 3 +++ tests/imports.sb | 2 +- 5 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 tests/importable_module/foo/baz/module.sb diff --git a/src/builder/mod.rs b/src/builder/mod.rs index 1bbe577..ffd116e 100644 --- a/src/builder/mod.rs +++ b/src/builder/mod.rs @@ -84,10 +84,17 @@ impl Builder { )?; for import in &module.imports { // Build module relative to the current file - let import_path = resolved_file_path + let mut import_path = resolved_file_path .parent() .unwrap() .join(PathBuf::from(import)); + + if import_path.is_dir() { + import_path = import_path.join("module.sb"); + } else if !import_path.ends_with(".sb") { + import_path.set_extension("sb"); + } + self.build_module(import_path)?; } self.modules.push(module.clone()); diff --git a/src/parser/rules.rs b/src/parser/rules.rs index ecc2f99..0aab785 100644 --- a/src/parser/rules.rs +++ b/src/parser/rules.rs @@ -157,13 +157,7 @@ impl Parser { chars.next(); chars.next_back(); - let import_path = if chars.as_str().ends_with(".sb") { - chars.collect() - } else { - format!("{}.sb", chars.collect::()) - }; - - Ok(import_path) + Ok(chars.collect()) } fn parse_type(&mut self) -> Result { diff --git a/tests/importable_module/foo/bar.sb b/tests/importable_module/foo/bar.sb index 8dc7af5..f226c46 100644 --- a/tests/importable_module/foo/bar.sb +++ b/tests/importable_module/foo/bar.sb @@ -1,3 +1,4 @@ +import "baz" fn nested_module() { println("A deeply nested function was called!") diff --git a/tests/importable_module/foo/baz/module.sb b/tests/importable_module/foo/baz/module.sb new file mode 100644 index 0000000..9602aab --- /dev/null +++ b/tests/importable_module/foo/baz/module.sb @@ -0,0 +1,3 @@ +fn baz() { + println("Baz was called") +} \ No newline at end of file diff --git a/tests/imports.sb b/tests/imports.sb index b9a8fd0..d5c8fb1 100644 --- a/tests/imports.sb +++ b/tests/imports.sb @@ -1,4 +1,4 @@ -import "importable_module/module" +import "importable_module" fn main() { external_function()