traverse even more...
This commit is contained in:
parent
9387e2d919
commit
aecb9a378c
@ -44,9 +44,9 @@
|
|||||||
nameres,
|
nameres,
|
||||||
per_ns::PerNs,
|
per_ns::PerNs,
|
||||||
resolver::{HasResolver, Resolver},
|
resolver::{HasResolver, Resolver},
|
||||||
AssocItemId, AttrDefId, ConstId, ConstParamId, EnumId, FunctionId, GenericDefId, HasModule,
|
AttrDefId, ConstId, ConstParamId, EnumId, FunctionId, GenericDefId, HasModule, ImplId,
|
||||||
ImplId, LifetimeParamId, LocalEnumVariantId, LocalFieldId, StaticId, StructId, TraitId,
|
LifetimeParamId, LocalEnumVariantId, LocalFieldId, StaticId, StructId, TraitId, TypeAliasId,
|
||||||
TypeAliasId, TypeParamId, UnionId,
|
TypeParamId, UnionId,
|
||||||
};
|
};
|
||||||
use hir_expand::{name::name, MacroCallKind, MacroDefId, MacroDefKind};
|
use hir_expand::{name::name, MacroCallKind, MacroDefId, MacroDefKind};
|
||||||
use hir_ty::{
|
use hir_ty::{
|
||||||
@ -115,6 +115,7 @@
|
|||||||
visibility::Visibility,
|
visibility::Visibility,
|
||||||
AdtId,
|
AdtId,
|
||||||
AssocContainerId,
|
AssocContainerId,
|
||||||
|
AssocItemId,
|
||||||
AssocItemLoc,
|
AssocItemLoc,
|
||||||
DefWithBodyId,
|
DefWithBodyId,
|
||||||
ItemLoc,
|
ItemLoc,
|
||||||
|
@ -34,8 +34,9 @@
|
|||||||
};
|
};
|
||||||
use fst::{self, Streamer};
|
use fst::{self, Streamer};
|
||||||
use hir::{
|
use hir::{
|
||||||
db::DefDatabase, AdtId, AssocContainerId, AssocItemLoc, DefHasSource, DefWithBodyId, HirFileId,
|
db::DefDatabase, AdtId, AssocContainerId, AssocItemId, AssocItemLoc, DefHasSource,
|
||||||
InFile, ItemLoc, ItemScope, ItemTreeNode, Lookup, ModuleData, ModuleDefId, ModuleId, Semantics,
|
DefWithBodyId, HirFileId, InFile, ItemLoc, ItemScope, ItemTreeNode, Lookup, ModuleData,
|
||||||
|
ModuleDefId, ModuleId, Semantics,
|
||||||
};
|
};
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use rustc_hash::{FxHashMap, FxHashSet};
|
use rustc_hash::{FxHashMap, FxHashSet};
|
||||||
@ -209,21 +210,18 @@ pub fn crate_symbols(db: &RootDatabase, krate: CrateId, query: Query) -> Vec<Fil
|
|||||||
.par_iter()
|
.par_iter()
|
||||||
.map_with(snap, |snap, &module_id| snap.0.module_symbols(module_id))
|
.map_with(snap, |snap, &module_id| snap.0.module_symbols(module_id))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
for i in &buf {
|
||||||
|
dbg!(&i.symbols);
|
||||||
|
}
|
||||||
|
|
||||||
let buf = buf.iter().map(|it| &**it).collect::<Vec<_>>();
|
let buf = buf.iter().map(|it| &**it).collect::<Vec<_>>();
|
||||||
query.search(&buf)
|
query.search(&buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn module_ids_for_crate(db: &RootDatabase, krate: CrateId) -> Vec<ModuleId> {
|
fn module_ids_for_crate(db: &RootDatabase, krate: CrateId) -> Vec<ModuleId> {
|
||||||
let def_map = db.crate_def_map(krate);
|
let def_map = db.crate_def_map(krate);
|
||||||
let mut module_ids = Vec::new();
|
def_map.modules().map(|(id, _)| def_map.module_id(id)).collect()
|
||||||
let mut modules = vec![def_map.root()];
|
|
||||||
while let Some(module) = modules.pop() {
|
|
||||||
let data = &def_map[module];
|
|
||||||
module_ids.push(def_map.module_id(module));
|
|
||||||
modules.extend(data.children.values());
|
|
||||||
}
|
|
||||||
|
|
||||||
module_ids
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn index_resolve(db: &RootDatabase, name: &str) -> Vec<FileSymbol> {
|
pub fn index_resolve(db: &RootDatabase, name: &str) -> Vec<FileSymbol> {
|
||||||
@ -547,7 +545,9 @@ fn decl_module(db: &dyn DefDatabase, module_id: ModuleId) -> Option<FileSymbol>
|
|||||||
symbols: &mut Vec<FileSymbol>,
|
symbols: &mut Vec<FileSymbol>,
|
||||||
bodies_to_traverse: &mut Vec<(Option<SmolStr>, DefWithBodyId)>,
|
bodies_to_traverse: &mut Vec<(Option<SmolStr>, DefWithBodyId)>,
|
||||||
container_name: &Option<SmolStr>| {
|
container_name: &Option<SmolStr>| {
|
||||||
let symbols_iter = scope
|
let mut trait_ids = Vec::new();
|
||||||
|
|
||||||
|
let scope_declaration_symbols = scope
|
||||||
.declarations()
|
.declarations()
|
||||||
.filter_map(|module_def_id| match module_def_id {
|
.filter_map(|module_def_id| match module_def_id {
|
||||||
ModuleDefId::ModuleId(module_id) => decl_module(db, module_id),
|
ModuleDefId::ModuleId(module_id) => decl_module(db, module_id),
|
||||||
@ -584,7 +584,10 @@ fn decl_module(db: &dyn DefDatabase, module_id: ModuleId) -> Option<FileSymbol>
|
|||||||
));
|
));
|
||||||
symbol
|
symbol
|
||||||
}
|
}
|
||||||
ModuleDefId::TraitId(trait_id) => decl(db, trait_id, FileSymbolKind::Trait),
|
ModuleDefId::TraitId(trait_id) => {
|
||||||
|
trait_ids.push(trait_id);
|
||||||
|
decl(db, trait_id, FileSymbolKind::Trait)
|
||||||
|
}
|
||||||
ModuleDefId::TypeAliasId(alias_id) => {
|
ModuleDefId::TypeAliasId(alias_id) => {
|
||||||
decl_assoc(db, alias_id, FileSymbolKind::TypeAlias)
|
decl_assoc(db, alias_id, FileSymbolKind::TypeAlias)
|
||||||
}
|
}
|
||||||
@ -601,7 +604,47 @@ fn decl_module(db: &dyn DefDatabase, module_id: ModuleId) -> Option<FileSymbol>
|
|||||||
s
|
s
|
||||||
});
|
});
|
||||||
|
|
||||||
symbols.extend(symbols_iter);
|
symbols.extend(scope_declaration_symbols);
|
||||||
|
|
||||||
|
// todo: we need to merge in container name to these too.
|
||||||
|
// also clean this up generally tooooo.
|
||||||
|
let scope_impl_symbols = scope
|
||||||
|
.impls()
|
||||||
|
.map(|impl_id| db.impl_data(impl_id))
|
||||||
|
.flat_map(|d| d.items.clone()) // xx: clean up this clone??
|
||||||
|
.filter_map(|assoc_item_id| match assoc_item_id {
|
||||||
|
AssocItemId::FunctionId(function_id) => {
|
||||||
|
decl_assoc(db, function_id, FileSymbolKind::Function)
|
||||||
|
}
|
||||||
|
AssocItemId::ConstId(const_id) => {
|
||||||
|
decl_assoc(db, const_id, FileSymbolKind::Const)
|
||||||
|
}
|
||||||
|
AssocItemId::TypeAliasId(type_alias_id) => {
|
||||||
|
decl_assoc(db, type_alias_id, FileSymbolKind::TypeAlias)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
symbols.extend(scope_impl_symbols);
|
||||||
|
|
||||||
|
// todo: we need to merge in container name to these too.
|
||||||
|
// also clean this up generally tooooo.
|
||||||
|
let scope_trait_symbols = trait_ids
|
||||||
|
.into_iter()
|
||||||
|
.map(|trait_id| db.trait_data(trait_id))
|
||||||
|
.flat_map(|d| d.items.clone())
|
||||||
|
.filter_map(|(_, assoc_item_id)| match assoc_item_id {
|
||||||
|
AssocItemId::FunctionId(function_id) => {
|
||||||
|
decl_assoc(db, function_id, FileSymbolKind::Function)
|
||||||
|
}
|
||||||
|
AssocItemId::ConstId(const_id) => {
|
||||||
|
decl_assoc(db, const_id, FileSymbolKind::Const)
|
||||||
|
}
|
||||||
|
AssocItemId::TypeAliasId(type_alias_id) => {
|
||||||
|
decl_assoc(db, type_alias_id, FileSymbolKind::TypeAlias)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
symbols.extend(scope_trait_symbols);
|
||||||
|
|
||||||
for const_id in scope.unnamed_consts() {
|
for const_id in scope.unnamed_consts() {
|
||||||
// since unnamed consts don't really have a name, we'll inherit parent scope's symbol name.
|
// since unnamed consts don't really have a name, we'll inherit parent scope's symbol name.
|
||||||
|
Loading…
Reference in New Issue
Block a user