Add go to type definition for struct fields within struct

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.
This commit is contained in:
Jade 2021-05-25 04:06:54 -07:00
parent 8b049ec393
commit ff585e4730

View file

@ -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
},
}
"#,
);
}
}