Consider block impls in lookup_impl_assoc_item_for_trait_ref
This commit is contained in:
parent
bb78059be4
commit
92d6670f72
@ -503,6 +503,35 @@ fn f(&self) -> u8 {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn trait_method_inside_block() {
|
||||
check_number(
|
||||
r#"
|
||||
trait Twait {
|
||||
fn a(&self) -> i32;
|
||||
}
|
||||
|
||||
fn outer() -> impl Twait {
|
||||
struct Stwuct;
|
||||
|
||||
impl Twait for Stwuct {
|
||||
fn a(&self) -> i32 {
|
||||
5
|
||||
}
|
||||
}
|
||||
fn f() -> impl Twait {
|
||||
let s = Stwuct;
|
||||
s
|
||||
}
|
||||
f()
|
||||
}
|
||||
|
||||
const GOAL: i32 = outer().a();
|
||||
"#,
|
||||
5,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn generic_fn() {
|
||||
check_number(
|
||||
|
@ -729,8 +729,16 @@ fn lookup_impl_assoc_item_for_trait_ref(
|
||||
let self_ty = trait_ref.self_type_parameter(Interner);
|
||||
let self_ty_fp = TyFingerprint::for_trait_impl(&self_ty)?;
|
||||
let impls = db.trait_impls_in_deps(env.krate);
|
||||
let impls =
|
||||
impls.iter().flat_map(|impls| impls.for_trait_and_self_ty(hir_trait_id, self_ty_fp));
|
||||
let self_impls = match self_ty.kind(Interner) {
|
||||
TyKind::Adt(id, _) => {
|
||||
id.0.module(db.upcast()).containing_block().map(|x| db.trait_impls_in_block(x))
|
||||
}
|
||||
_ => None,
|
||||
};
|
||||
let impls = impls
|
||||
.iter()
|
||||
.chain(self_impls.as_ref())
|
||||
.flat_map(|impls| impls.for_trait_and_self_ty(hir_trait_id, self_ty_fp));
|
||||
|
||||
let table = InferenceTable::new(db, env);
|
||||
|
||||
|
@ -1492,6 +1492,29 @@ impl Twait for Stwuct {
|
||||
fn f() {
|
||||
let s = Stwuct;
|
||||
s.a$0();
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
#[test]
|
||||
fn method_call_inside_block() {
|
||||
check(
|
||||
r#"
|
||||
trait Twait {
|
||||
fn a(&self);
|
||||
}
|
||||
|
||||
fn outer() {
|
||||
struct Stwuct;
|
||||
|
||||
impl Twait for Stwuct {
|
||||
fn a(&self){}
|
||||
//^
|
||||
}
|
||||
fn f() {
|
||||
let s = Stwuct;
|
||||
s.a$0();
|
||||
}
|
||||
}
|
||||
"#,
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user