mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Only add generics with the correct file id to DynMap
This commit is contained in:
parent
8d4f40e881
commit
b6826e9246
@ -454,14 +454,17 @@ impl HasChildSource<LocalConstParamId> for GenericDefId {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ChildBySource for GenericDefId {
|
impl ChildBySource for GenericDefId {
|
||||||
fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, _: HirFileId) {
|
fn child_by_source_to(&self, db: &dyn DefDatabase, res: &mut DynMap, file_id: HirFileId) {
|
||||||
|
let (gfile_id, generic_params_list) = file_id_and_params_of(*self, db);
|
||||||
|
if gfile_id != file_id {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let generic_params = db.generic_params(*self);
|
let generic_params = db.generic_params(*self);
|
||||||
let mut types_idx_iter = generic_params.types.iter().map(|(idx, _)| idx);
|
let mut types_idx_iter = generic_params.types.iter().map(|(idx, _)| idx);
|
||||||
let lts_idx_iter = generic_params.lifetimes.iter().map(|(idx, _)| idx);
|
let lts_idx_iter = generic_params.lifetimes.iter().map(|(idx, _)| idx);
|
||||||
let consts_idx_iter = generic_params.consts.iter().map(|(idx, _)| idx);
|
let consts_idx_iter = generic_params.consts.iter().map(|(idx, _)| idx);
|
||||||
|
|
||||||
let (file_id, generic_params_list) = file_id_and_params_of(*self, db);
|
|
||||||
|
|
||||||
// For traits the first type index is `Self`, skip it.
|
// For traits the first type index is `Self`, skip it.
|
||||||
if let GenericDefId::TraitId(_) = *self {
|
if let GenericDefId::TraitId(_) = *self {
|
||||||
types_idx_iter.next().unwrap(); // advance_by(1);
|
types_idx_iter.next().unwrap(); // advance_by(1);
|
||||||
@ -470,15 +473,15 @@ impl ChildBySource for GenericDefId {
|
|||||||
if let Some(generic_params_list) = generic_params_list {
|
if let Some(generic_params_list) = generic_params_list {
|
||||||
for (local_id, ast_param) in types_idx_iter.zip(generic_params_list.type_params()) {
|
for (local_id, ast_param) in types_idx_iter.zip(generic_params_list.type_params()) {
|
||||||
let id = TypeParamId { parent: *self, local_id };
|
let id = TypeParamId { parent: *self, local_id };
|
||||||
res[keys::TYPE_PARAM].insert(InFile::new(file_id, ast_param), id);
|
res[keys::TYPE_PARAM].insert(InFile::new(gfile_id, ast_param), id);
|
||||||
}
|
}
|
||||||
for (local_id, ast_param) in lts_idx_iter.zip(generic_params_list.lifetime_params()) {
|
for (local_id, ast_param) in lts_idx_iter.zip(generic_params_list.lifetime_params()) {
|
||||||
let id = LifetimeParamId { parent: *self, local_id };
|
let id = LifetimeParamId { parent: *self, local_id };
|
||||||
res[keys::LIFETIME_PARAM].insert(InFile::new(file_id, ast_param), id);
|
res[keys::LIFETIME_PARAM].insert(InFile::new(gfile_id, ast_param), id);
|
||||||
}
|
}
|
||||||
for (local_id, ast_param) in consts_idx_iter.zip(generic_params_list.const_params()) {
|
for (local_id, ast_param) in consts_idx_iter.zip(generic_params_list.const_params()) {
|
||||||
let id = ConstParamId { parent: *self, local_id };
|
let id = ConstParamId { parent: *self, local_id };
|
||||||
res[keys::CONST_PARAM].insert(InFile::new(file_id, ast_param), id);
|
res[keys::CONST_PARAM].insert(InFile::new(gfile_id, ast_param), id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user