mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 14:21:44 +00:00
Make generics and attr queries use ItemTree
Now it's fast
This commit is contained in:
parent
19586bc5c6
commit
ffa0435050
5 changed files with 79 additions and 21 deletions
|
@ -74,8 +74,53 @@ impl GenericParams {
|
|||
def: GenericDefId,
|
||||
) -> Arc<GenericParams> {
|
||||
let _p = profile("generic_params_query");
|
||||
let (params, _source_map) = GenericParams::new(db, def);
|
||||
Arc::new(params)
|
||||
|
||||
let generics = match def {
|
||||
GenericDefId::FunctionId(id) => {
|
||||
let id = id.lookup(db).id;
|
||||
let tree = db.item_tree(id.file_id);
|
||||
let item = &tree[id.value];
|
||||
item.generic_params.clone()
|
||||
}
|
||||
GenericDefId::AdtId(AdtId::StructId(id)) => {
|
||||
let id = id.lookup(db).id;
|
||||
let tree = db.item_tree(id.file_id);
|
||||
let item = &tree[id.value];
|
||||
item.generic_params.clone()
|
||||
}
|
||||
GenericDefId::AdtId(AdtId::EnumId(id)) => {
|
||||
let id = id.lookup(db).id;
|
||||
let tree = db.item_tree(id.file_id);
|
||||
let item = &tree[id.value];
|
||||
item.generic_params.clone()
|
||||
}
|
||||
GenericDefId::AdtId(AdtId::UnionId(id)) => {
|
||||
let id = id.lookup(db).id;
|
||||
let tree = db.item_tree(id.file_id);
|
||||
let item = &tree[id.value];
|
||||
item.generic_params.clone()
|
||||
}
|
||||
GenericDefId::TraitId(id) => {
|
||||
let id = id.lookup(db).id;
|
||||
let tree = db.item_tree(id.file_id);
|
||||
let item = &tree[id.value];
|
||||
item.generic_params.clone()
|
||||
}
|
||||
GenericDefId::TypeAliasId(id) => {
|
||||
let id = id.lookup(db).id;
|
||||
let tree = db.item_tree(id.file_id);
|
||||
let item = &tree[id.value];
|
||||
item.generic_params.clone()
|
||||
}
|
||||
GenericDefId::ImplId(id) => {
|
||||
let id = id.lookup(db).id;
|
||||
let tree = db.item_tree(id.file_id);
|
||||
let item = &tree[id.value];
|
||||
item.generic_params.clone()
|
||||
}
|
||||
GenericDefId::EnumVariantId(_) | GenericDefId::ConstId(_) => GenericParams::default(),
|
||||
};
|
||||
Arc::new(generics)
|
||||
}
|
||||
|
||||
fn new(db: &dyn DefDatabase, def: GenericDefId) -> (GenericParams, InFile<SourceMap>) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue