diff options
author | Florian Diebold <[email protected]> | 2020-03-07 15:50:30 +0000 |
---|---|---|
committer | Florian Diebold <[email protected]> | 2020-03-07 15:53:16 +0000 |
commit | cbca4effce148b1bdebd32556aaa19d13dd2a974 (patch) | |
tree | 275d2b90ad9a5bb4d33222a809d88dcdec78974e /crates/ra_ide/src | |
parent | b719e211cf6c39f80b8b402e9b46eddedf6b2200 (diff) |
Fix record pattern completion
Diffstat (limited to 'crates/ra_ide/src')
-rw-r--r-- | crates/ra_ide/src/completion/complete_keyword.rs | 1 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_record_pattern.rs | 28 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/completion_context.rs | 2 |
3 files changed, 30 insertions, 1 deletions
diff --git a/crates/ra_ide/src/completion/complete_keyword.rs b/crates/ra_ide/src/completion/complete_keyword.rs index eb7cd9ac2..e1c0ffb1f 100644 --- a/crates/ra_ide/src/completion/complete_keyword.rs +++ b/crates/ra_ide/src/completion/complete_keyword.rs | |||
@@ -79,6 +79,7 @@ pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionConte | |||
79 | } | 79 | } |
80 | 80 | ||
81 | fn is_in_loop_body(leaf: &SyntaxToken) -> bool { | 81 | fn is_in_loop_body(leaf: &SyntaxToken) -> bool { |
82 | // FIXME move this to CompletionContext and make it handle macros | ||
82 | for node in leaf.parent().ancestors() { | 83 | for node in leaf.parent().ancestors() { |
83 | if node.kind() == FN_DEF || node.kind() == LAMBDA_EXPR { | 84 | if node.kind() == FN_DEF || node.kind() == LAMBDA_EXPR { |
84 | break; | 85 | break; |
diff --git a/crates/ra_ide/src/completion/complete_record_pattern.rs b/crates/ra_ide/src/completion/complete_record_pattern.rs index 9bdeae49f..687c57d3e 100644 --- a/crates/ra_ide/src/completion/complete_record_pattern.rs +++ b/crates/ra_ide/src/completion/complete_record_pattern.rs | |||
@@ -87,4 +87,32 @@ mod tests { | |||
87 | ] | 87 | ] |
88 | "###); | 88 | "###); |
89 | } | 89 | } |
90 | |||
91 | #[test] | ||
92 | fn test_record_pattern_field_in_simple_macro() { | ||
93 | let completions = complete( | ||
94 | r" | ||
95 | macro_rules! m { ($e:expr) => { $e } } | ||
96 | struct S { foo: u32 } | ||
97 | |||
98 | fn process(f: S) { | ||
99 | m!(match f { | ||
100 | S { f<|>: 92 } => (), | ||
101 | }) | ||
102 | } | ||
103 | ", | ||
104 | ); | ||
105 | assert_debug_snapshot!(completions, @r###" | ||
106 | [ | ||
107 | CompletionItem { | ||
108 | label: "foo", | ||
109 | source_range: [171; 172), | ||
110 | delete: [171; 172), | ||
111 | insert: "foo", | ||
112 | kind: Field, | ||
113 | detail: "u32", | ||
114 | }, | ||
115 | ] | ||
116 | "###); | ||
117 | } | ||
90 | } | 118 | } |
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs index fe9777487..ae3528f35 100644 --- a/crates/ra_ide/src/completion/completion_context.rs +++ b/crates/ra_ide/src/completion/completion_context.rs | |||
@@ -185,7 +185,7 @@ impl<'a> CompletionContext<'a> { | |||
185 | } | 185 | } |
186 | if name.syntax().ancestors().find_map(ast::RecordFieldPatList::cast).is_some() { | 186 | if name.syntax().ancestors().find_map(ast::RecordFieldPatList::cast).is_some() { |
187 | self.record_lit_pat = | 187 | self.record_lit_pat = |
188 | self.sema.find_node_at_offset_with_macros(&original_file, self.offset); | 188 | self.sema.find_node_at_offset_with_macros(&original_file, offset); |
189 | } | 189 | } |
190 | } | 190 | } |
191 | } | 191 | } |