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 ide_db::RootDatabase;
|
||||||
use syntax::{ast, match_ast, AstNode, SyntaxKind::*, SyntaxToken, TokenAtOffset, T};
|
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::Pat(it) => sema.type_of_pat(&it)?,
|
||||||
ast::SelfParam(it) => sema.type_of_self(&it)?,
|
ast::SelfParam(it) => sema.type_of_self(&it)?,
|
||||||
ast::Type(it) => sema.resolve_type(&it)?,
|
ast::Type(it) => sema.resolve_type(&it)?,
|
||||||
|
ast::RecordField(it) => sema.to_def(&it).map(|d| d.ty(db.upcast()))?,
|
||||||
_ => return None,
|
_ => 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…
x
Reference in New Issue
Block a user