aboutsummaryrefslogtreecommitdiff
path: root/crates/completion/src/completion_context.rs
diff options
context:
space:
mode:
authoradamrk <[email protected]>2020-09-29 21:24:56 +0100
committeradamrk <[email protected]>2020-10-22 21:45:14 +0100
commit3dbbcfca67ed09322227f2190b5364754a29a216 (patch)
treed6c20cd94e6291d6e4c3b8f58a17817d61463d79 /crates/completion/src/completion_context.rs
parentedf46a13a6a28093985d2d934ef97570947b9494 (diff)
Insert ref for completions
Diffstat (limited to 'crates/completion/src/completion_context.rs')
-rw-r--r--crates/completion/src/completion_context.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/crates/completion/src/completion_context.rs b/crates/completion/src/completion_context.rs
index dc4e136c6..e4f86d0e0 100644
--- a/crates/completion/src/completion_context.rs
+++ b/crates/completion/src/completion_context.rs
@@ -246,6 +246,19 @@ impl<'a> CompletionContext<'a> {
246 } 246 }
247 } 247 }
248 248
249 pub(crate) fn active_name_and_type(&self) -> Option<(String, Type)> {
250 if let Some(record_field) = &self.record_field_syntax {
251 mark::hit!(record_field_type_match);
252 let (struct_field, _local) = self.sema.resolve_record_field(record_field)?;
253 Some((struct_field.name(self.db).to_string(), struct_field.signature_ty(self.db)))
254 } else if let Some(active_parameter) = &self.active_parameter {
255 mark::hit!(active_param_type_match);
256 Some((active_parameter.name.clone(), active_parameter.ty.clone()))
257 } else {
258 None
259 }
260 }
261
249 fn fill_keyword_patterns(&mut self, file_with_fake_ident: &SyntaxNode, offset: TextSize) { 262 fn fill_keyword_patterns(&mut self, file_with_fake_ident: &SyntaxNode, offset: TextSize) {
250 let fake_ident_token = file_with_fake_ident.token_at_offset(offset).right_biased().unwrap(); 263 let fake_ident_token = file_with_fake_ident.token_at_offset(offset).right_biased().unwrap();
251 let syntax_element = NodeOrToken::Token(fake_ident_token); 264 let syntax_element = NodeOrToken::Token(fake_ident_token);