Record assoc item resolution

This commit is contained in:
Florian Diebold 2019-10-31 15:13:52 +01:00
parent 7b7133ec58
commit c7cedea270
2 changed files with 58 additions and 1 deletions

View file

@ -230,7 +230,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
&mut self,
ty: Ty,
name: &Name,
_id: ExprOrPatId,
id: ExprOrPatId,
) -> Option<(ValueNs, Option<Substs>)> {
let krate = self.resolver.krate()?;
@ -276,6 +276,8 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
trait_: t,
substs: trait_substs,
}));
self.write_assoc_resolution(id, *item);
return Some((ValueNs::Function(f), Some(substs)));
}
}

View file

@ -390,6 +390,61 @@ mod tests {
"spam RECORD_FIELD_DEF FileId(1) [17; 26) [17; 21)",
);
}
#[test]
fn goto_definition_works_for_ufcs_inherent_methods() {
check_goto(
"
//- /lib.rs
struct Foo;
impl Foo {
fn frobnicate() { }
}
fn bar(foo: &Foo) {
Foo::frobnicate<|>();
}
",
"frobnicate FN_DEF FileId(1) [27; 47) [30; 40)",
);
}
#[test]
fn goto_definition_works_for_ufcs_trait_methods_through_traits() {
check_goto(
"
//- /lib.rs
trait Foo {
fn frobnicate();
}
fn bar() {
Foo::frobnicate<|>();
}
",
"frobnicate FN_DEF FileId(1) [16; 32) [19; 29)",
);
}
#[test]
fn goto_definition_works_for_ufcs_trait_methods_through_self() {
check_goto(
"
//- /lib.rs
struct Foo;
trait Trait {
fn frobnicate();
}
impl Trait for Foo {}
fn bar() {
Foo::frobnicate<|>();
}
",
"frobnicate FN_DEF FileId(1) [30; 46) [33; 43)",
);
}
#[test]
fn goto_definition_on_self() {
check_goto(