diff options
Diffstat (limited to 'crates/ra_ide/src/completion/completion_item.rs')
-rw-r--r-- | crates/ra_ide/src/completion/completion_item.rs | 30 |
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 | ||
211 | impl Builder { | 227 | impl 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)] | ||
323 | pub 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)] |
302 | pub(crate) struct Completions { | 332 | pub(crate) struct Completions { |