diff options
Diffstat (limited to 'crates/ra_ide/src/completion')
-rw-r--r-- | crates/ra_ide/src/completion/complete_unqualified_path.rs | 17 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/completion_item.rs | 2 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/presentation.rs | 4 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/test_utils.rs | 22 |
4 files changed, 31 insertions, 14 deletions
diff --git a/crates/ra_ide/src/completion/complete_unqualified_path.rs b/crates/ra_ide/src/completion/complete_unqualified_path.rs index 72ff82e66..18f4488b7 100644 --- a/crates/ra_ide/src/completion/complete_unqualified_path.rs +++ b/crates/ra_ide/src/completion/complete_unqualified_path.rs | |||
@@ -638,4 +638,21 @@ fn f() {} | |||
638 | expect![[""]], | 638 | expect![[""]], |
639 | ) | 639 | ) |
640 | } | 640 | } |
641 | |||
642 | #[test] | ||
643 | fn completes_type_or_trait_in_impl_block() { | ||
644 | check( | ||
645 | r#" | ||
646 | trait MyTrait {} | ||
647 | struct MyStruct {} | ||
648 | |||
649 | impl My<|> | ||
650 | "#, | ||
651 | expect![[r#" | ||
652 | st MyStruct | ||
653 | tt MyTrait | ||
654 | tp Self | ||
655 | "#]], | ||
656 | ) | ||
657 | } | ||
641 | } | 658 | } |
diff --git a/crates/ra_ide/src/completion/completion_item.rs b/crates/ra_ide/src/completion/completion_item.rs index d7011c9cf..7bdda316c 100644 --- a/crates/ra_ide/src/completion/completion_item.rs +++ b/crates/ra_ide/src/completion/completion_item.rs | |||
@@ -58,7 +58,7 @@ pub struct CompletionItem { | |||
58 | score: Option<CompletionScore>, | 58 | score: Option<CompletionScore>, |
59 | } | 59 | } |
60 | 60 | ||
61 | // We use custom debug for CompletionItem to make `insta`'s diffs more readable. | 61 | // We use custom debug for CompletionItem to make snapshot tests more readable. |
62 | impl fmt::Debug for CompletionItem { | 62 | impl fmt::Debug for CompletionItem { |
63 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | 63 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
64 | let mut s = f.debug_struct("CompletionItem"); | 64 | let mut s = f.debug_struct("CompletionItem"); |
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#" |
840 | fn with_args(x: i32, y: String) {} | 841 | fn with_args(x: i32, y: String) {} |
@@ -844,7 +845,6 @@ fn main() { with_<|> } | |||
844 | fn with_args(x: i32, y: String) {} | 845 | fn with_args(x: i32, y: String) {} |
845 | fn main() { with_args($0) } | 846 | fn 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 | ||
15 | pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionItem> { | 15 | pub(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 | ||
19 | pub(crate) fn do_completion_with_config( | 19 | pub(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 | ||
32 | pub(crate) fn completion_list(code: &str, kind: CompletionKind) -> String { | 32 | pub(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 | ||
36 | pub(crate) fn completion_list_with_config( | 36 | pub(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 | ||
72 | pub(crate) fn check_edit(what: &str, ra_fixture_before: &str, ra_fixture_after: &str) { | 72 | pub(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 | ||
76 | pub(crate) fn check_edit_with_config( | 76 | pub(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 | ||
108 | pub(crate) fn get_all_completion_items( | 108 | pub(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 | } |