aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/completion/completion_context.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src/completion/completion_context.rs')
-rw-r--r--crates/ra_ide/src/completion/completion_context.rs10
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,