diff options
Diffstat (limited to 'crates/ra_ide/src/completion/completion_context.rs')
-rw-r--r-- | crates/ra_ide/src/completion/completion_context.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs index da054f7a2..dd9cc7daa 100644 --- a/crates/ra_ide/src/completion/completion_context.rs +++ b/crates/ra_ide/src/completion/completion_context.rs | |||
@@ -32,6 +32,7 @@ pub(crate) struct CompletionContext<'a> { | |||
32 | pub(super) use_item_syntax: Option<ast::UseItem>, | 32 | pub(super) use_item_syntax: Option<ast::UseItem>, |
33 | pub(super) record_lit_syntax: Option<ast::RecordLit>, | 33 | pub(super) record_lit_syntax: Option<ast::RecordLit>, |
34 | pub(super) record_pat_syntax: Option<ast::RecordPat>, | 34 | pub(super) record_pat_syntax: Option<ast::RecordPat>, |
35 | pub(super) record_field_syntax: Option<ast::RecordField>, | ||
35 | pub(super) impl_def: Option<ast::ImplDef>, | 36 | pub(super) impl_def: Option<ast::ImplDef>, |
36 | pub(super) call_info: Option<CallInfo>, | 37 | pub(super) call_info: Option<CallInfo>, |
37 | pub(super) is_param: bool, | 38 | pub(super) is_param: bool, |
@@ -98,6 +99,7 @@ impl<'a> CompletionContext<'a> { | |||
98 | use_item_syntax: None, | 99 | use_item_syntax: None, |
99 | record_lit_syntax: None, | 100 | record_lit_syntax: None, |
100 | record_pat_syntax: None, | 101 | record_pat_syntax: None, |
102 | record_field_syntax: None, | ||
101 | impl_def: None, | 103 | impl_def: None, |
102 | is_param: false, | 104 | is_param: false, |
103 | is_pat_binding_or_const: false, | 105 | is_pat_binding_or_const: false, |
@@ -274,6 +276,14 @@ impl<'a> CompletionContext<'a> { | |||
274 | .take_while(|it| it.kind() != SOURCE_FILE && it.kind() != MODULE) | 276 | .take_while(|it| it.kind() != SOURCE_FILE && it.kind() != MODULE) |
275 | .find_map(ast::FnDef::cast); | 277 | .find_map(ast::FnDef::cast); |
276 | 278 | ||
279 | self.record_field_syntax = self | ||
280 | .sema | ||
281 | .ancestors_with_macros(self.token.parent()) | ||
282 | .take_while(|it| { | ||
283 | it.kind() != SOURCE_FILE && it.kind() != MODULE && it.kind() != CALL_EXPR | ||
284 | }) | ||
285 | .find_map(ast::RecordField::cast); | ||
286 | |||
277 | let parent = match name_ref.syntax().parent() { | 287 | let parent = match name_ref.syntax().parent() { |
278 | Some(it) => it, | 288 | Some(it) => it, |
279 | None => return, | 289 | None => return, |