aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide/src/completion/completion_item.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_ide/src/completion/completion_item.rs')
-rw-r--r--crates/ra_ide/src/completion/completion_item.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/crates/ra_ide/src/completion/completion_item.rs b/crates/ra_ide/src/completion/completion_item.rs
index bc0f1aff5..e17586aa5 100644
--- a/crates/ra_ide/src/completion/completion_item.rs
+++ b/crates/ra_ide/src/completion/completion_item.rs
@@ -51,6 +51,9 @@ pub struct CompletionItem {
51 /// If completing a function call, ask the editor to show parameter popup 51 /// If completing a function call, ask the editor to show parameter popup
52 /// after completion. 52 /// after completion.
53 trigger_call_info: bool, 53 trigger_call_info: bool,
54
55 /// Score is usefull to pre select or display in better order completion items
56 score: Option<CompletionScore>,
54} 57}
55 58
56// We use custom debug for CompletionItem to make `insta`'s diffs more readable. 59// We use custom debug for CompletionItem to make `insta`'s diffs more readable.
@@ -80,6 +83,9 @@ impl fmt::Debug for CompletionItem {
80 if self.deprecated { 83 if self.deprecated {
81 s.field("deprecated", &true); 84 s.field("deprecated", &true);
82 } 85 }
86 if let Some(score) = &self.score {
87 s.field("score", score);
88 }
83 if self.trigger_call_info { 89 if self.trigger_call_info {
84 s.field("trigger_call_info", &true); 90 s.field("trigger_call_info", &true);
85 } 91 }
@@ -147,6 +153,7 @@ impl CompletionItem {
147 text_edit: None, 153 text_edit: None,
148 deprecated: None, 154 deprecated: None,
149 trigger_call_info: None, 155 trigger_call_info: None,
156 score: None,
150 } 157 }
151 } 158 }
152 /// What user sees in pop-up in the UI. 159 /// What user sees in pop-up in the UI.
@@ -186,6 +193,14 @@ impl CompletionItem {
186 self.deprecated 193 self.deprecated
187 } 194 }
188 195
196 pub fn score(&self) -> Option<CompletionScore> {
197 self.score.clone()
198 }
199
200 pub fn set_score(&mut self, score: CompletionScore) {
201 self.score = Some(score);
202 }
203
189 pub fn trigger_call_info(&self) -> bool { 204 pub fn trigger_call_info(&self) -> bool {
190 self.trigger_call_info 205 self.trigger_call_info
191 } 206 }
@@ -206,6 +221,7 @@ pub(crate) struct Builder {
206 text_edit: Option<TextEdit>, 221 text_edit: Option<TextEdit>,
207 deprecated: Option<bool>, 222 deprecated: Option<bool>,
208 trigger_call_info: Option<bool>, 223 trigger_call_info: Option<bool>,
224 score: Option<CompletionScore>,
209} 225}
210 226
211impl Builder { 227impl Builder {
@@ -235,6 +251,7 @@ impl Builder {
235 completion_kind: self.completion_kind, 251 completion_kind: self.completion_kind,
236 deprecated: self.deprecated.unwrap_or(false), 252 deprecated: self.deprecated.unwrap_or(false),
237 trigger_call_info: self.trigger_call_info.unwrap_or(false), 253 trigger_call_info: self.trigger_call_info.unwrap_or(false),
254 score: self.score,
238 } 255 }
239 } 256 }
240 pub(crate) fn lookup_by(mut self, lookup: impl Into<String>) -> Builder { 257 pub(crate) fn lookup_by(mut self, lookup: impl Into<String>) -> Builder {
@@ -285,6 +302,11 @@ impl Builder {
285 self.deprecated = Some(deprecated); 302 self.deprecated = Some(deprecated);
286 self 303 self
287 } 304 }
305 #[allow(unused)]
306 pub(crate) fn set_score(mut self, score: CompletionScore) -> Builder {
307 self.score = Some(score);
308 self
309 }
288 pub(crate) fn trigger_call_info(mut self) -> Builder { 310 pub(crate) fn trigger_call_info(mut self) -> Builder {
289 self.trigger_call_info = Some(true); 311 self.trigger_call_info = Some(true);
290 self 312 self
@@ -297,6 +319,14 @@ impl<'a> Into<CompletionItem> for Builder {
297 } 319 }
298} 320}
299 321
322#[derive(Debug, Clone)]
323pub enum CompletionScore {
324 /// If only type match
325 TypeMatch,
326 /// If type and name match
327 TypeAndNameMatch,
328}
329
300/// Represents an in-progress set of completions being built. 330/// Represents an in-progress set of completions being built.
301#[derive(Debug, Default)] 331#[derive(Debug, Default)]
302pub(crate) struct Completions { 332pub(crate) struct Completions {