aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_ide/src/completion/presentation.rs4
-rw-r--r--crates/ra_ide/src/completion/test_utils.rs22
-rw-r--r--crates/ra_ide/src/inlay_hints.rs94
-rw-r--r--crates/rust-analyzer/src/diagnostics/to_proto.rs1
4 files changed, 60 insertions, 61 deletions
diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs
index e4c57e41a..48afee5fb 100644
--- a/crates/ra_ide/src/completion/presentation.rs
+++ b/crates/ra_ide/src/completion/presentation.rs
@@ -491,7 +491,7 @@ mod tests {
491 } 491 }
492 } 492 }
493 493
494 let mut completions = get_all_completion_items(ra_fixture, &CompletionConfig::default()); 494 let mut completions = get_all_completion_items(CompletionConfig::default(), ra_fixture);
495 completions.sort_by_key(|it| (Reverse(it.score()), it.label().to_string())); 495 completions.sort_by_key(|it| (Reverse(it.score()), it.label().to_string()));
496 let actual = completions 496 let actual = completions
497 .into_iter() 497 .into_iter()
@@ -835,6 +835,7 @@ fn bar(s: &S) {
835 fn suppress_arg_snippets() { 835 fn suppress_arg_snippets() {
836 mark::check!(suppress_arg_snippets); 836 mark::check!(suppress_arg_snippets);
837 check_edit_with_config( 837 check_edit_with_config(
838 CompletionConfig { add_call_argument_snippets: false, ..CompletionConfig::default() },
838 "with_args", 839 "with_args",
839 r#" 840 r#"
840fn with_args(x: i32, y: String) {} 841fn with_args(x: i32, y: String) {}
@@ -844,7 +845,6 @@ fn main() { with_<|> }
844fn with_args(x: i32, y: String) {} 845fn with_args(x: i32, y: String) {}
845fn main() { with_args($0) } 846fn main() { with_args($0) }
846"#, 847"#,
847 &CompletionConfig { add_call_argument_snippets: false, ..CompletionConfig::default() },
848 ); 848 );
849 } 849 }
850 850
diff --git a/crates/ra_ide/src/completion/test_utils.rs b/crates/ra_ide/src/completion/test_utils.rs
index c2be23697..919177745 100644
--- a/crates/ra_ide/src/completion/test_utils.rs
+++ b/crates/ra_ide/src/completion/test_utils.rs
@@ -13,15 +13,15 @@ use crate::{
13}; 13};
14 14
15pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionItem> { 15pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionItem> {
16 do_completion_with_config(code, kind, &CompletionConfig::default()) 16 do_completion_with_config(CompletionConfig::default(), code, kind)
17} 17}
18 18
19pub(crate) fn do_completion_with_config( 19pub(crate) fn do_completion_with_config(
20 config: CompletionConfig,
20 code: &str, 21 code: &str,
21 kind: CompletionKind, 22 kind: CompletionKind,
22 config: &CompletionConfig,
23) -> Vec<CompletionItem> { 23) -> Vec<CompletionItem> {
24 let mut kind_completions: Vec<CompletionItem> = get_all_completion_items(code, config) 24 let mut kind_completions: Vec<CompletionItem> = get_all_completion_items(config, code)
25 .into_iter() 25 .into_iter()
26 .filter(|c| c.completion_kind == kind) 26 .filter(|c| c.completion_kind == kind)
27 .collect(); 27 .collect();
@@ -30,15 +30,15 @@ pub(crate) fn do_completion_with_config(
30} 30}
31 31
32pub(crate) fn completion_list(code: &str, kind: CompletionKind) -> String { 32pub(crate) fn completion_list(code: &str, kind: CompletionKind) -> String {
33 completion_list_with_config(code, kind, &CompletionConfig::default()) 33 completion_list_with_config(CompletionConfig::default(), code, kind)
34} 34}
35 35
36pub(crate) fn completion_list_with_config( 36pub(crate) fn completion_list_with_config(
37 config: CompletionConfig,
37 code: &str, 38 code: &str,
38 kind: CompletionKind, 39 kind: CompletionKind,
39 config: &CompletionConfig,
40) -> String { 40) -> String {
41 let mut kind_completions: Vec<CompletionItem> = get_all_completion_items(code, config) 41 let mut kind_completions: Vec<CompletionItem> = get_all_completion_items(config, code)
42 .into_iter() 42 .into_iter()
43 .filter(|c| c.completion_kind == kind) 43 .filter(|c| c.completion_kind == kind)
44 .collect(); 44 .collect();
@@ -70,19 +70,19 @@ fn monospace_width(s: &str) -> usize {
70} 70}
71 71
72pub(crate) fn check_edit(what: &str, ra_fixture_before: &str, ra_fixture_after: &str) { 72pub(crate) fn check_edit(what: &str, ra_fixture_before: &str, ra_fixture_after: &str) {
73 check_edit_with_config(what, ra_fixture_before, ra_fixture_after, &CompletionConfig::default()) 73 check_edit_with_config(CompletionConfig::default(), what, ra_fixture_before, ra_fixture_after)
74} 74}
75 75
76pub(crate) fn check_edit_with_config( 76pub(crate) fn check_edit_with_config(
77 config: CompletionConfig,
77 what: &str, 78 what: &str,
78 ra_fixture_before: &str, 79 ra_fixture_before: &str,
79 ra_fixture_after: &str, 80 ra_fixture_after: &str,
80 config: &CompletionConfig,
81) { 81) {
82 let ra_fixture_after = trim_indent(ra_fixture_after); 82 let ra_fixture_after = trim_indent(ra_fixture_after);
83 let (analysis, position) = analysis_and_position(ra_fixture_before); 83 let (analysis, position) = analysis_and_position(ra_fixture_before);
84 let completions: Vec<CompletionItem> = 84 let completions: Vec<CompletionItem> =
85 analysis.completions(config, position).unwrap().unwrap().into(); 85 analysis.completions(&config, position).unwrap().unwrap().into();
86 let (completion,) = completions 86 let (completion,) = completions
87 .iter() 87 .iter()
88 .filter(|it| it.lookup() == what) 88 .filter(|it| it.lookup() == what)
@@ -106,9 +106,9 @@ pub(crate) fn check_pattern_is_applicable(code: &str, check: fn(SyntaxElement) -
106} 106}
107 107
108pub(crate) fn get_all_completion_items( 108pub(crate) fn get_all_completion_items(
109 config: CompletionConfig,
109 code: &str, 110 code: &str,
110 options: &CompletionConfig,
111) -> Vec<CompletionItem> { 111) -> Vec<CompletionItem> {
112 let (analysis, position) = analysis_and_position(code); 112 let (analysis, position) = analysis_and_position(code);
113 analysis.completions(options, position).unwrap().unwrap().into() 113 analysis.completions(&config, position).unwrap().unwrap().into()
114} 114}
diff --git a/crates/ra_ide/src/inlay_hints.rs b/crates/ra_ide/src/inlay_hints.rs
index 62d364bfa..35ab741d8 100644
--- a/crates/ra_ide/src/inlay_hints.rs
+++ b/crates/ra_ide/src/inlay_hints.rs
@@ -351,10 +351,10 @@ mod tests {
351 use crate::{inlay_hints::InlayHintsConfig, mock_analysis::single_file}; 351 use crate::{inlay_hints::InlayHintsConfig, mock_analysis::single_file};
352 352
353 fn check(ra_fixture: &str) { 353 fn check(ra_fixture: &str) {
354 check_with_config(ra_fixture, InlayHintsConfig::default()); 354 check_with_config(InlayHintsConfig::default(), ra_fixture);
355 } 355 }
356 356
357 fn check_with_config(ra_fixture: &str, config: InlayHintsConfig) { 357 fn check_with_config(config: InlayHintsConfig, ra_fixture: &str) {
358 let (analysis, file_id) = single_file(ra_fixture); 358 let (analysis, file_id) = single_file(ra_fixture);
359 let expected = extract_annotations(&*analysis.file_text(file_id).unwrap()); 359 let expected = extract_annotations(&*analysis.file_text(file_id).unwrap());
360 let inlay_hints = analysis.inlay_hints(file_id, &config).unwrap(); 360 let inlay_hints = analysis.inlay_hints(file_id, &config).unwrap();
@@ -363,7 +363,7 @@ mod tests {
363 assert_eq!(expected, actual); 363 assert_eq!(expected, actual);
364 } 364 }
365 365
366 fn check_expect(ra_fixture: &str, config: InlayHintsConfig, expect: Expect) { 366 fn check_expect(config: InlayHintsConfig, ra_fixture: &str, expect: Expect) {
367 let (analysis, file_id) = single_file(ra_fixture); 367 let (analysis, file_id) = single_file(ra_fixture);
368 let inlay_hints = analysis.inlay_hints(file_id, &config).unwrap(); 368 let inlay_hints = analysis.inlay_hints(file_id, &config).unwrap();
369 expect.assert_debug_eq(&inlay_hints) 369 expect.assert_debug_eq(&inlay_hints)
@@ -372,6 +372,12 @@ mod tests {
372 #[test] 372 #[test]
373 fn param_hints_only() { 373 fn param_hints_only() {
374 check_with_config( 374 check_with_config(
375 InlayHintsConfig {
376 parameter_hints: true,
377 type_hints: false,
378 chaining_hints: false,
379 max_length: None,
380 },
375 r#" 381 r#"
376fn foo(a: i32, b: i32) -> i32 { a + b } 382fn foo(a: i32, b: i32) -> i32 { a + b }
377fn main() { 383fn main() {
@@ -382,47 +388,41 @@ fn main() {
382 //^ b 388 //^ b
383 ); 389 );
384}"#, 390}"#,
385 InlayHintsConfig {
386 parameter_hints: true,
387 type_hints: false,
388 chaining_hints: false,
389 max_length: None,
390 },
391 ); 391 );
392 } 392 }
393 393
394 #[test] 394 #[test]
395 fn hints_disabled() { 395 fn hints_disabled() {
396 check_with_config( 396 check_with_config(
397 r#"
398fn foo(a: i32, b: i32) -> i32 { a + b }
399fn main() {
400 let _x = foo(4, 4);
401}"#,
402 InlayHintsConfig { 397 InlayHintsConfig {
403 type_hints: false, 398 type_hints: false,
404 parameter_hints: false, 399 parameter_hints: false,
405 chaining_hints: false, 400 chaining_hints: false,
406 max_length: None, 401 max_length: None,
407 }, 402 },
403 r#"
404fn foo(a: i32, b: i32) -> i32 { a + b }
405fn main() {
406 let _x = foo(4, 4);
407}"#,
408 ); 408 );
409 } 409 }
410 410
411 #[test] 411 #[test]
412 fn type_hints_only() { 412 fn type_hints_only() {
413 check_with_config( 413 check_with_config(
414 r#"
415fn foo(a: i32, b: i32) -> i32 { a + b }
416fn main() {
417 let _x = foo(4, 4);
418 //^^ i32
419}"#,
420 InlayHintsConfig { 414 InlayHintsConfig {
421 type_hints: true, 415 type_hints: true,
422 parameter_hints: false, 416 parameter_hints: false,
423 chaining_hints: false, 417 chaining_hints: false,
424 max_length: None, 418 max_length: None,
425 }, 419 },
420 r#"
421fn foo(a: i32, b: i32) -> i32 { a + b }
422fn main() {
423 let _x = foo(4, 4);
424 //^^ i32
425}"#,
426 ); 426 );
427 } 427 }
428 428
@@ -590,6 +590,7 @@ fn main() {
590 #[test] 590 #[test]
591 fn hint_truncation() { 591 fn hint_truncation() {
592 check_with_config( 592 check_with_config(
593 InlayHintsConfig { max_length: Some(8), ..Default::default() },
593 r#" 594 r#"
594struct Smol<T>(T); 595struct Smol<T>(T);
595 596
@@ -603,7 +604,6 @@ fn main() {
603 let c = Smol(Smol(0u32)) 604 let c = Smol(Smol(0u32))
604 //^ Smol<Smol<…>> 605 //^ Smol<Smol<…>>
605}"#, 606}"#,
606 InlayHintsConfig { max_length: Some(8), ..Default::default() },
607 ); 607 );
608 } 608 }
609 609
@@ -673,6 +673,7 @@ fn main() {
673 #[test] 673 #[test]
674 fn omitted_parameters_hints_heuristics() { 674 fn omitted_parameters_hints_heuristics() {
675 check_with_config( 675 check_with_config(
676 InlayHintsConfig { max_length: Some(8), ..Default::default() },
676 r#" 677 r#"
677fn map(f: i32) {} 678fn map(f: i32) {}
678fn filter(predicate: i32) {} 679fn filter(predicate: i32) {}
@@ -753,13 +754,13 @@ fn main() {
753 let _: f64 = a.div_euclid(b); 754 let _: f64 = a.div_euclid(b);
754 let _: f64 = a.abs_sub(b); 755 let _: f64 = a.abs_sub(b);
755}"#, 756}"#,
756 InlayHintsConfig { max_length: Some(8), ..Default::default() },
757 ); 757 );
758 } 758 }
759 759
760 #[test] 760 #[test]
761 fn unit_structs_have_no_type_hints() { 761 fn unit_structs_have_no_type_hints() {
762 check_with_config( 762 check_with_config(
763 InlayHintsConfig { max_length: Some(8), ..Default::default() },
763 r#" 764 r#"
764enum Result<T, E> { Ok(T), Err(E) } 765enum Result<T, E> { Ok(T), Err(E) }
765use Result::*; 766use Result::*;
@@ -772,13 +773,18 @@ fn main() {
772 Err(SyntheticSyntax) => (), 773 Err(SyntheticSyntax) => (),
773 } 774 }
774}"#, 775}"#,
775 InlayHintsConfig { max_length: Some(8), ..Default::default() },
776 ); 776 );
777 } 777 }
778 778
779 #[test] 779 #[test]
780 fn chaining_hints_ignore_comments() { 780 fn chaining_hints_ignore_comments() {
781 check_expect( 781 check_expect(
782 InlayHintsConfig {
783 parameter_hints: false,
784 type_hints: false,
785 chaining_hints: true,
786 max_length: None,
787 },
782 r#" 788 r#"
783struct A(B); 789struct A(B);
784impl A { fn into_b(self) -> B { self.0 } } 790impl A { fn into_b(self) -> B { self.0 } }
@@ -792,12 +798,6 @@ fn main() {
792 .into_c(); 798 .into_c();
793} 799}
794"#, 800"#,
795 InlayHintsConfig {
796 parameter_hints: false,
797 type_hints: false,
798 chaining_hints: true,
799 max_length: None,
800 },
801 expect![[r#" 801 expect![[r#"
802 [ 802 [
803 InlayHint { 803 InlayHint {
@@ -818,6 +818,12 @@ fn main() {
818 #[test] 818 #[test]
819 fn chaining_hints_without_newlines() { 819 fn chaining_hints_without_newlines() {
820 check_with_config( 820 check_with_config(
821 InlayHintsConfig {
822 parameter_hints: false,
823 type_hints: false,
824 chaining_hints: true,
825 max_length: None,
826 },
821 r#" 827 r#"
822struct A(B); 828struct A(B);
823impl A { fn into_b(self) -> B { self.0 } } 829impl A { fn into_b(self) -> B { self.0 } }
@@ -828,18 +834,18 @@ struct C;
828fn main() { 834fn main() {
829 let c = A(B(C)).into_b().into_c(); 835 let c = A(B(C)).into_b().into_c();
830}"#, 836}"#,
831 InlayHintsConfig {
832 parameter_hints: false,
833 type_hints: false,
834 chaining_hints: true,
835 max_length: None,
836 },
837 ); 837 );
838 } 838 }
839 839
840 #[test] 840 #[test]
841 fn struct_access_chaining_hints() { 841 fn struct_access_chaining_hints() {
842 check_expect( 842 check_expect(
843 InlayHintsConfig {
844 parameter_hints: false,
845 type_hints: false,
846 chaining_hints: true,
847 max_length: None,
848 },
843 r#" 849 r#"
844struct A { pub b: B } 850struct A { pub b: B }
845struct B { pub c: C } 851struct B { pub c: C }
@@ -858,12 +864,6 @@ fn main() {
858 let x = D 864 let x = D
859 .foo(); 865 .foo();
860}"#, 866}"#,
861 InlayHintsConfig {
862 parameter_hints: false,
863 type_hints: false,
864 chaining_hints: true,
865 max_length: None,
866 },
867 expect![[r#" 867 expect![[r#"
868 [ 868 [
869 InlayHint { 869 InlayHint {
@@ -884,6 +884,12 @@ fn main() {
884 #[test] 884 #[test]
885 fn generic_chaining_hints() { 885 fn generic_chaining_hints() {
886 check_expect( 886 check_expect(
887 InlayHintsConfig {
888 parameter_hints: false,
889 type_hints: false,
890 chaining_hints: true,
891 max_length: None,
892 },
887 r#" 893 r#"
888struct A<T>(T); 894struct A<T>(T);
889struct B<T>(T); 895struct B<T>(T);
@@ -903,12 +909,6 @@ fn main() {
903 .into_c(); 909 .into_c();
904} 910}
905"#, 911"#,
906 InlayHintsConfig {
907 parameter_hints: false,
908 type_hints: false,
909 chaining_hints: true,
910 max_length: None,
911 },
912 expect![[r#" 912 expect![[r#"
913 [ 913 [
914 InlayHint { 914 InlayHint {
diff --git a/crates/rust-analyzer/src/diagnostics/to_proto.rs b/crates/rust-analyzer/src/diagnostics/to_proto.rs
index 808a23b17..b1b222deb 100644
--- a/crates/rust-analyzer/src/diagnostics/to_proto.rs
+++ b/crates/rust-analyzer/src/diagnostics/to_proto.rs
@@ -258,7 +258,6 @@ mod tests {
258 258
259 use expect::{expect_file, ExpectFile}; 259 use expect::{expect_file, ExpectFile};
260 260
261 // TODO: inlay hints config order
262 fn check(diagnostics_json: &str, expect: ExpectFile) { 261 fn check(diagnostics_json: &str, expect: ExpectFile) {
263 check_with_config(DiagnosticsConfig::default(), diagnostics_json, expect) 262 check_with_config(DiagnosticsConfig::default(), diagnostics_json, expect)
264 } 263 }