Skip to content

Commit

Permalink
Merge pull request #18801 from roife/fix-18799
Browse files Browse the repository at this point in the history
feat: show go-to-type-def actions for subst when hovering
  • Loading branch information
Veykril authored Dec 31, 2024
2 parents 65bf7f7 + f581774 commit 1524ab1
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 3 deletions.
11 changes: 9 additions & 2 deletions src/tools/rust-analyzer/crates/ide/src/hover.rs
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ pub(crate) fn hover_for_definition(
&notable_traits,
macro_arm,
hovered_definition,
subst_types,
subst_types.as_ref(),
config,
edition,
);
Expand All @@ -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()
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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)
}

Expand Down
2 changes: 1 addition & 1 deletion src/tools/rust-analyzer/crates/ide/src/hover/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
47 changes: 47 additions & 0 deletions src/tools/rust-analyzer/crates/ide/src/hover/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2322,6 +2322,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(
Expand Down

0 comments on commit 1524ab1

Please sign in to comment.