Merge #8986
8986: Add go to type definition for struct fields within struct r=matklad a=lf- Example: ```rust struct A; struct B { a/*<- cursor*/: A, } ``` Go to type definition used to not work on this position. It now goes to `A` as expected. Co-authored-by: Jade <software@lfcode.ca>
This commit is contained in:
commit
b7414fa14a
@ -1,3 +1,4 @@
|
||||
use ide_db::base_db::Upcast;
|
||||
use ide_db::RootDatabase;
|
||||
use syntax::{ast, match_ast, AstNode, SyntaxKind::*, SyntaxToken, TokenAtOffset, T};
|
||||
|
||||
@ -31,6 +32,7 @@ pub(crate) fn goto_type_definition(
|
||||
ast::Pat(it) => sema.type_of_pat(&it)?,
|
||||
ast::SelfParam(it) => sema.type_of_self(&it)?,
|
||||
ast::Type(it) => sema.resolve_type(&it)?,
|
||||
ast::RecordField(it) => sema.to_def(&it).map(|d| d.ty(db.upcast()))?,
|
||||
_ => return None,
|
||||
}
|
||||
};
|
||||
@ -161,4 +163,34 @@ impl Foo$0 {}
|
||||
"#,
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn goto_def_for_struct_field() {
|
||||
check(
|
||||
r#"
|
||||
struct Bar;
|
||||
//^^^
|
||||
|
||||
struct Foo {
|
||||
bar$0: Bar,
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn goto_def_for_enum_struct_field() {
|
||||
check(
|
||||
r#"
|
||||
struct Bar;
|
||||
//^^^
|
||||
|
||||
enum Foo {
|
||||
Bar {
|
||||
bar$0: Bar
|
||||
},
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user