@@ -2,8 +2,8 @@ use hir::{
2
2
Adt , AsAssocItem , AssocItemContainer , FieldSource , GenericParam , HasAttrs , HasSource ,
3
3
HirDisplay , Module , ModuleDef , ModuleSource , Semantics ,
4
4
} ;
5
- use ide_db:: base_db:: SourceDatabase ;
6
5
use ide_db:: {
6
+ base_db:: SourceDatabase ,
7
7
defs:: { Definition , NameClass , NameRefClass } ,
8
8
RootDatabase ,
9
9
} ;
@@ -94,7 +94,12 @@ pub(crate) fn hover(
94
94
let node = token. parent ( ) ;
95
95
let definition = match_ast ! {
96
96
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
+ } ) ,
98
103
ast:: NameRef ( name_ref) => NameRefClass :: classify( & sema, & name_ref) . map( |d| d. referenced( sema. db) ) ,
99
104
ast:: Lifetime ( lifetime) => NameClass :: classify_lifetime( & sema, & lifetime)
100
105
. 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> {}
3445
3450
) ;
3446
3451
}
3447
3452
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
+
3448
3484
#[ test]
3449
3485
fn hover_mod_def ( ) {
3450
3486
check (
0 commit comments