@@ -143,7 +143,7 @@ fn hover_text_from_name_kind(db: &RootDatabase, def: Definition) -> Option<Strin
143
143
ModuleDef :: TypeAlias ( it) => from_def_source ( db, it, mod_path) ,
144
144
ModuleDef :: BuiltinType ( it) => Some ( it. to_string ( ) ) ,
145
145
} ,
146
- Definition :: Local ( it) => Some ( rust_code_markup ( & it. ty ( db) . display_truncated ( db, None ) ) ) ,
146
+ Definition :: Local ( it) => Some ( rust_code_markup ( & it. ty ( db) . display ( db) ) ) ,
147
147
Definition :: TypeParam ( _) | Definition :: SelfType ( _) => {
148
148
// FIXME: Hover for generic param
149
149
None
@@ -208,7 +208,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
208
208
}
209
209
} ?;
210
210
211
- res. extend ( Some ( rust_code_markup ( & ty. display_truncated ( db, None ) ) ) ) ;
211
+ res. extend ( Some ( rust_code_markup ( & ty. display ( db) ) ) ) ;
212
212
let range = sema. original_range ( & node) . range ;
213
213
Some ( RangeInfo :: new ( range, res) )
214
214
}
@@ -279,6 +279,47 @@ mod tests {
279
279
assert_eq ! ( trim_markup_opt( hover. info. first( ) ) , Some ( "u32" ) ) ;
280
280
}
281
281
282
+ #[ test]
283
+ fn hover_shows_long_type_of_an_expression ( ) {
284
+ check_hover_result (
285
+ r#"
286
+ //- /main.rs
287
+ struct Scan<A, B, C> {
288
+ a: A,
289
+ b: B,
290
+ c: C,
291
+ }
292
+
293
+ struct FakeIter<I> {
294
+ inner: I,
295
+ }
296
+
297
+ struct OtherStruct<T> {
298
+ i: T,
299
+ }
300
+
301
+ enum FakeOption<T> {
302
+ Some(T),
303
+ None,
304
+ }
305
+
306
+ fn scan<A, B, C>(a: A, b: B, c: C) -> FakeIter<Scan<OtherStruct<A>, B, C>> {
307
+ FakeIter { inner: Scan { a, b, c } }
308
+ }
309
+
310
+ fn main() {
311
+ let num: i32 = 55;
312
+ let closure = |memo: &mut u32, value: &u32, _another: &mut u32| -> FakeOption<u32> {
313
+ FakeOption::Some(*memo + value)
314
+ };
315
+ let number = 5u32;
316
+ let mut iter<|> = scan(OtherStruct { i: num }, closure, number);
317
+ }
318
+ "# ,
319
+ & [ "FakeIter<Scan<OtherStruct<OtherStruct<i32>>, |&mut u32, &u32, &mut u32| -> FakeOption<u32>, u32>>" ] ,
320
+ ) ;
321
+ }
322
+
282
323
#[ test]
283
324
fn hover_shows_fn_signature ( ) {
284
325
// Single file with result
@@ -405,7 +446,7 @@ mod tests {
405
446
}
406
447
407
448
#[ test]
408
- fn hover_omits_default_generic_types ( ) {
449
+ fn hover_default_generic_types ( ) {
409
450
check_hover_result (
410
451
r#"
411
452
//- /main.rs
@@ -417,7 +458,7 @@ struct Test<K, T = u8> {
417
458
fn main() {
418
459
let zz<|> = Test { t: 23, k: 33 };
419
460
}"# ,
420
- & [ "Test<i32>" ] ,
461
+ & [ "Test<i32, u8 >" ] ,
421
462
) ;
422
463
}
423
464
0 commit comments