diff --git a/crates/ide/src/navigation_target.rs b/crates/ide/src/navigation_target.rs index c115f57364..a566a75893 100644 --- a/crates/ide/src/navigation_target.rs +++ b/crates/ide/src/navigation_target.rs @@ -170,7 +170,7 @@ impl NavigationTarget { impl ToNav for FileSymbol { fn to_nav(&self, db: &RootDatabase) -> NavigationTarget { NavigationTarget { - file_id: self.file_id.original_file(db), + file_id: self.original_file_id, name: self.name.clone(), kind: Some(match self.kind { FileSymbolKind::Function => SymbolKind::Function, @@ -517,7 +517,7 @@ impl TryToNav for hir::ConstParam { /// e.g. `struct Name`, `enum Name`, `fn Name` pub(crate) fn description_from_symbol(db: &RootDatabase, symbol: &FileSymbol) -> Option { let sema = Semantics::new(db); - let syntax = sema.parse_or_expand(symbol.file_id)?; + let syntax = sema.parse_or_expand(symbol.hir_file_id)?; let node = symbol.ptr.to_node(&syntax); match_ast! { diff --git a/crates/ide_db/src/items_locator.rs b/crates/ide_db/src/items_locator.rs index 788cfdc039..fb62d2e7d7 100644 --- a/crates/ide_db/src/items_locator.rs +++ b/crates/ide_db/src/items_locator.rs @@ -133,7 +133,7 @@ fn get_name_definition( import_candidate: &FileSymbol, ) -> Option { let _p = profile::span("get_name_definition"); - let file_id = import_candidate.file_id; + let file_id = import_candidate.hir_file_id; let candidate_node = import_candidate.ptr.to_node(&sema.parse_or_expand(file_id)?); let candidate_name_node = if candidate_node.kind() != NAME { diff --git a/crates/ide_db/src/symbol_index.rs b/crates/ide_db/src/symbol_index.rs index e85a846de5..401056aaaf 100644 --- a/crates/ide_db/src/symbol_index.rs +++ b/crates/ide_db/src/symbol_index.rs @@ -371,7 +371,8 @@ impl Query { /// possible. #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct FileSymbol { - pub file_id: HirFileId, + pub hir_file_id: HirFileId, + pub original_file_id: FileId, pub name: SmolStr, pub kind: FileSymbolKind, pub range: TextRange, @@ -478,7 +479,8 @@ fn to_file_symbol(node: &SyntaxNode, file_id: FileId) -> Option { }, range: node.text_range(), ptr, - file_id: file_id.into(), + hir_file_id: file_id.into(), + original_file_id: file_id, name_range: Some(name_range), container_name: None, }) @@ -505,10 +507,11 @@ fn collect_symbols_from_item_scope( { let loc = id.lookup(db); let source = loc.source(db); - let name = source.value.name()?; - let file_id = loc.id.file_id(); - let name_range = name.syntax().text_range(); + let name = source.value.name()?; + let name_range = source.with_value(name.syntax()).original_file_range(db.upcast()); + let hir_file_id = loc.id.file_id(); + let name = name.text().into(); let ptr = SyntaxNodePtr::new(source.value.syntax()); @@ -532,10 +535,11 @@ fn collect_symbols_from_item_scope( Some(FileSymbol { name, kind, - range: source.value.syntax().text_range(), + range: source.with_value(source.value.syntax()).original_file_range(db.upcast()).range, container_name, - file_id, - name_range: Some(name_range), + hir_file_id, + original_file_id: name_range.file_id, + name_range: Some(name_range.range), ptr, }) } @@ -548,18 +552,19 @@ fn collect_symbols_from_item_scope( let loc = id.lookup(db); let source = loc.source(db); let name = source.value.name()?; - let file_id = loc.id.file_id(); - let name_range = name.syntax().text_range(); + let name_range = source.with_value(name.syntax()).original_file_range(db.upcast()); + let hir_file_id = loc.id.file_id(); let name = name.text().into(); let ptr = SyntaxNodePtr::new(source.value.syntax()); Some(FileSymbol { name, kind, - range: source.value.syntax().text_range(), + range: source.with_value(source.value.syntax()).original_file_range(db.upcast()).range, container_name: None, - file_id, - name_range: Some(name_range), + hir_file_id, + original_file_id: name_range.file_id, + name_range: Some(name_range.range), ptr, }) } @@ -568,21 +573,22 @@ fn collect_symbols_from_item_scope( let def_map = module_id.def_map(db); let module_data = &def_map[module_id.local_id]; let declaration = module_data.origin.declaration()?; - let file_id = declaration.file_id; + let hir_file_id = declaration.file_id; let module = declaration.to_node(db.upcast()); let name = module.name()?; - let name_range = name.syntax().text_range(); + let name_range = declaration.with_value(name.syntax()).original_file_range(db.upcast()); let name = name.text().into(); let ptr = SyntaxNodePtr::new(module.syntax()); Some(FileSymbol { name, kind: FileSymbolKind::Module, - range: module.syntax().text_range(), + range: declaration.with_value(module.syntax()).original_file_range(db.upcast()).range, container_name: None, - file_id, - name_range: Some(name_range), + hir_file_id, + original_file_id: name_range.file_id, + name_range: Some(name_range.range), ptr, }) }