Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide/src/hover.rs11
-rw-r--r--crates/ide/src/hover/render.rs2
-rw-r--r--crates/ide/src/hover/tests.rs47
3 files changed, 57 insertions, 3 deletions
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs
index e3d50fdfa9..1431bd8ca2 100644
--- a/crates/ide/src/hover.rs
+++ b/crates/ide/src/hover.rs
@@ -429,7 +429,7 @@ pub(crate) fn hover_for_definition(
&notable_traits,
macro_arm,
hovered_definition,
- subst_types,
+ subst_types.as_ref(),
config,
edition,
);
@@ -439,7 +439,7 @@ pub(crate) fn hover_for_definition(
show_fn_references_action(sema.db, def),
show_implementations_action(sema.db, def),
runnable_action(sema, def, file_id),
- goto_type_action_for_def(sema.db, def, &notable_traits, edition),
+ goto_type_action_for_def(sema.db, def, &notable_traits, subst_types, edition),
]
.into_iter()
.flatten()
@@ -531,6 +531,7 @@ fn goto_type_action_for_def(
db: &RootDatabase,
def: Definition,
notable_traits: &[(hir::Trait, Vec<(Option<hir::Type>, hir::Name)>)],
+ subst_types: Option<Vec<(hir::Symbol, hir::Type)>>,
edition: Edition,
) -> Option<HoverAction> {
let mut targets: Vec<hir::ModuleDef> = Vec::new();
@@ -568,6 +569,12 @@ fn goto_type_action_for_def(
walk_and_push_ty(db, &ty, &mut push_new_def);
}
+ if let Some(subst_types) = subst_types {
+ for (_, ty) in subst_types {
+ walk_and_push_ty(db, &ty, &mut push_new_def);
+ }
+ }
+
HoverAction::goto_type_from_targets(db, targets, edition)
}
diff --git a/crates/ide/src/hover/render.rs b/crates/ide/src/hover/render.rs
index e979fa02c4..03ab9d1ba4 100644
--- a/crates/ide/src/hover/render.rs
+++ b/crates/ide/src/hover/render.rs
@@ -432,7 +432,7 @@ pub(super) fn definition(
notable_traits: &[(Trait, Vec<(Option<Type>, Name)>)],
macro_arm: Option<u32>,
hovered_definition: bool,
- subst_types: Option<Vec<(Symbol, Type)>>,
+ subst_types: Option<&Vec<(Symbol, Type)>>,
config: &HoverConfig,
edition: Edition,
) -> Markup {
diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs
index 53e9763f50..aca7bd3751 100644
--- a/crates/ide/src/hover/tests.rs
+++ b/crates/ide/src/hover/tests.rs
@@ -2323,6 +2323,53 @@ fn foo(Foo { b$0ar }: &Foo) {}
}
#[test]
+fn test_hover_show_type_def_for_subst() {
+ check_actions(
+ r#"
+fn f<T>(t: T) {
+
+}
+
+struct S;
+
+fn test() {
+ let a = S;
+ f$0(a);
+}
+"#,
+ expect![[r#"
+ [
+ Reference(
+ FilePositionWrapper {
+ file_id: FileId(
+ 0,
+ ),
+ offset: 3,
+ },
+ ),
+ GoToType(
+ [
+ HoverGotoTypeData {
+ mod_path: "ra_test_fixture::S",
+ nav: NavigationTarget {
+ file_id: FileId(
+ 0,
+ ),
+ full_range: 20..29,
+ focus_range: 27..28,
+ name: "S",
+ kind: Struct,
+ description: "struct S",
+ },
+ },
+ ],
+ ),
+ ]
+ "#]],
+ );
+}
+
+#[test]
fn test_hover_non_ascii_space_doc() {
check(
"