diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-01-22 16:16:22 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2021-01-22 16:16:22 +0000 |
commit | e73cc8b4abed6e6f5d801d0032070fa9fc662ec3 (patch) | |
tree | 36ded65537cecddefb5ef91962e9770243d44f4b /crates/completion | |
parent | b16add934d3cb4817ec0f20b8697a4d9701fce4e (diff) | |
parent | 96197e08730a74bb8d5c724968c99d22aa0ca17a (diff) |
Merge #7396
7396: More annoying asserts r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/completion')
-rw-r--r-- | crates/completion/src/completions/dot.rs | 22 | ||||
-rw-r--r-- | crates/completion/src/completions/flyimport.rs | 16 | ||||
-rw-r--r-- | crates/completion/src/completions/qualified_path.rs | 54 | ||||
-rw-r--r-- | crates/completion/src/completions/trait_impl.rs | 5 | ||||
-rw-r--r-- | crates/completion/src/completions/unqualified_path.rs | 50 | ||||
-rw-r--r-- | crates/completion/src/item.rs | 3 | ||||
-rw-r--r-- | crates/completion/src/lib.rs | 91 | ||||
-rw-r--r-- | crates/completion/src/render.rs | 12 | ||||
-rw-r--r-- | crates/completion/src/render/function.rs | 7 |
9 files changed, 122 insertions, 138 deletions
diff --git a/crates/completion/src/completions/dot.rs b/crates/completion/src/completions/dot.rs index d04eef65a..0880a3830 100644 --- a/crates/completion/src/completions/dot.rs +++ b/crates/completion/src/completions/dot.rs | |||
@@ -83,7 +83,7 @@ fn foo(s: S) { s.$0 } | |||
83 | "#, | 83 | "#, |
84 | expect![[r#" | 84 | expect![[r#" |
85 | fd foo u32 | 85 | fd foo u32 |
86 | me bar() fn bar(&self) | 86 | me bar() -> () |
87 | "#]], | 87 | "#]], |
88 | ); | 88 | ); |
89 | } | 89 | } |
@@ -99,7 +99,7 @@ impl S { | |||
99 | "#, | 99 | "#, |
100 | expect![[r#" | 100 | expect![[r#" |
101 | fd the_field (u32,) | 101 | fd the_field (u32,) |
102 | me foo() fn foo(self) | 102 | me foo() -> () |
103 | "#]], | 103 | "#]], |
104 | ) | 104 | ) |
105 | } | 105 | } |
@@ -115,7 +115,7 @@ impl A { | |||
115 | "#, | 115 | "#, |
116 | expect![[r#" | 116 | expect![[r#" |
117 | fd the_field (u32, i32) | 117 | fd the_field (u32, i32) |
118 | me foo() fn foo(&self) | 118 | me foo() -> () |
119 | "#]], | 119 | "#]], |
120 | ) | 120 | ) |
121 | } | 121 | } |
@@ -165,7 +165,7 @@ mod m { | |||
165 | fn foo(a: A) { a.$0 } | 165 | fn foo(a: A) { a.$0 } |
166 | "#, | 166 | "#, |
167 | expect![[r#" | 167 | expect![[r#" |
168 | me the_method() pub(crate) fn the_method(&self) | 168 | me the_method() -> () |
169 | "#]], | 169 | "#]], |
170 | ); | 170 | ); |
171 | } | 171 | } |
@@ -198,7 +198,7 @@ impl A<i32> { | |||
198 | fn foo(a: A<u32>) { a.$0 } | 198 | fn foo(a: A<u32>) { a.$0 } |
199 | "#, | 199 | "#, |
200 | expect![[r#" | 200 | expect![[r#" |
201 | me the_method() fn the_method(&self) | 201 | me the_method() -> () |
202 | "#]], | 202 | "#]], |
203 | ) | 203 | ) |
204 | } | 204 | } |
@@ -213,7 +213,7 @@ impl Trait for A {} | |||
213 | fn foo(a: A) { a.$0 } | 213 | fn foo(a: A) { a.$0 } |
214 | "#, | 214 | "#, |
215 | expect![[r#" | 215 | expect![[r#" |
216 | me the_method() fn the_method(&self) | 216 | me the_method() -> () |
217 | "#]], | 217 | "#]], |
218 | ); | 218 | ); |
219 | } | 219 | } |
@@ -228,7 +228,7 @@ impl<T> Trait for T {} | |||
228 | fn foo(a: &A) { a.$0 } | 228 | fn foo(a: &A) { a.$0 } |
229 | ", | 229 | ", |
230 | expect![[r#" | 230 | expect![[r#" |
231 | me the_method() fn the_method(&self) | 231 | me the_method() -> () |
232 | "#]], | 232 | "#]], |
233 | ); | 233 | ); |
234 | } | 234 | } |
@@ -246,7 +246,7 @@ impl Trait for A {} | |||
246 | fn foo(a: A) { a.$0 } | 246 | fn foo(a: A) { a.$0 } |
247 | ", | 247 | ", |
248 | expect![[r#" | 248 | expect![[r#" |
249 | me the_method() fn the_method(&self) | 249 | me the_method() -> () |
250 | "#]], | 250 | "#]], |
251 | ); | 251 | ); |
252 | } | 252 | } |
@@ -300,7 +300,7 @@ impl T { | |||
300 | } | 300 | } |
301 | "#, | 301 | "#, |
302 | expect![[r#" | 302 | expect![[r#" |
303 | me blah() pub fn blah(&self) | 303 | me blah() -> () |
304 | "#]], | 304 | "#]], |
305 | ); | 305 | ); |
306 | } | 306 | } |
@@ -409,7 +409,7 @@ fn foo() { | |||
409 | } | 409 | } |
410 | "#, | 410 | "#, |
411 | expect![[r#" | 411 | expect![[r#" |
412 | me the_method() pub fn the_method(&self) | 412 | me the_method() -> () |
413 | "#]], | 413 | "#]], |
414 | ); | 414 | ); |
415 | } | 415 | } |
@@ -424,7 +424,7 @@ macro_rules! make_s { () => { S }; } | |||
424 | fn main() { make_s!().f$0; } | 424 | fn main() { make_s!().f$0; } |
425 | "#, | 425 | "#, |
426 | expect![[r#" | 426 | expect![[r#" |
427 | me foo() fn foo(&self) | 427 | me foo() -> () |
428 | "#]], | 428 | "#]], |
429 | ) | 429 | ) |
430 | } | 430 | } |
diff --git a/crates/completion/src/completions/flyimport.rs b/crates/completion/src/completions/flyimport.rs index dc0b38a16..6591127b1 100644 --- a/crates/completion/src/completions/flyimport.rs +++ b/crates/completion/src/completions/flyimport.rs | |||
@@ -366,8 +366,8 @@ fn main() { | |||
366 | check( | 366 | check( |
367 | fixture, | 367 | fixture, |
368 | expect![[r#" | 368 | expect![[r#" |
369 | fn weird_function() (dep::test_mod::TestTrait) fn weird_function() | 369 | fn weird_function() (dep::test_mod::TestTrait) -> () |
370 | "#]], | 370 | "#]], |
371 | ); | 371 | ); |
372 | 372 | ||
373 | check_edit( | 373 | check_edit( |
@@ -459,8 +459,8 @@ fn main() { | |||
459 | check( | 459 | check( |
460 | fixture, | 460 | fixture, |
461 | expect![[r#" | 461 | expect![[r#" |
462 | me random_method() (dep::test_mod::TestTrait) fn random_method(&self) | 462 | me random_method() (dep::test_mod::TestTrait) -> () |
463 | "#]], | 463 | "#]], |
464 | ); | 464 | ); |
465 | 465 | ||
466 | check_edit( | 466 | check_edit( |
@@ -629,8 +629,8 @@ fn main() { | |||
629 | } | 629 | } |
630 | "#, | 630 | "#, |
631 | expect![[r#" | 631 | expect![[r#" |
632 | me random_method() (dep::test_mod::TestTrait) fn random_method(&self) DEPRECATED | 632 | me random_method() (dep::test_mod::TestTrait) -> () DEPRECATED |
633 | "#]], | 633 | "#]], |
634 | ); | 634 | ); |
635 | 635 | ||
636 | check( | 636 | check( |
@@ -660,8 +660,8 @@ fn main() { | |||
660 | "#, | 660 | "#, |
661 | expect![[r#" | 661 | expect![[r#" |
662 | ct SPECIAL_CONST (dep::test_mod::TestTrait) DEPRECATED | 662 | ct SPECIAL_CONST (dep::test_mod::TestTrait) DEPRECATED |
663 | fn weird_function() (dep::test_mod::TestTrait) fn weird_function() DEPRECATED | 663 | fn weird_function() (dep::test_mod::TestTrait) -> () DEPRECATED |
664 | "#]], | 664 | "#]], |
665 | ); | 665 | ); |
666 | } | 666 | } |
667 | } | 667 | } |
diff --git a/crates/completion/src/completions/qualified_path.rs b/crates/completion/src/completions/qualified_path.rs index 33df26761..bbeaab496 100644 --- a/crates/completion/src/completions/qualified_path.rs +++ b/crates/completion/src/completions/qualified_path.rs | |||
@@ -359,8 +359,8 @@ impl S { | |||
359 | fn foo() { let _ = S::$0 } | 359 | fn foo() { let _ = S::$0 } |
360 | "#, | 360 | "#, |
361 | expect![[r#" | 361 | expect![[r#" |
362 | fn a() fn a() | 362 | fn a() -> () |
363 | me b(…) fn b(&self) | 363 | me b(…) -> () |
364 | ct C const C: i32 = 42; | 364 | ct C const C: i32 = 42; |
365 | ta T type T = i32; | 365 | ta T type T = i32; |
366 | "#]], | 366 | "#]], |
@@ -387,7 +387,7 @@ mod m { | |||
387 | fn foo() { let _ = S::$0 } | 387 | fn foo() { let _ = S::$0 } |
388 | "#, | 388 | "#, |
389 | expect![[r#" | 389 | expect![[r#" |
390 | fn public_method() pub(crate) fn public_method() | 390 | fn public_method() -> () |
391 | ct PUBLIC_CONST pub(crate) const PUBLIC_CONST: u32 = 1; | 391 | ct PUBLIC_CONST pub(crate) const PUBLIC_CONST: u32 = 1; |
392 | ta PublicType pub(crate) type PublicType = u32; | 392 | ta PublicType pub(crate) type PublicType = u32; |
393 | "#]], | 393 | "#]], |
@@ -404,7 +404,7 @@ impl E { fn m() { } } | |||
404 | fn foo() { let _ = E::$0 } | 404 | fn foo() { let _ = E::$0 } |
405 | "#, | 405 | "#, |
406 | expect![[r#" | 406 | expect![[r#" |
407 | fn m() fn m() | 407 | fn m() -> () |
408 | "#]], | 408 | "#]], |
409 | ); | 409 | ); |
410 | } | 410 | } |
@@ -419,7 +419,7 @@ impl U { fn m() { } } | |||
419 | fn foo() { let _ = U::$0 } | 419 | fn foo() { let _ = U::$0 } |
420 | "#, | 420 | "#, |
421 | expect![[r#" | 421 | expect![[r#" |
422 | fn m() fn m() | 422 | fn m() -> () |
423 | "#]], | 423 | "#]], |
424 | ); | 424 | ); |
425 | } | 425 | } |
@@ -449,7 +449,7 @@ trait Trait { fn m(); } | |||
449 | fn foo() { let _ = Trait::$0 } | 449 | fn foo() { let _ = Trait::$0 } |
450 | "#, | 450 | "#, |
451 | expect![[r#" | 451 | expect![[r#" |
452 | fn m() fn m() | 452 | fn m() -> () |
453 | "#]], | 453 | "#]], |
454 | ); | 454 | ); |
455 | } | 455 | } |
@@ -466,7 +466,7 @@ impl Trait for S {} | |||
466 | fn foo() { let _ = S::$0 } | 466 | fn foo() { let _ = S::$0 } |
467 | "#, | 467 | "#, |
468 | expect![[r#" | 468 | expect![[r#" |
469 | fn m() fn m() | 469 | fn m() -> () |
470 | "#]], | 470 | "#]], |
471 | ); | 471 | ); |
472 | } | 472 | } |
@@ -483,7 +483,7 @@ impl Trait for S {} | |||
483 | fn foo() { let _ = <S as Trait>::$0 } | 483 | fn foo() { let _ = <S as Trait>::$0 } |
484 | "#, | 484 | "#, |
485 | expect![[r#" | 485 | expect![[r#" |
486 | fn m() fn m() | 486 | fn m() -> () |
487 | "#]], | 487 | "#]], |
488 | ); | 488 | ); |
489 | } | 489 | } |
@@ -512,11 +512,11 @@ fn foo<T: Sub>() { T::$0 } | |||
512 | ta SubTy type SubTy; | 512 | ta SubTy type SubTy; |
513 | ta Ty type Ty; | 513 | ta Ty type Ty; |
514 | ct C2 const C2: (); | 514 | ct C2 const C2: (); |
515 | fn subfunc() fn subfunc() | 515 | fn subfunc() -> () |
516 | me submethod(…) fn submethod(&self) | 516 | me submethod(…) -> () |
517 | ct CONST const CONST: u8; | 517 | ct CONST const CONST: u8; |
518 | fn func() fn func() | 518 | fn func() -> () |
519 | me method(…) fn method(&self) | 519 | me method(…) -> () |
520 | "#]], | 520 | "#]], |
521 | ); | 521 | ); |
522 | } | 522 | } |
@@ -552,11 +552,11 @@ impl<T> Sub for Wrap<T> { | |||
552 | ta SubTy type SubTy; | 552 | ta SubTy type SubTy; |
553 | ta Ty type Ty; | 553 | ta Ty type Ty; |
554 | ct CONST const CONST: u8 = 0; | 554 | ct CONST const CONST: u8 = 0; |
555 | fn func() fn func() | 555 | fn func() -> () |
556 | me method(…) fn method(&self) | 556 | me method(…) -> () |
557 | ct C2 const C2: () = (); | 557 | ct C2 const C2: () = (); |
558 | fn subfunc() fn subfunc() | 558 | fn subfunc() -> () |
559 | me submethod(…) fn submethod(&self) | 559 | me submethod(…) -> () |
560 | "#]], | 560 | "#]], |
561 | ); | 561 | ); |
562 | } | 562 | } |
@@ -573,8 +573,8 @@ impl T { fn bar() {} } | |||
573 | fn main() { T::$0; } | 573 | fn main() { T::$0; } |
574 | "#, | 574 | "#, |
575 | expect![[r#" | 575 | expect![[r#" |
576 | fn foo() fn foo() | 576 | fn foo() -> () |
577 | fn bar() fn bar() | 577 | fn bar() -> () |
578 | "#]], | 578 | "#]], |
579 | ); | 579 | ); |
580 | } | 580 | } |
@@ -589,7 +589,7 @@ macro_rules! foo { () => {} } | |||
589 | fn main() { let _ = crate::$0 } | 589 | fn main() { let _ = crate::$0 } |
590 | "#, | 590 | "#, |
591 | expect![[r##" | 591 | expect![[r##" |
592 | fn main() fn main() | 592 | fn main() -> () |
593 | ma foo!(…) #[macro_export] macro_rules! foo | 593 | ma foo!(…) #[macro_export] macro_rules! foo |
594 | "##]], | 594 | "##]], |
595 | ); | 595 | ); |
@@ -633,7 +633,7 @@ mod p { | |||
633 | "#, | 633 | "#, |
634 | expect![[r#" | 634 | expect![[r#" |
635 | ct RIGHT_CONST | 635 | ct RIGHT_CONST |
636 | fn right_fn() fn wrong_fn() | 636 | fn right_fn() -> () |
637 | st RightType | 637 | st RightType |
638 | "#]], | 638 | "#]], |
639 | ); | 639 | ); |
@@ -680,8 +680,8 @@ fn main() { m!(self::f$0); } | |||
680 | fn foo() {} | 680 | fn foo() {} |
681 | "#, | 681 | "#, |
682 | expect![[r#" | 682 | expect![[r#" |
683 | fn main() fn main() | 683 | fn main() -> () |
684 | fn foo() fn foo() | 684 | fn foo() -> () |
685 | "#]], | 685 | "#]], |
686 | ); | 686 | ); |
687 | } | 687 | } |
@@ -699,7 +699,7 @@ mod m { | |||
699 | "#, | 699 | "#, |
700 | expect![[r#" | 700 | expect![[r#" |
701 | md z | 701 | md z |
702 | fn z() pub fn z() | 702 | fn z() -> () |
703 | "#]], | 703 | "#]], |
704 | ); | 704 | ); |
705 | } | 705 | } |
@@ -719,7 +719,7 @@ fn foo() { | |||
719 | } | 719 | } |
720 | "#, | 720 | "#, |
721 | expect![[r#" | 721 | expect![[r#" |
722 | fn new() pub fn new() -> HashMap<K, V, RandomState> | 722 | fn new() -> HashMap<K, V, RandomState> |
723 | "#]], | 723 | "#]], |
724 | ); | 724 | ); |
725 | } | 725 | } |
@@ -752,8 +752,8 @@ fn main() { | |||
752 | } | 752 | } |
753 | "#, | 753 | "#, |
754 | expect![[r#" | 754 | expect![[r#" |
755 | fn main() fn main() | 755 | fn main() -> () |
756 | fn foo(…) fn foo(a: i32, b: i32) | 756 | fn foo(…) -> () |
757 | "#]], | 757 | "#]], |
758 | ); | 758 | ); |
759 | } | 759 | } |
@@ -776,7 +776,7 @@ impl Foo { | |||
776 | expect![[r#" | 776 | expect![[r#" |
777 | ev Bar () | 777 | ev Bar () |
778 | ev Baz () | 778 | ev Baz () |
779 | me foo(…) fn foo(self) | 779 | me foo(…) -> () |
780 | "#]], | 780 | "#]], |
781 | ); | 781 | ); |
782 | } | 782 | } |
diff --git a/crates/completion/src/completions/trait_impl.rs b/crates/completion/src/completions/trait_impl.rs index f258ad9c3..b999540b8 100644 --- a/crates/completion/src/completions/trait_impl.rs +++ b/crates/completion/src/completions/trait_impl.rs | |||
@@ -679,11 +679,6 @@ impl Test for () { | |||
679 | #[test] | 679 | #[test] |
680 | fn complete_without_name() { | 680 | fn complete_without_name() { |
681 | let test = |completion: &str, hint: &str, completed: &str, next_sibling: &str| { | 681 | let test = |completion: &str, hint: &str, completed: &str, next_sibling: &str| { |
682 | println!( | ||
683 | "completion='{}', hint='{}', next_sibling='{}'", | ||
684 | completion, hint, next_sibling | ||
685 | ); | ||
686 | |||
687 | check_edit( | 682 | check_edit( |
688 | completion, | 683 | completion, |
689 | &format!( | 684 | &format!( |
diff --git a/crates/completion/src/completions/unqualified_path.rs b/crates/completion/src/completions/unqualified_path.rs index a289efc34..5d62fab97 100644 --- a/crates/completion/src/completions/unqualified_path.rs +++ b/crates/completion/src/completions/unqualified_path.rs | |||
@@ -167,7 +167,7 @@ fn quux(x: i32) { | |||
167 | expect![[r#" | 167 | expect![[r#" |
168 | lc y i32 | 168 | lc y i32 |
169 | lc x i32 | 169 | lc x i32 |
170 | fn quux(…) fn quux(x: i32) | 170 | fn quux(…) -> () |
171 | "#]], | 171 | "#]], |
172 | ); | 172 | ); |
173 | } | 173 | } |
@@ -189,7 +189,7 @@ fn quux() { | |||
189 | expect![[r#" | 189 | expect![[r#" |
190 | lc b i32 | 190 | lc b i32 |
191 | lc a | 191 | lc a |
192 | fn quux() fn quux() | 192 | fn quux() -> () |
193 | "#]], | 193 | "#]], |
194 | ); | 194 | ); |
195 | } | 195 | } |
@@ -204,7 +204,7 @@ fn quux() { | |||
204 | "#, | 204 | "#, |
205 | expect![[r#" | 205 | expect![[r#" |
206 | lc x | 206 | lc x |
207 | fn quux() fn quux() | 207 | fn quux() -> () |
208 | "#]], | 208 | "#]], |
209 | ); | 209 | ); |
210 | } | 210 | } |
@@ -235,14 +235,14 @@ fn main() { | |||
235 | r#"fn quux<T>() { $0 }"#, | 235 | r#"fn quux<T>() { $0 }"#, |
236 | expect![[r#" | 236 | expect![[r#" |
237 | tp T | 237 | tp T |
238 | fn quux() fn quux<T>() | 238 | fn quux() -> () |
239 | "#]], | 239 | "#]], |
240 | ); | 240 | ); |
241 | check( | 241 | check( |
242 | r#"fn quux<const C: usize>() { $0 }"#, | 242 | r#"fn quux<const C: usize>() { $0 }"#, |
243 | expect![[r#" | 243 | expect![[r#" |
244 | cp C | 244 | cp C |
245 | fn quux() fn quux<const C: usize>() | 245 | fn quux() -> () |
246 | "#]], | 246 | "#]], |
247 | ); | 247 | ); |
248 | } | 248 | } |
@@ -253,7 +253,7 @@ fn main() { | |||
253 | check( | 253 | check( |
254 | r#"fn quux<'a>() { $0 }"#, | 254 | r#"fn quux<'a>() { $0 }"#, |
255 | expect![[r#" | 255 | expect![[r#" |
256 | fn quux() fn quux<'a>() | 256 | fn quux() -> () |
257 | "#]], | 257 | "#]], |
258 | ); | 258 | ); |
259 | } | 259 | } |
@@ -291,7 +291,7 @@ fn quux() { $0 } | |||
291 | "#, | 291 | "#, |
292 | expect![[r#" | 292 | expect![[r#" |
293 | st S | 293 | st S |
294 | fn quux() fn quux() | 294 | fn quux() -> () |
295 | en E | 295 | en E |
296 | "#]], | 296 | "#]], |
297 | ); | 297 | ); |
@@ -344,7 +344,7 @@ mod m { | |||
344 | } | 344 | } |
345 | "#, | 345 | "#, |
346 | expect![[r#" | 346 | expect![[r#" |
347 | fn quux() fn quux() | 347 | fn quux() -> () |
348 | st Bar | 348 | st Bar |
349 | "#]], | 349 | "#]], |
350 | ); | 350 | ); |
@@ -359,7 +359,7 @@ fn x() -> $0 | |||
359 | "#, | 359 | "#, |
360 | expect![[r#" | 360 | expect![[r#" |
361 | st Foo | 361 | st Foo |
362 | fn x() fn x() | 362 | fn x() -> () |
363 | "#]], | 363 | "#]], |
364 | ); | 364 | ); |
365 | } | 365 | } |
@@ -380,7 +380,7 @@ fn foo() { | |||
380 | expect![[r#" | 380 | expect![[r#" |
381 | lc bar i32 | 381 | lc bar i32 |
382 | lc bar i32 | 382 | lc bar i32 |
383 | fn foo() fn foo() | 383 | fn foo() -> () |
384 | "#]], | 384 | "#]], |
385 | ); | 385 | ); |
386 | } | 386 | } |
@@ -410,7 +410,7 @@ use prelude::*; | |||
410 | mod prelude { struct Option; } | 410 | mod prelude { struct Option; } |
411 | "#, | 411 | "#, |
412 | expect![[r#" | 412 | expect![[r#" |
413 | fn foo() fn foo() | 413 | fn foo() -> () |
414 | md std | 414 | md std |
415 | st Option | 415 | st Option |
416 | "#]], | 416 | "#]], |
@@ -440,7 +440,7 @@ mod macros { | |||
440 | } | 440 | } |
441 | "#, | 441 | "#, |
442 | expect![[r##" | 442 | expect![[r##" |
443 | fn f() fn f() | 443 | fn f() -> () |
444 | ma concat!(…) #[macro_export] macro_rules! concat | 444 | ma concat!(…) #[macro_export] macro_rules! concat |
445 | md std | 445 | md std |
446 | "##]], | 446 | "##]], |
@@ -467,7 +467,7 @@ use prelude::*; | |||
467 | mod prelude { struct String; } | 467 | mod prelude { struct String; } |
468 | "#, | 468 | "#, |
469 | expect![[r#" | 469 | expect![[r#" |
470 | fn foo() fn foo() | 470 | fn foo() -> () |
471 | md std | 471 | md std |
472 | md core | 472 | md core |
473 | st String | 473 | st String |
@@ -498,7 +498,7 @@ fn main() { let v = $0 } | |||
498 | expect![[r##" | 498 | expect![[r##" |
499 | md m1 | 499 | md m1 |
500 | ma baz!(…) #[macro_export] macro_rules! baz | 500 | ma baz!(…) #[macro_export] macro_rules! baz |
501 | fn main() fn main() | 501 | fn main() -> () |
502 | md m2 | 502 | md m2 |
503 | ma bar!(…) macro_rules! bar | 503 | ma bar!(…) macro_rules! bar |
504 | ma foo!(…) macro_rules! foo | 504 | ma foo!(…) macro_rules! foo |
@@ -514,7 +514,7 @@ macro_rules! foo { () => {} } | |||
514 | fn foo() { $0 } | 514 | fn foo() { $0 } |
515 | "#, | 515 | "#, |
516 | expect![[r#" | 516 | expect![[r#" |
517 | fn foo() fn foo() | 517 | fn foo() -> () |
518 | ma foo!(…) macro_rules! foo | 518 | ma foo!(…) macro_rules! foo |
519 | "#]], | 519 | "#]], |
520 | ); | 520 | ); |
@@ -528,7 +528,7 @@ macro_rules! foo { () => {} } | |||
528 | fn main() { let x: $0 } | 528 | fn main() { let x: $0 } |
529 | "#, | 529 | "#, |
530 | expect![[r#" | 530 | expect![[r#" |
531 | fn main() fn main() | 531 | fn main() -> () |
532 | ma foo!(…) macro_rules! foo | 532 | ma foo!(…) macro_rules! foo |
533 | "#]], | 533 | "#]], |
534 | ); | 534 | ); |
@@ -542,7 +542,7 @@ macro_rules! foo { () => {} } | |||
542 | fn main() { $0 } | 542 | fn main() { $0 } |
543 | "#, | 543 | "#, |
544 | expect![[r#" | 544 | expect![[r#" |
545 | fn main() fn main() | 545 | fn main() -> () |
546 | ma foo!(…) macro_rules! foo | 546 | ma foo!(…) macro_rules! foo |
547 | "#]], | 547 | "#]], |
548 | ); | 548 | ); |
@@ -558,8 +558,8 @@ fn main() { | |||
558 | } | 558 | } |
559 | "#, | 559 | "#, |
560 | expect![[r#" | 560 | expect![[r#" |
561 | fn frobnicate() fn frobnicate() | 561 | fn frobnicate() -> () |
562 | fn main() fn main() | 562 | fn main() -> () |
563 | "#]], | 563 | "#]], |
564 | ); | 564 | ); |
565 | } | 565 | } |
@@ -577,7 +577,7 @@ fn quux(x: i32) { | |||
577 | expect![[r#" | 577 | expect![[r#" |
578 | lc y i32 | 578 | lc y i32 |
579 | lc x i32 | 579 | lc x i32 |
580 | fn quux(…) fn quux(x: i32) | 580 | fn quux(…) -> () |
581 | ma m!(…) macro_rules! m | 581 | ma m!(…) macro_rules! m |
582 | "#]], | 582 | "#]], |
583 | ); | 583 | ); |
@@ -596,7 +596,7 @@ fn quux(x: i32) { | |||
596 | expect![[r#" | 596 | expect![[r#" |
597 | lc y i32 | 597 | lc y i32 |
598 | lc x i32 | 598 | lc x i32 |
599 | fn quux(…) fn quux(x: i32) | 599 | fn quux(…) -> () |
600 | ma m!(…) macro_rules! m | 600 | ma m!(…) macro_rules! m |
601 | "#]], | 601 | "#]], |
602 | ); | 602 | ); |
@@ -615,7 +615,7 @@ fn quux(x: i32) { | |||
615 | expect![[r#" | 615 | expect![[r#" |
616 | lc y i32 | 616 | lc y i32 |
617 | lc x i32 | 617 | lc x i32 |
618 | fn quux(…) fn quux(x: i32) | 618 | fn quux(…) -> () |
619 | ma m!(…) macro_rules! m | 619 | ma m!(…) macro_rules! m |
620 | "#]], | 620 | "#]], |
621 | ); | 621 | ); |
@@ -630,7 +630,7 @@ use spam::Quux; | |||
630 | fn main() { $0 } | 630 | fn main() { $0 } |
631 | "#, | 631 | "#, |
632 | expect![[r#" | 632 | expect![[r#" |
633 | fn main() fn main() | 633 | fn main() -> () |
634 | ?? Quux | 634 | ?? Quux |
635 | "#]], | 635 | "#]], |
636 | ); | 636 | ); |
@@ -708,7 +708,7 @@ fn main() { let foo: Foo = Q$0 } | |||
708 | ev Foo::Baz () | 708 | ev Foo::Baz () |
709 | ev Foo::Quux () | 709 | ev Foo::Quux () |
710 | en Foo | 710 | en Foo |
711 | fn main() fn main() | 711 | fn main() -> () |
712 | "#]], | 712 | "#]], |
713 | ) | 713 | ) |
714 | } | 714 | } |
@@ -723,7 +723,7 @@ fn f() -> m::E { V$0 } | |||
723 | expect![[r#" | 723 | expect![[r#" |
724 | ev m::E::V () | 724 | ev m::E::V () |
725 | md m | 725 | md m |
726 | fn f() fn f() -> m::E | 726 | fn f() -> E |
727 | "#]], | 727 | "#]], |
728 | ) | 728 | ) |
729 | } | 729 | } |
diff --git a/crates/completion/src/item.rs b/crates/completion/src/item.rs index d2e6a6aeb..eeb952ec3 100644 --- a/crates/completion/src/item.rs +++ b/crates/completion/src/item.rs | |||
@@ -398,14 +398,13 @@ impl Builder { | |||
398 | self.insert_text_format = InsertTextFormat::Snippet; | 398 | self.insert_text_format = InsertTextFormat::Snippet; |
399 | self.text_edit(edit) | 399 | self.text_edit(edit) |
400 | } | 400 | } |
401 | #[allow(unused)] | ||
402 | pub(crate) fn detail(self, detail: impl Into<String>) -> Builder { | 401 | pub(crate) fn detail(self, detail: impl Into<String>) -> Builder { |
403 | self.set_detail(Some(detail)) | 402 | self.set_detail(Some(detail)) |
404 | } | 403 | } |
405 | pub(crate) fn set_detail(mut self, detail: Option<impl Into<String>>) -> Builder { | 404 | pub(crate) fn set_detail(mut self, detail: Option<impl Into<String>>) -> Builder { |
406 | self.detail = detail.map(Into::into); | 405 | self.detail = detail.map(Into::into); |
407 | if let Some(detail) = &self.detail { | 406 | if let Some(detail) = &self.detail { |
408 | if assert_never!(detail.contains('\n'), "multiline detail: {}", detail) { | 407 | if assert_never!(detail.contains('\n'), "multiline detail:\n{}", detail) { |
409 | self.detail = Some(detail.splitn(2, '\n').next().unwrap().to_string()); | 408 | self.detail = Some(detail.splitn(2, '\n').next().unwrap().to_string()); |
410 | } | 409 | } |
411 | } | 410 | } |
diff --git a/crates/completion/src/lib.rs b/crates/completion/src/lib.rs index 2c4e54524..db8bfbbc3 100644 --- a/crates/completion/src/lib.rs +++ b/crates/completion/src/lib.rs | |||
@@ -209,25 +209,24 @@ mod tests { | |||
209 | fn test_completion_detail_from_macro_generated_struct_fn_doc_attr() { | 209 | fn test_completion_detail_from_macro_generated_struct_fn_doc_attr() { |
210 | check_detail_and_documentation( | 210 | check_detail_and_documentation( |
211 | r#" | 211 | r#" |
212 | //- /lib.rs | 212 | macro_rules! bar { |
213 | macro_rules! bar { | 213 | () => { |
214 | () => { | 214 | struct Bar; |
215 | struct Bar; | 215 | impl Bar { |
216 | impl Bar { | 216 | #[doc = "Do the foo"] |
217 | #[doc = "Do the foo"] | 217 | fn foo(&self) {} |
218 | fn foo(&self) {} | 218 | } |
219 | } | 219 | } |
220 | } | 220 | } |
221 | } | ||
222 | 221 | ||
223 | bar!(); | 222 | bar!(); |
224 | 223 | ||
225 | fn foo() { | 224 | fn foo() { |
226 | let bar = Bar; | 225 | let bar = Bar; |
227 | bar.fo$0; | 226 | bar.fo$0; |
228 | } | 227 | } |
229 | "#, | 228 | "#, |
230 | DetailAndDocumentation { detail: "fn foo(&self)", documentation: "Do the foo" }, | 229 | DetailAndDocumentation { detail: "-> ()", documentation: "Do the foo" }, |
231 | ); | 230 | ); |
232 | } | 231 | } |
233 | 232 | ||
@@ -235,52 +234,42 @@ mod tests { | |||
235 | fn test_completion_detail_from_macro_generated_struct_fn_doc_comment() { | 234 | fn test_completion_detail_from_macro_generated_struct_fn_doc_comment() { |
236 | check_detail_and_documentation( | 235 | check_detail_and_documentation( |
237 | r#" | 236 | r#" |
238 | //- /lib.rs | 237 | macro_rules! bar { |
239 | macro_rules! bar { | 238 | () => { |
240 | () => { | 239 | struct Bar; |
241 | struct Bar; | 240 | impl Bar { |
242 | impl Bar { | 241 | /// Do the foo |
243 | /// Do the foo | 242 | fn foo(&self) {} |
244 | fn foo(&self) {} | 243 | } |
245 | } | 244 | } |
246 | } | 245 | } |
247 | } | ||
248 | 246 | ||
249 | bar!(); | 247 | bar!(); |
250 | 248 | ||
251 | fn foo() { | 249 | fn foo() { |
252 | let bar = Bar; | 250 | let bar = Bar; |
253 | bar.fo$0; | 251 | bar.fo$0; |
254 | } | 252 | } |
255 | "#, | 253 | "#, |
256 | DetailAndDocumentation { detail: "fn foo(&self)", documentation: " Do the foo" }, | 254 | DetailAndDocumentation { detail: "-> ()", documentation: " Do the foo" }, |
257 | ); | 255 | ); |
258 | } | 256 | } |
259 | 257 | ||
260 | #[test] | 258 | #[test] |
261 | fn test_no_completions_required() { | 259 | fn test_no_completions_required() { |
262 | // There must be no hint for 'in' keyword. | 260 | // There must be no hint for 'in' keyword. |
263 | check_no_completion( | 261 | check_no_completion(r#"fn foo() { for i i$0 }"#); |
264 | r#" | ||
265 | fn foo() { | ||
266 | for i i$0 | ||
267 | } | ||
268 | "#, | ||
269 | ); | ||
270 | // After 'in' keyword hints may be spawned. | 262 | // After 'in' keyword hints may be spawned. |
271 | check_detail_and_documentation( | 263 | check_detail_and_documentation( |
272 | r#" | 264 | r#" |
273 | /// Do the foo | 265 | /// Do the foo |
274 | fn foo() -> &'static str { "foo" } | 266 | fn foo() -> &'static str { "foo" } |
275 | 267 | ||
276 | fn bar() { | 268 | fn bar() { |
277 | for c in fo$0 | 269 | for c in fo$0 |
278 | } | 270 | } |
279 | "#, | 271 | "#, |
280 | DetailAndDocumentation { | 272 | DetailAndDocumentation { detail: "-> &str", documentation: "Do the foo" }, |
281 | detail: "fn foo() -> &'static str", | ||
282 | documentation: "Do the foo", | ||
283 | }, | ||
284 | ); | 273 | ); |
285 | } | 274 | } |
286 | } | 275 | } |
diff --git a/crates/completion/src/render.rs b/crates/completion/src/render.rs index fa594b5e5..6eb20df2b 100644 --- a/crates/completion/src/render.rs +++ b/crates/completion/src/render.rs | |||
@@ -523,7 +523,7 @@ fn main() { let _: m::Spam = S$0 } | |||
523 | Function, | 523 | Function, |
524 | ), | 524 | ), |
525 | lookup: "main", | 525 | lookup: "main", |
526 | detail: "fn main()", | 526 | detail: "-> ()", |
527 | }, | 527 | }, |
528 | ] | 528 | ] |
529 | "#]], | 529 | "#]], |
@@ -552,7 +552,7 @@ fn main() { som$0 } | |||
552 | Function, | 552 | Function, |
553 | ), | 553 | ), |
554 | lookup: "main", | 554 | lookup: "main", |
555 | detail: "fn main()", | 555 | detail: "-> ()", |
556 | }, | 556 | }, |
557 | CompletionItem { | 557 | CompletionItem { |
558 | label: "something_deprecated()", | 558 | label: "something_deprecated()", |
@@ -563,7 +563,7 @@ fn main() { som$0 } | |||
563 | Function, | 563 | Function, |
564 | ), | 564 | ), |
565 | lookup: "something_deprecated", | 565 | lookup: "something_deprecated", |
566 | detail: "fn something_deprecated()", | 566 | detail: "-> ()", |
567 | deprecated: true, | 567 | deprecated: true, |
568 | }, | 568 | }, |
569 | CompletionItem { | 569 | CompletionItem { |
@@ -575,7 +575,7 @@ fn main() { som$0 } | |||
575 | Function, | 575 | Function, |
576 | ), | 576 | ), |
577 | lookup: "something_else_deprecated", | 577 | lookup: "something_else_deprecated", |
578 | detail: "fn something_else_deprecated()", | 578 | detail: "-> ()", |
579 | deprecated: true, | 579 | deprecated: true, |
580 | }, | 580 | }, |
581 | ] | 581 | ] |
@@ -626,7 +626,7 @@ impl S { | |||
626 | insert: "bar()$0", | 626 | insert: "bar()$0", |
627 | kind: Method, | 627 | kind: Method, |
628 | lookup: "bar", | 628 | lookup: "bar", |
629 | detail: "fn bar(self)", | 629 | detail: "-> ()", |
630 | documentation: Documentation( | 630 | documentation: Documentation( |
631 | "Method docs", | 631 | "Method docs", |
632 | ), | 632 | ), |
@@ -726,7 +726,7 @@ fn foo(s: S) { s.$0 } | |||
726 | insert: "the_method()$0", | 726 | insert: "the_method()$0", |
727 | kind: Method, | 727 | kind: Method, |
728 | lookup: "the_method", | 728 | lookup: "the_method", |
729 | detail: "fn the_method(&self)", | 729 | detail: "-> ()", |
730 | }, | 730 | }, |
731 | ] | 731 | ] |
732 | "#]], | 732 | "#]], |
diff --git a/crates/completion/src/render/function.rs b/crates/completion/src/render/function.rs index 2d616b1fb..e46e21d24 100644 --- a/crates/completion/src/render/function.rs +++ b/crates/completion/src/render/function.rs | |||
@@ -1,8 +1,8 @@ | |||
1 | //! Renderer for function calls. | 1 | //! Renderer for function calls. |
2 | 2 | ||
3 | use hir::{HasSource, Type}; | 3 | use hir::{HasSource, HirDisplay, Type}; |
4 | use ide_db::SymbolKind; | 4 | use ide_db::SymbolKind; |
5 | use syntax::{ast::Fn, display::function_declaration}; | 5 | use syntax::ast::Fn; |
6 | use test_utils::mark; | 6 | use test_utils::mark; |
7 | 7 | ||
8 | use crate::{ | 8 | use crate::{ |
@@ -55,7 +55,8 @@ impl<'a> FunctionRender<'a> { | |||
55 | } | 55 | } |
56 | 56 | ||
57 | fn detail(&self) -> String { | 57 | fn detail(&self) -> String { |
58 | function_declaration(&self.ast_node) | 58 | let ty = self.func.ret_type(self.ctx.db()); |
59 | format!("-> {}", ty.display(self.ctx.db())) | ||
59 | } | 60 | } |
60 | 61 | ||
61 | fn add_arg(&self, arg: &str, ty: &Type) -> String { | 62 | fn add_arg(&self, arg: &str, ty: &Type) -> String { |