Skip to content

Commit 056601b

Browse files
bors[bot]Veykril
andauthored
Merge #7705
7705: Show hover info of the definition of ConstReference patterns instead of its type r=Veykril a=Veykril Closes #7671 bors r+ Co-authored-by: Lukas Wirth <[email protected]>
2 parents 5cd7a0f + 51dda8e commit 056601b

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

crates/ide/src/hover.rs

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use hir::{
22
Adt, AsAssocItem, AssocItemContainer, FieldSource, GenericParam, HasAttrs, HasSource,
33
HirDisplay, Module, ModuleDef, ModuleSource, Semantics,
44
};
5-
use ide_db::base_db::SourceDatabase;
65
use ide_db::{
6+
base_db::SourceDatabase,
77
defs::{Definition, NameClass, NameRefClass},
88
RootDatabase,
99
};
@@ -94,7 +94,12 @@ pub(crate) fn hover(
9494
let node = token.parent();
9595
let definition = match_ast! {
9696
match node {
97-
ast::Name(name) => NameClass::classify(&sema, &name).and_then(|d| d.defined(sema.db)),
97+
// we don't use NameClass::referenced_or_defined here as we do not want to resolve
98+
// field pattern shorthands to their definition
99+
ast::Name(name) => NameClass::classify(&sema, &name).and_then(|class| match class {
100+
NameClass::ConstReference(def) => Some(def),
101+
def => def.defined(sema.db),
102+
}),
98103
ast::NameRef(name_ref) => NameRefClass::classify(&sema, &name_ref).map(|d| d.referenced(sema.db)),
99104
ast::Lifetime(lifetime) => NameClass::classify_lifetime(&sema, &lifetime)
100105
.map_or_else(|| NameRefClass::classify_lifetime(&sema, &lifetime).map(|d| d.referenced(sema.db)), |d| d.defined(sema.db)),
@@ -3445,6 +3450,37 @@ impl<const LEN: usize> Foo<LEN$0> {}
34453450
);
34463451
}
34473452

3453+
#[test]
3454+
fn hover_const_pat() {
3455+
check(
3456+
r#"
3457+
/// This is a doc
3458+
const FOO: usize = 3;
3459+
fn foo() {
3460+
match 5 {
3461+
FOO$0 => (),
3462+
_ => ()
3463+
}
3464+
}
3465+
"#,
3466+
expect![[r#"
3467+
*FOO*
3468+
3469+
```rust
3470+
test
3471+
```
3472+
3473+
```rust
3474+
const FOO: usize = 3
3475+
```
3476+
3477+
---
3478+
3479+
This is a doc
3480+
"#]],
3481+
);
3482+
}
3483+
34483484
#[test]
34493485
fn hover_mod_def() {
34503486
check(

0 commit comments

Comments
 (0)