aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/completion/completion_context.rs
diff options
context:
space:
mode:
authorBenjamin Coenen <[email protected]>2020-04-15 21:10:57 +0100
committerBenjamin Coenen <[email protected]>2020-04-15 21:10:57 +0100
commit06076f95a7ca764696b055eb754e163f884eefaa (patch)
tree34c8978d4caa962e62c1e88fcdf6f7a0baaef80e /crates/ra_ide/src/completion/completion_context.rs
parentc5d18f570c9751ca9ec2db7c8530fd6095a6465d (diff)
feat: improve dot completions in a struct literal expression
Signed-off-by: Benjamin Coenen <[email protected]>
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,