diff --git a/crates/ra_ide_api/src/goto_type_definition.rs b/crates/ra_ide_api/src/goto_type_definition.rs index de2b9d3c3764..e456ec5d624a 100644 --- a/crates/ra_ide_api/src/goto_type_definition.rs +++ b/crates/ra_ide_api/src/goto_type_definition.rs @@ -30,9 +30,9 @@ pub(crate) fn goto_type_definition( return None; }; - let (adt_def, _) = ty.as_adt()?; - let nav = NavigationTarget::from_adt_def(db, adt_def); + let adt_def = ty.autoderef(db).find_map(|ty| ty.as_adt().map(|adt| adt.0))?; + let nav = NavigationTarget::from_adt_def(db, adt_def); Some(RangeInfo::new(node.range(), vec![nav])) } @@ -63,4 +63,19 @@ mod tests { "Foo STRUCT_DEF FileId(1) [0; 11) [7; 10)", ); } + + #[test] + fn goto_type_definition_works_simple_ref() { + check_goto( + " + //- /lib.rs + struct Foo; + fn foo() { + let f: &Foo; + f<|> + } + ", + "Foo STRUCT_DEF FileId(1) [0; 11) [7; 10)", + ); + } }