mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 12:54:58 +00:00
fix: Goto implementation to impls inside blocks
This commit is contained in:
parent
b91697de8f
commit
967a864d03
2 changed files with 97 additions and 1 deletions
|
@ -3628,16 +3628,41 @@ impl Impl {
|
|||
.filter(filter),
|
||||
);
|
||||
}
|
||||
|
||||
if let Some(block) =
|
||||
ty.adt_id(Interner).and_then(|def| def.0.module(db.upcast()).containing_block())
|
||||
{
|
||||
if let Some(inherent_impls) = db.inherent_impls_in_block(block) {
|
||||
all.extend(
|
||||
inherent_impls.for_self_ty(&ty).iter().cloned().map(Self::from).filter(filter),
|
||||
);
|
||||
}
|
||||
if let Some(trait_impls) = db.trait_impls_in_block(block) {
|
||||
all.extend(
|
||||
trait_impls
|
||||
.for_self_ty_without_blanket_impls(fp)
|
||||
.map(Self::from)
|
||||
.filter(filter),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
all
|
||||
}
|
||||
|
||||
pub fn all_for_trait(db: &dyn HirDatabase, trait_: Trait) -> Vec<Impl> {
|
||||
let krate = trait_.module(db).krate();
|
||||
let module = trait_.module(db);
|
||||
let krate = module.krate();
|
||||
let mut all = Vec::new();
|
||||
for Crate { id } in krate.transitive_reverse_dependencies(db) {
|
||||
let impls = db.trait_impls_in_crate(id);
|
||||
all.extend(impls.for_trait(trait_.id).map(Self::from))
|
||||
}
|
||||
if let Some(block) = module.id.containing_block() {
|
||||
if let Some(trait_impls) = db.trait_impls_in_block(block) {
|
||||
all.extend(trait_impls.for_trait(trait_.id).map(Self::from));
|
||||
}
|
||||
}
|
||||
all
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue