diff options
Diffstat (limited to 'crates/ra_ide/src/completion/completion_context.rs')
-rw-r--r-- | crates/ra_ide/src/completion/completion_context.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs index cfc5c34df..dd7c8a873 100644 --- a/crates/ra_ide/src/completion/completion_context.rs +++ b/crates/ra_ide/src/completion/completion_context.rs | |||
@@ -21,6 +21,7 @@ pub(crate) struct CompletionContext<'a> { | |||
21 | pub(super) db: &'a RootDatabase, | 21 | pub(super) db: &'a RootDatabase, |
22 | pub(super) config: &'a CompletionConfig, | 22 | pub(super) config: &'a CompletionConfig, |
23 | pub(super) offset: TextUnit, | 23 | pub(super) offset: TextUnit, |
24 | pub(super) file_position: FilePosition, | ||
24 | /// The token before the cursor, in the original file. | 25 | /// The token before the cursor, in the original file. |
25 | pub(super) original_token: SyntaxToken, | 26 | pub(super) original_token: SyntaxToken, |
26 | /// The token before the cursor, in the macro-expanded file. | 27 | /// The token before the cursor, in the macro-expanded file. |
@@ -31,6 +32,7 @@ pub(crate) struct CompletionContext<'a> { | |||
31 | pub(super) use_item_syntax: Option<ast::UseItem>, | 32 | pub(super) use_item_syntax: Option<ast::UseItem>, |
32 | pub(super) record_lit_syntax: Option<ast::RecordLit>, | 33 | pub(super) record_lit_syntax: Option<ast::RecordLit>, |
33 | 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>, | ||
34 | pub(super) impl_def: Option<ast::ImplDef>, | 36 | pub(super) impl_def: Option<ast::ImplDef>, |
35 | pub(super) is_param: bool, | 37 | pub(super) is_param: bool, |
36 | /// If a name-binding or reference to a const in a pattern. | 38 | /// If a name-binding or reference to a const in a pattern. |
@@ -88,12 +90,14 @@ impl<'a> CompletionContext<'a> { | |||
88 | original_token, | 90 | original_token, |
89 | token, | 91 | token, |
90 | offset: position.offset, | 92 | offset: position.offset, |
93 | file_position: position, | ||
91 | krate, | 94 | krate, |
92 | name_ref_syntax: None, | 95 | name_ref_syntax: None, |
93 | function_syntax: None, | 96 | function_syntax: None, |
94 | use_item_syntax: None, | 97 | use_item_syntax: None, |
95 | record_lit_syntax: None, | 98 | record_lit_syntax: None, |
96 | record_pat_syntax: None, | 99 | record_pat_syntax: None, |
100 | record_field_syntax: None, | ||
97 | impl_def: None, | 101 | impl_def: None, |
98 | is_param: false, | 102 | is_param: false, |
99 | is_pat_binding_or_const: false, | 103 | is_pat_binding_or_const: false, |
@@ -279,6 +283,14 @@ impl<'a> CompletionContext<'a> { | |||
279 | .take_while(|it| it.kind() != SOURCE_FILE && it.kind() != MODULE) | 283 | .take_while(|it| it.kind() != SOURCE_FILE && it.kind() != MODULE) |
280 | .find_map(ast::FnDef::cast); | 284 | .find_map(ast::FnDef::cast); |
281 | 285 | ||
286 | self.record_field_syntax = self | ||
287 | .sema | ||
288 | .ancestors_with_macros(self.token.parent()) | ||
289 | .take_while(|it| { | ||
290 | it.kind() != SOURCE_FILE && it.kind() != MODULE && it.kind() != CALL_EXPR | ||
291 | }) | ||
292 | .find_map(ast::RecordField::cast); | ||
293 | |||
282 | let parent = match name_ref.syntax().parent() { | 294 | let parent = match name_ref.syntax().parent() { |
283 | Some(it) => it, | 295 | Some(it) => it, |
284 | None => return, | 296 | None => return, |