diff options
Diffstat (limited to 'crates/ra_ide/src/completion/complete_pattern.rs')
-rw-r--r-- | crates/ra_ide/src/completion/complete_pattern.rs | 126 |
1 files changed, 38 insertions, 88 deletions
diff --git a/crates/ra_ide/src/completion/complete_pattern.rs b/crates/ra_ide/src/completion/complete_pattern.rs index 367e2bbce..aceb77cb5 100644 --- a/crates/ra_ide/src/completion/complete_pattern.rs +++ b/crates/ra_ide/src/completion/complete_pattern.rs | |||
@@ -13,7 +13,7 @@ pub(super) fn complete_pattern(acc: &mut Completions, ctx: &CompletionContext) { | |||
13 | 13 | ||
14 | // FIXME: ideally, we should look at the type we are matching against and | 14 | // FIXME: ideally, we should look at the type we are matching against and |
15 | // suggest variants + auto-imports | 15 | // suggest variants + auto-imports |
16 | ctx.scope().process_all_names(&mut |name, res| { | 16 | ctx.scope.process_all_names(&mut |name, res| { |
17 | match &res { | 17 | match &res { |
18 | hir::ScopeDef::ModuleDef(def) => match def { | 18 | hir::ScopeDef::ModuleDef(def) => match def { |
19 | hir::ModuleDef::Adt(hir::Adt::Enum(..)) | 19 | hir::ModuleDef::Adt(hir::Adt::Enum(..)) |
@@ -33,106 +33,56 @@ pub(super) fn complete_pattern(acc: &mut Completions, ctx: &CompletionContext) { | |||
33 | 33 | ||
34 | #[cfg(test)] | 34 | #[cfg(test)] |
35 | mod tests { | 35 | mod tests { |
36 | use crate::completion::{test_utils::do_completion, CompletionItem, CompletionKind}; | 36 | use expect::{expect, Expect}; |
37 | use insta::assert_debug_snapshot; | ||
38 | 37 | ||
39 | fn complete(code: &str) -> Vec<CompletionItem> { | 38 | use crate::completion::{test_utils::completion_list, CompletionKind}; |
40 | do_completion(code, CompletionKind::Reference) | 39 | |
40 | fn check(ra_fixture: &str, expect: Expect) { | ||
41 | let actual = completion_list(ra_fixture, CompletionKind::Reference); | ||
42 | expect.assert_eq(&actual) | ||
41 | } | 43 | } |
42 | 44 | ||
43 | #[test] | 45 | #[test] |
44 | fn completes_enum_variants_and_modules() { | 46 | fn completes_enum_variants_and_modules() { |
45 | let completions = complete( | 47 | check( |
46 | r" | 48 | r#" |
47 | enum E { X } | 49 | enum E { X } |
48 | use self::E::X; | 50 | use self::E::X; |
49 | const Z: E = E::X; | 51 | const Z: E = E::X; |
50 | mod m {} | 52 | mod m {} |
51 | 53 | ||
52 | static FOO: E = E::X; | 54 | static FOO: E = E::X; |
53 | struct Bar { f: u32 } | 55 | struct Bar { f: u32 } |
54 | 56 | ||
55 | fn foo() { | 57 | fn foo() { |
56 | match E::X { | 58 | match E::X { <|> } |
57 | <|> | 59 | } |
58 | } | 60 | "#, |
59 | } | 61 | expect![[r#" |
60 | ", | 62 | st Bar |
63 | en E | ||
64 | ev X () | ||
65 | ct Z | ||
66 | md m | ||
67 | "#]], | ||
61 | ); | 68 | ); |
62 | assert_debug_snapshot!(completions, @r###" | ||
63 | [ | ||
64 | CompletionItem { | ||
65 | label: "Bar", | ||
66 | source_range: 137..137, | ||
67 | delete: 137..137, | ||
68 | insert: "Bar", | ||
69 | kind: Struct, | ||
70 | }, | ||
71 | CompletionItem { | ||
72 | label: "E", | ||
73 | source_range: 137..137, | ||
74 | delete: 137..137, | ||
75 | insert: "E", | ||
76 | kind: Enum, | ||
77 | }, | ||
78 | CompletionItem { | ||
79 | label: "X", | ||
80 | source_range: 137..137, | ||
81 | delete: 137..137, | ||
82 | insert: "X", | ||
83 | kind: EnumVariant, | ||
84 | detail: "()", | ||
85 | }, | ||
86 | CompletionItem { | ||
87 | label: "Z", | ||
88 | source_range: 137..137, | ||
89 | delete: 137..137, | ||
90 | insert: "Z", | ||
91 | kind: Const, | ||
92 | }, | ||
93 | CompletionItem { | ||
94 | label: "m", | ||
95 | source_range: 137..137, | ||
96 | delete: 137..137, | ||
97 | insert: "m", | ||
98 | kind: Module, | ||
99 | }, | ||
100 | ] | ||
101 | "###); | ||
102 | } | 69 | } |
103 | 70 | ||
104 | #[test] | 71 | #[test] |
105 | fn completes_in_simple_macro_call() { | 72 | fn completes_in_simple_macro_call() { |
106 | let completions = complete( | 73 | check( |
107 | r" | 74 | r#" |
108 | macro_rules! m { ($e:expr) => { $e } } | 75 | macro_rules! m { ($e:expr) => { $e } } |
109 | enum E { X } | 76 | enum E { X } |
110 | 77 | ||
111 | fn foo() { | 78 | fn foo() { |
112 | m!(match E::X { | 79 | m!(match E::X { <|> }) |
113 | <|> | 80 | } |
114 | }) | 81 | "#, |
115 | } | 82 | expect![[r#" |
116 | ", | 83 | en E |
84 | ma m!(…) macro_rules! m | ||
85 | "#]], | ||
117 | ); | 86 | ); |
118 | assert_debug_snapshot!(completions, @r###" | ||
119 | [ | ||
120 | CompletionItem { | ||
121 | label: "E", | ||
122 | source_range: 90..90, | ||
123 | delete: 90..90, | ||
124 | insert: "E", | ||
125 | kind: Enum, | ||
126 | }, | ||
127 | CompletionItem { | ||
128 | label: "m!(…)", | ||
129 | source_range: 90..90, | ||
130 | delete: 90..90, | ||
131 | insert: "m!($0)", | ||
132 | kind: Macro, | ||
133 | detail: "macro_rules! m", | ||
134 | }, | ||
135 | ] | ||
136 | "###); | ||
137 | } | 87 | } |
138 | } | 88 | } |