From dad1333b48c38bc7a5628fc0ff5304d003776a85 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 11 Jun 2020 11:04:09 +0200 Subject: New VFS --- crates/ra_hir_def/src/nameres.rs | 1 + crates/ra_hir_def/src/nameres/collector.rs | 10 ++++++---- crates/ra_hir_def/src/nameres/mod_resolution.rs | 7 ++++--- 3 files changed, 11 insertions(+), 7 deletions(-) (limited to 'crates/ra_hir_def') diff --git a/crates/ra_hir_def/src/nameres.rs b/crates/ra_hir_def/src/nameres.rs index b8560fdc9..060273db4 100644 --- a/crates/ra_hir_def/src/nameres.rs +++ b/crates/ra_hir_def/src/nameres.rs @@ -104,6 +104,7 @@ pub enum ModuleOrigin { }, /// Note that non-inline modules, by definition, live inside non-macro file. File { + is_mod_rs: bool, declaration: AstId, definition: FileId, }, diff --git a/crates/ra_hir_def/src/nameres/collector.rs b/crates/ra_hir_def/src/nameres/collector.rs index b8f6aac8f..cbce04315 100644 --- a/crates/ra_hir_def/src/nameres/collector.rs +++ b/crates/ra_hir_def/src/nameres/collector.rs @@ -777,11 +777,11 @@ impl ModCollector<'_, '_> { name, path_attr, ) { - Ok((file_id, mod_dir)) => { + Ok((file_id, is_mod_rs, mod_dir)) => { let module_id = self.push_child_module( name.clone(), ast_id, - Some(file_id), + Some((file_id, is_mod_rs)), &visibility, ); let raw_items = self.def_collector.db.raw_items(file_id.into()); @@ -814,7 +814,7 @@ impl ModCollector<'_, '_> { &mut self, name: Name, declaration: AstId, - definition: Option, + definition: Option<(FileId, bool)>, visibility: &crate::visibility::RawVisibility, ) -> LocalModuleId { let vis = self @@ -827,7 +827,9 @@ impl ModCollector<'_, '_> { modules[res].parent = Some(self.module_id); modules[res].origin = match definition { None => ModuleOrigin::Inline { definition: declaration }, - Some(definition) => ModuleOrigin::File { declaration, definition }, + Some((definition, is_mod_rs)) => { + ModuleOrigin::File { declaration, definition, is_mod_rs } + } }; for (name, mac) in modules[self.module_id].scope.collect_legacy_macros() { modules[res].scope.define_legacy_macro(name, mac) diff --git a/crates/ra_hir_def/src/nameres/mod_resolution.rs b/crates/ra_hir_def/src/nameres/mod_resolution.rs index 19fe0615a..39e9a6d97 100644 --- a/crates/ra_hir_def/src/nameres/mod_resolution.rs +++ b/crates/ra_hir_def/src/nameres/mod_resolution.rs @@ -44,7 +44,7 @@ impl ModDir { file_id: HirFileId, name: &Name, attr_path: Option<&SmolStr>, - ) -> Result<(FileId, ModDir), String> { + ) -> Result<(FileId, bool, ModDir), String> { let file_id = file_id.original_file(db.upcast()); let mut candidate_files = Vec::new(); @@ -64,11 +64,12 @@ impl ModDir { if let Some(file_id) = db.resolve_path(file_id, candidate.as_str()) { let mut root_non_dir_owner = false; let mut mod_path = RelativePathBuf::new(); - if !(candidate.ends_with("mod.rs") || attr_path.is_some()) { + let is_mod_rs = candidate.ends_with("mod.rs"); + if !(is_mod_rs || attr_path.is_some()) { root_non_dir_owner = true; mod_path.push(&name.to_string()); } - return Ok((file_id, ModDir { path: mod_path, root_non_dir_owner })); + return Ok((file_id, is_mod_rs, ModDir { path: mod_path, root_non_dir_owner })); } } Err(candidate_files.remove(0)) -- cgit v1.2.3