-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Closed
Labels
A-idegeneral IDE featuresgeneral IDE featuresC-enhancementCategory: enhancementCategory: enhancement
Description
We should handle doc aliases somewhere around here
rust-analyzer/crates/hir/src/symbols.rs
Lines 129 to 195 in dd5c3c3
fn collect_from_module(&mut self, module_id: ModuleId) { | |
let def_map = module_id.def_map(self.db.upcast()); | |
let scope = &def_map[module_id.local_id].scope; | |
for module_def_id in scope.declarations() { | |
match module_def_id { | |
ModuleDefId::ModuleId(id) => self.push_module(id), | |
ModuleDefId::FunctionId(id) => { | |
self.push_decl_assoc(id, FileSymbolKind::Function); | |
self.collect_from_body(id); | |
} | |
ModuleDefId::AdtId(AdtId::StructId(id)) => { | |
self.push_decl(id, FileSymbolKind::Struct) | |
} | |
ModuleDefId::AdtId(AdtId::EnumId(id)) => self.push_decl(id, FileSymbolKind::Enum), | |
ModuleDefId::AdtId(AdtId::UnionId(id)) => self.push_decl(id, FileSymbolKind::Union), | |
ModuleDefId::ConstId(id) => { | |
self.push_decl_assoc(id, FileSymbolKind::Const); | |
self.collect_from_body(id); | |
} | |
ModuleDefId::StaticId(id) => { | |
self.push_decl_assoc(id, FileSymbolKind::Static); | |
self.collect_from_body(id); | |
} | |
ModuleDefId::TraitId(id) => { | |
self.push_decl(id, FileSymbolKind::Trait); | |
self.collect_from_trait(id); | |
} | |
ModuleDefId::TraitAliasId(id) => { | |
self.push_decl(id, FileSymbolKind::TraitAlias); | |
} | |
ModuleDefId::TypeAliasId(id) => { | |
self.push_decl_assoc(id, FileSymbolKind::TypeAlias); | |
} | |
ModuleDefId::MacroId(id) => match id { | |
MacroId::Macro2Id(id) => self.push_decl(id, FileSymbolKind::Macro), | |
MacroId::MacroRulesId(id) => self.push_decl(id, FileSymbolKind::Macro), | |
MacroId::ProcMacroId(id) => self.push_decl(id, FileSymbolKind::Macro), | |
}, | |
// Don't index these. | |
ModuleDefId::BuiltinType(_) => {} | |
ModuleDefId::EnumVariantId(_) => {} | |
} | |
} | |
for impl_id in scope.impls() { | |
self.collect_from_impl(impl_id); | |
} | |
for const_id in scope.unnamed_consts() { | |
self.collect_from_body(const_id); | |
} | |
for (_, id) in scope.legacy_macros() { | |
for &id in id { | |
if id.module(self.db.upcast()) == module_id { | |
match id { | |
MacroId::Macro2Id(id) => self.push_decl(id, FileSymbolKind::Macro), | |
MacroId::MacroRulesId(id) => self.push_decl(id, FileSymbolKind::Macro), | |
MacroId::ProcMacroId(id) => self.push_decl(id, FileSymbolKind::Macro), | |
} | |
} | |
} | |
} | |
} | |
fn collect_from_body(&mut self, body_id: impl Into<DefWithBodyId>) { |
We don't seem to have testing infra for this functionality per se, so it would be good to add that as well for https://github.com/rust-lang/rust-analyzer/blob/dd5c3c30b6379a92d69e964327cf97963a6d6143/crates/ide-db/src/symbol_index.rs
(On a side note, it seems odd to me that this is implemented in hir
and not in ide-db
)
Metadata
Metadata
Assignees
Labels
A-idegeneral IDE featuresgeneral IDE featuresC-enhancementCategory: enhancementCategory: enhancement