From 683e5e64f42b6c74596015c5d19e2eab186fe68d Mon Sep 17 00:00:00 2001 From: Erlend Tobiassen Date: Sun, 27 Jan 2019 14:51:26 +0100 Subject: Test non standard crate root --- crates/ra_hir/src/mock.rs | 16 ++++++++++------ crates/ra_hir/src/nameres/tests.rs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 6 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/mock.rs b/crates/ra_hir/src/mock.rs index 7da15eca0..2bba11e42 100644 --- a/crates/ra_hir/src/mock.rs +++ b/crates/ra_hir/src/mock.rs @@ -2,7 +2,8 @@ use std::{sync::Arc, panic}; use parking_lot::Mutex; use ra_db::{ - CheckCanceled, FilePosition, FileId, CrateGraph, SourceRoot, SourceRootId, SourceDatabase, salsa, + mock::FileMap, CheckCanceled, CrateGraph, FileId, FilePosition, SourceDatabase, + SourceRoot, SourceRootId, salsa }; use relative_path::RelativePathBuf; use test_utils::{parse_fixture, CURSOR_MARKER, extract_offset}; @@ -17,7 +18,7 @@ pub(crate) struct MockDatabase { events: Mutex>>>, runtime: salsa::Runtime, interner: Arc, - file_counter: u32, + file_map: Arc, } impl panic::RefUnwindSafe for MockDatabase {} @@ -43,6 +44,10 @@ impl MockDatabase { (db, position) } + pub(crate) fn file_id(&self, file: &str) -> FileId { + self.file_map.file_id(file) + } + fn from_fixture(fixture: &str) -> (MockDatabase, SourceRoot, Option) { let mut db = MockDatabase::default(); @@ -89,8 +94,7 @@ impl MockDatabase { let is_crate_root = path == "/lib.rs" || path == "/main.rs"; let path = RelativePathBuf::from_path(&path[1..]).unwrap(); - let file_id = FileId(self.file_counter); - self.file_counter += 1; + let file_id = Arc::make_mut(&mut self.file_map).add(path.clone()); let text = Arc::new(text.to_string()); self.set_file_text(file_id, text); self.set_file_relative_path(file_id, path.clone()); @@ -137,7 +141,7 @@ impl Default for MockDatabase { events: Default::default(), runtime: salsa::Runtime::default(), interner: Default::default(), - file_counter: 0, + file_map: Default::default(), }; db.set_crate_graph(Default::default()); db @@ -150,7 +154,7 @@ impl salsa::ParallelDatabase for MockDatabase { events: Default::default(), runtime: self.runtime.snapshot(self), interner: Arc::clone(&self.interner), - file_counter: self.file_counter, + file_map: Arc::clone(&self.file_map), }) } } diff --git a/crates/ra_hir/src/nameres/tests.rs b/crates/ra_hir/src/nameres/tests.rs index e72781f51..5b161cf49 100644 --- a/crates/ra_hir/src/nameres/tests.rs +++ b/crates/ra_hir/src/nameres/tests.rs @@ -19,6 +19,19 @@ fn item_map(fixture: &str) -> (Arc, ModuleId) { (db.item_map(krate.crate_id), module_id) } +fn item_map_custom_crate_root(fixture: &str, root: &str) -> (Arc, ModuleId) { + let (mut db, pos) = MockDatabase::with_position(fixture); + + let mut crate_graph = CrateGraph::default(); + crate_graph.add_crate_root(db.file_id(root)); + db.set_crate_graph(Arc::new(crate_graph)); + + let module = crate::source_binder::module_from_position(&db, dbg!(pos)).unwrap(); + let krate = module.krate(&db).unwrap(); + let module_id = module.module_id; + (db.item_map(krate.crate_id), module_id) +} + fn check_module_item_map(map: &ItemMap, module_id: ModuleId, expected: &str) { let mut lines = map[module_id] .items @@ -133,6 +146,31 @@ fn re_exports() { ); } +#[test] +fn module_resolution_works_for_non_standard_filenames() { + let (item_map, module_id) = item_map_custom_crate_root( + " + //- /my_library.rs + mod foo; + + use self::foo::Bar; + <|> + + //- /foo/mod.rs + pub struct Bar; + ", + "/my_library.rs", + ); + check_module_item_map( + &item_map, + module_id, + " + Bar: t v + foo: t + ", + ); +} + #[test] fn name_res_works_for_broken_modules() { covers!(name_res_works_for_broken_modules); -- cgit v1.2.3 From c5e6db16b1def5d481358489a3c6d9a6fd5cbdf4 Mon Sep 17 00:00:00 2001 From: Erlend Tobiassen Date: Sat, 26 Jan 2019 13:12:55 +0100 Subject: fix #668 --- crates/ra_hir/src/module_tree.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/module_tree.rs b/crates/ra_hir/src/module_tree.rs index d1dc3fa4b..7caebab0d 100644 --- a/crates/ra_hir/src/module_tree.rs +++ b/crates/ra_hir/src/module_tree.rs @@ -172,6 +172,7 @@ impl ModuleTree { file_id: HirFileId, decl_id: Option, ) -> ModuleId { + let is_root = parent.is_none(); let id = self.alloc_mod(ModuleData { file_id, decl_id, @@ -295,6 +296,7 @@ fn resolve_submodule( db: &impl HirDatabase, file_id: HirFileId, name: &Name, + is_root: bool, ) -> (Vec, Option) { // FIXME: handle submodules of inline modules properly let file_id = file_id.original_file(db); @@ -303,7 +305,7 @@ fn resolve_submodule( let root = RelativePathBuf::default(); let dir_path = path.parent().unwrap_or(&root); let mod_name = path.file_stem().unwrap_or("unknown"); - let is_dir_owner = mod_name == "mod" || mod_name == "lib" || mod_name == "main"; + let is_dir_owner = is_root || mod_name == "mod"; let file_mod = dir_path.join(format!("{}.rs", name)); let dir_mod = dir_path.join(format!("{}/mod.rs", name)); -- cgit v1.2.3 From 08e12f974cb1d801920368420174ad4db0eb0df0 Mon Sep 17 00:00:00 2001 From: Erlend Tobiassen Date: Sun, 27 Jan 2019 15:29:02 +0100 Subject: Fix bad rebase and rustfmt --- crates/ra_hir/src/module_tree.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/module_tree.rs b/crates/ra_hir/src/module_tree.rs index 7caebab0d..893c375b5 100644 --- a/crates/ra_hir/src/module_tree.rs +++ b/crates/ra_hir/src/module_tree.rs @@ -192,7 +192,7 @@ impl ModuleTree { }); let (points_to, problem) = if sub.is_declaration { - let (points_to, problem) = resolve_submodule(db, file_id, &sub.name); + let (points_to, problem) = resolve_submodule(db, file_id, &sub.name, is_root); let points_to = points_to .into_iter() .map(|file_id| { -- cgit v1.2.3 From b149882d198818d6302c2a6318d68c4e0b4380ff Mon Sep 17 00:00:00 2001 From: Erlend Tobiassen Date: Sun, 27 Jan 2019 15:44:59 +0100 Subject: Remove dbg!(...) --- crates/ra_hir/src/nameres/tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/nameres/tests.rs b/crates/ra_hir/src/nameres/tests.rs index 5b161cf49..971f71637 100644 --- a/crates/ra_hir/src/nameres/tests.rs +++ b/crates/ra_hir/src/nameres/tests.rs @@ -26,7 +26,7 @@ fn item_map_custom_crate_root(fixture: &str, root: &str) -> (Arc, Modul crate_graph.add_crate_root(db.file_id(root)); db.set_crate_graph(Arc::new(crate_graph)); - let module = crate::source_binder::module_from_position(&db, dbg!(pos)).unwrap(); + let module = crate::source_binder::module_from_position(&db, pos).unwrap(); let krate = module.krate(&db).unwrap(); let module_id = module.module_id; (db.item_map(krate.crate_id), module_id) -- cgit v1.2.3 From b775fa285c985821f38f09c25507d80ee793ecfd Mon Sep 17 00:00:00 2001 From: Erlend Tobiassen Date: Sun, 27 Jan 2019 16:32:31 +0100 Subject: Revert parts of "Test non standard crate root" Prefer cursor position over file_map --- crates/ra_hir/src/mock.rs | 16 ++++++---------- crates/ra_hir/src/nameres/tests.rs | 8 +++----- 2 files changed, 9 insertions(+), 15 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/mock.rs b/crates/ra_hir/src/mock.rs index 2bba11e42..7da15eca0 100644 --- a/crates/ra_hir/src/mock.rs +++ b/crates/ra_hir/src/mock.rs @@ -2,8 +2,7 @@ use std::{sync::Arc, panic}; use parking_lot::Mutex; use ra_db::{ - mock::FileMap, CheckCanceled, CrateGraph, FileId, FilePosition, SourceDatabase, - SourceRoot, SourceRootId, salsa + CheckCanceled, FilePosition, FileId, CrateGraph, SourceRoot, SourceRootId, SourceDatabase, salsa, }; use relative_path::RelativePathBuf; use test_utils::{parse_fixture, CURSOR_MARKER, extract_offset}; @@ -18,7 +17,7 @@ pub(crate) struct MockDatabase { events: Mutex>>>, runtime: salsa::Runtime, interner: Arc, - file_map: Arc, + file_counter: u32, } impl panic::RefUnwindSafe for MockDatabase {} @@ -44,10 +43,6 @@ impl MockDatabase { (db, position) } - pub(crate) fn file_id(&self, file: &str) -> FileId { - self.file_map.file_id(file) - } - fn from_fixture(fixture: &str) -> (MockDatabase, SourceRoot, Option) { let mut db = MockDatabase::default(); @@ -94,7 +89,8 @@ impl MockDatabase { let is_crate_root = path == "/lib.rs" || path == "/main.rs"; let path = RelativePathBuf::from_path(&path[1..]).unwrap(); - let file_id = Arc::make_mut(&mut self.file_map).add(path.clone()); + let file_id = FileId(self.file_counter); + self.file_counter += 1; let text = Arc::new(text.to_string()); self.set_file_text(file_id, text); self.set_file_relative_path(file_id, path.clone()); @@ -141,7 +137,7 @@ impl Default for MockDatabase { events: Default::default(), runtime: salsa::Runtime::default(), interner: Default::default(), - file_map: Default::default(), + file_counter: 0, }; db.set_crate_graph(Default::default()); db @@ -154,7 +150,7 @@ impl salsa::ParallelDatabase for MockDatabase { events: Default::default(), runtime: self.runtime.snapshot(self), interner: Arc::clone(&self.interner), - file_map: Arc::clone(&self.file_map), + file_counter: self.file_counter, }) } } diff --git a/crates/ra_hir/src/nameres/tests.rs b/crates/ra_hir/src/nameres/tests.rs index 971f71637..3d420467c 100644 --- a/crates/ra_hir/src/nameres/tests.rs +++ b/crates/ra_hir/src/nameres/tests.rs @@ -19,11 +19,12 @@ fn item_map(fixture: &str) -> (Arc, ModuleId) { (db.item_map(krate.crate_id), module_id) } -fn item_map_custom_crate_root(fixture: &str, root: &str) -> (Arc, ModuleId) { +/// Sets the crate root to the file of the cursor marker +fn item_map_custom_crate_root(fixture: &str) -> (Arc, ModuleId) { let (mut db, pos) = MockDatabase::with_position(fixture); let mut crate_graph = CrateGraph::default(); - crate_graph.add_crate_root(db.file_id(root)); + crate_graph.add_crate_root(pos.file_id); db.set_crate_graph(Arc::new(crate_graph)); let module = crate::source_binder::module_from_position(&db, pos).unwrap(); @@ -152,14 +153,11 @@ fn module_resolution_works_for_non_standard_filenames() { " //- /my_library.rs mod foo; - use self::foo::Bar; <|> - //- /foo/mod.rs pub struct Bar; ", - "/my_library.rs", ); check_module_item_map( &item_map, -- cgit v1.2.3