diff options
Diffstat (limited to 'crates/ra_ide/src/completion')
-rw-r--r-- | crates/ra_ide/src/completion/complete_attribute.rs | 587 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_dot.rs | 112 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_fn_param.rs | 12 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_keyword.rs | 254 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_macro_in_item_position.rs | 22 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_pattern.rs | 30 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_postfix.rs | 134 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_qualified_path.rs | 198 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_record.rs | 60 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_snippet.rs | 20 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_trait_impl.rs | 53 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/complete_unqualified_path.rs | 379 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/completion_context.rs | 16 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/completion_item.rs | 2 | ||||
-rw-r--r-- | crates/ra_ide/src/completion/presentation.rs | 279 |
15 files changed, 1422 insertions, 736 deletions
diff --git a/crates/ra_ide/src/completion/complete_attribute.rs b/crates/ra_ide/src/completion/complete_attribute.rs new file mode 100644 index 000000000..8bf952798 --- /dev/null +++ b/crates/ra_ide/src/completion/complete_attribute.rs | |||
@@ -0,0 +1,587 @@ | |||
1 | //! Completion for attributes | ||
2 | //! | ||
3 | //! This module uses a bit of static metadata to provide completions | ||
4 | //! for built-in attributes. | ||
5 | |||
6 | use super::completion_context::CompletionContext; | ||
7 | use super::completion_item::{CompletionItem, CompletionItemKind, CompletionKind, Completions}; | ||
8 | use ra_syntax::{ | ||
9 | ast::{Attr, AttrKind}, | ||
10 | AstNode, | ||
11 | }; | ||
12 | |||
13 | pub(super) fn complete_attribute(acc: &mut Completions, ctx: &CompletionContext) { | ||
14 | if !ctx.is_attribute { | ||
15 | return; | ||
16 | } | ||
17 | |||
18 | let is_inner = ctx | ||
19 | .original_token | ||
20 | .ancestors() | ||
21 | .find_map(Attr::cast) | ||
22 | .map(|attr| attr.kind() == AttrKind::Inner) | ||
23 | .unwrap_or(false); | ||
24 | |||
25 | for attr_completion in ATTRIBUTES { | ||
26 | let mut item = CompletionItem::new( | ||
27 | CompletionKind::Attribute, | ||
28 | ctx.source_range(), | ||
29 | attr_completion.label, | ||
30 | ) | ||
31 | .kind(CompletionItemKind::Attribute); | ||
32 | |||
33 | match (attr_completion.snippet, ctx.config.snippet_cap) { | ||
34 | (Some(snippet), Some(cap)) => { | ||
35 | item = item.insert_snippet(cap, snippet); | ||
36 | } | ||
37 | _ => {} | ||
38 | } | ||
39 | |||
40 | if is_inner || !attr_completion.should_be_inner { | ||
41 | acc.add(item); | ||
42 | } | ||
43 | } | ||
44 | } | ||
45 | |||
46 | struct AttrCompletion { | ||
47 | label: &'static str, | ||
48 | snippet: Option<&'static str>, | ||
49 | should_be_inner: bool, | ||
50 | } | ||
51 | |||
52 | const ATTRIBUTES: &[AttrCompletion] = &[ | ||
53 | AttrCompletion { label: "allow", snippet: Some("allow(${0:lint})"), should_be_inner: false }, | ||
54 | AttrCompletion { | ||
55 | label: "cfg_attr", | ||
56 | snippet: Some("cfg_attr(${1:predicate}, ${0:attr})"), | ||
57 | should_be_inner: false, | ||
58 | }, | ||
59 | AttrCompletion { label: "cfg", snippet: Some("cfg(${0:predicate})"), should_be_inner: false }, | ||
60 | AttrCompletion { label: "deny", snippet: Some("deny(${0:lint})"), should_be_inner: false }, | ||
61 | AttrCompletion { | ||
62 | label: "deprecated", | ||
63 | snippet: Some(r#"deprecated = "${0:reason}""#), | ||
64 | should_be_inner: false, | ||
65 | }, | ||
66 | AttrCompletion { | ||
67 | label: "derive", | ||
68 | snippet: Some(r#"derive(${0:Debug})"#), | ||
69 | should_be_inner: false, | ||
70 | }, | ||
71 | AttrCompletion { label: "doc", snippet: Some(r#"doc = "${0:docs}""#), should_be_inner: false }, | ||
72 | AttrCompletion { label: "feature", snippet: Some("feature(${0:flag})"), should_be_inner: true }, | ||
73 | AttrCompletion { label: "forbid", snippet: Some("forbid(${0:lint})"), should_be_inner: false }, | ||
74 | // FIXME: resolve through macro resolution? | ||
75 | AttrCompletion { label: "global_allocator", snippet: None, should_be_inner: true }, | ||
76 | AttrCompletion { label: "ignore", snippet: Some("ignore(${0:lint})"), should_be_inner: false }, | ||
77 | AttrCompletion { label: "inline", snippet: Some("inline(${0:lint})"), should_be_inner: false }, | ||
78 | AttrCompletion { | ||
79 | label: "link_name", | ||
80 | snippet: Some(r#"link_name = "${0:symbol_name}""#), | ||
81 | should_be_inner: false, | ||
82 | }, | ||
83 | AttrCompletion { label: "link", snippet: None, should_be_inner: false }, | ||
84 | AttrCompletion { label: "macro_export", snippet: None, should_be_inner: false }, | ||
85 | AttrCompletion { label: "macro_use", snippet: None, should_be_inner: false }, | ||
86 | AttrCompletion { | ||
87 | label: "must_use", | ||
88 | snippet: Some(r#"must_use = "${0:reason}""#), | ||
89 | should_be_inner: false, | ||
90 | }, | ||
91 | AttrCompletion { label: "no_mangle", snippet: None, should_be_inner: false }, | ||
92 | AttrCompletion { label: "no_std", snippet: None, should_be_inner: true }, | ||
93 | AttrCompletion { label: "non_exhaustive", snippet: None, should_be_inner: false }, | ||
94 | AttrCompletion { label: "panic_handler", snippet: None, should_be_inner: true }, | ||
95 | AttrCompletion { label: "path", snippet: Some("path =\"${0:path}\""), should_be_inner: false }, | ||
96 | AttrCompletion { label: "proc_macro", snippet: None, should_be_inner: false }, | ||
97 | AttrCompletion { label: "proc_macro_attribute", snippet: None, should_be_inner: false }, | ||
98 | AttrCompletion { | ||
99 | label: "proc_macro_derive", | ||
100 | snippet: Some("proc_macro_derive(${0:Trait})"), | ||
101 | should_be_inner: false, | ||
102 | }, | ||
103 | AttrCompletion { | ||
104 | label: "recursion_limit", | ||
105 | snippet: Some("recursion_limit = ${0:128}"), | ||
106 | should_be_inner: true, | ||
107 | }, | ||
108 | AttrCompletion { label: "repr", snippet: Some("repr(${0:C})"), should_be_inner: false }, | ||
109 | AttrCompletion { | ||
110 | label: "should_panic", | ||
111 | snippet: Some(r#"expected = "${0:reason}""#), | ||
112 | should_be_inner: false, | ||
113 | }, | ||
114 | AttrCompletion { | ||
115 | label: "target_feature", | ||
116 | snippet: Some("target_feature = \"${0:feature}\""), | ||
117 | should_be_inner: false, | ||
118 | }, | ||
119 | AttrCompletion { label: "test", snippet: None, should_be_inner: false }, | ||
120 | AttrCompletion { label: "used", snippet: None, should_be_inner: false }, | ||
121 | AttrCompletion { label: "warn", snippet: Some("warn(${0:lint})"), should_be_inner: false }, | ||
122 | AttrCompletion { | ||
123 | label: "windows_subsystem", | ||
124 | snippet: Some(r#"windows_subsystem = "${0:subsystem}""#), | ||
125 | should_be_inner: true, | ||
126 | }, | ||
127 | ]; | ||
128 | |||
129 | #[cfg(test)] | ||
130 | mod tests { | ||
131 | use crate::completion::{test_utils::do_completion, CompletionItem, CompletionKind}; | ||
132 | use insta::assert_debug_snapshot; | ||
133 | |||
134 | fn do_attr_completion(code: &str) -> Vec<CompletionItem> { | ||
135 | do_completion(code, CompletionKind::Attribute) | ||
136 | } | ||
137 | |||
138 | #[test] | ||
139 | fn test_attribute_completion() { | ||
140 | assert_debug_snapshot!( | ||
141 | do_attr_completion( | ||
142 | r" | ||
143 | #[<|>] | ||
144 | ", | ||
145 | ), | ||
146 | @r###" | ||
147 | [ | ||
148 | CompletionItem { | ||
149 | label: "allow", | ||
150 | source_range: 19..19, | ||
151 | delete: 19..19, | ||
152 | insert: "allow(${0:lint})", | ||
153 | kind: Attribute, | ||
154 | }, | ||
155 | CompletionItem { | ||
156 | label: "cfg", | ||
157 | source_range: 19..19, | ||
158 | delete: 19..19, | ||
159 | insert: "cfg(${0:predicate})", | ||
160 | kind: Attribute, | ||
161 | }, | ||
162 | CompletionItem { | ||
163 | label: "cfg_attr", | ||
164 | source_range: 19..19, | ||
165 | delete: 19..19, | ||
166 | insert: "cfg_attr(${1:predicate}, ${0:attr})", | ||
167 | kind: Attribute, | ||
168 | }, | ||
169 | CompletionItem { | ||
170 | label: "deny", | ||
171 | source_range: 19..19, | ||
172 | delete: 19..19, | ||
173 | insert: "deny(${0:lint})", | ||
174 | kind: Attribute, | ||
175 | }, | ||
176 | CompletionItem { | ||
177 | label: "deprecated", | ||
178 | source_range: 19..19, | ||
179 | delete: 19..19, | ||
180 | insert: "deprecated = \"${0:reason}\"", | ||
181 | kind: Attribute, | ||
182 | }, | ||
183 | CompletionItem { | ||
184 | label: "derive", | ||
185 | source_range: 19..19, | ||
186 | delete: 19..19, | ||
187 | insert: "derive(${0:Debug})", | ||
188 | kind: Attribute, | ||
189 | }, | ||
190 | CompletionItem { | ||
191 | label: "doc", | ||
192 | source_range: 19..19, | ||
193 | delete: 19..19, | ||
194 | insert: "doc = \"${0:docs}\"", | ||
195 | kind: Attribute, | ||
196 | }, | ||
197 | CompletionItem { | ||
198 | label: "forbid", | ||
199 | source_range: 19..19, | ||
200 | delete: 19..19, | ||
201 | insert: "forbid(${0:lint})", | ||
202 | kind: Attribute, | ||
203 | }, | ||
204 | CompletionItem { | ||
205 | label: "ignore", | ||
206 | source_range: 19..19, | ||
207 | delete: 19..19, | ||
208 | insert: "ignore(${0:lint})", | ||
209 | kind: Attribute, | ||
210 | }, | ||
211 | CompletionItem { | ||
212 | label: "inline", | ||
213 | source_range: 19..19, | ||
214 | delete: 19..19, | ||
215 | insert: "inline(${0:lint})", | ||
216 | kind: Attribute, | ||
217 | }, | ||
218 | CompletionItem { | ||
219 | label: "link", | ||
220 | source_range: 19..19, | ||
221 | delete: 19..19, | ||
222 | insert: "link", | ||
223 | kind: Attribute, | ||
224 | }, | ||
225 | CompletionItem { | ||
226 | label: "link_name", | ||
227 | source_range: 19..19, | ||
228 | delete: 19..19, | ||
229 | insert: "link_name = \"${0:symbol_name}\"", | ||
230 | kind: Attribute, | ||
231 | }, | ||
232 | CompletionItem { | ||
233 | label: "macro_export", | ||
234 | source_range: 19..19, | ||
235 | delete: 19..19, | ||
236 | insert: "macro_export", | ||
237 | kind: Attribute, | ||
238 | }, | ||
239 | CompletionItem { | ||
240 | label: "macro_use", | ||
241 | source_range: 19..19, | ||
242 | delete: 19..19, | ||
243 | insert: "macro_use", | ||
244 | kind: Attribute, | ||
245 | }, | ||
246 | CompletionItem { | ||
247 | label: "must_use", | ||
248 | source_range: 19..19, | ||
249 | delete: 19..19, | ||
250 | insert: "must_use = \"${0:reason}\"", | ||
251 | kind: Attribute, | ||
252 | }, | ||
253 | CompletionItem { | ||
254 | label: "no_mangle", | ||
255 | source_range: 19..19, | ||
256 | delete: 19..19, | ||
257 | insert: "no_mangle", | ||
258 | kind: Attribute, | ||
259 | }, | ||
260 | CompletionItem { | ||
261 | label: "non_exhaustive", | ||
262 | source_range: 19..19, | ||
263 | delete: 19..19, | ||
264 | insert: "non_exhaustive", | ||
265 | kind: Attribute, | ||
266 | }, | ||
267 | CompletionItem { | ||
268 | label: "path", | ||
269 | source_range: 19..19, | ||
270 | delete: 19..19, | ||
271 | insert: "path =\"${0:path}\"", | ||
272 | kind: Attribute, | ||
273 | }, | ||
274 | CompletionItem { | ||
275 | label: "proc_macro", | ||
276 | source_range: 19..19, | ||
277 | delete: 19..19, | ||
278 | insert: "proc_macro", | ||
279 | kind: Attribute, | ||
280 | }, | ||
281 | CompletionItem { | ||
282 | label: "proc_macro_attribute", | ||
283 | source_range: 19..19, | ||
284 | delete: 19..19, | ||
285 | insert: "proc_macro_attribute", | ||
286 | kind: Attribute, | ||
287 | }, | ||
288 | CompletionItem { | ||
289 | label: "proc_macro_derive", | ||
290 | source_range: 19..19, | ||
291 | delete: 19..19, | ||
292 | insert: "proc_macro_derive(${0:Trait})", | ||
293 | kind: Attribute, | ||
294 | }, | ||
295 | CompletionItem { | ||
296 | label: "repr", | ||
297 | source_range: 19..19, | ||
298 | delete: 19..19, | ||
299 | insert: "repr(${0:C})", | ||
300 | kind: Attribute, | ||
301 | }, | ||
302 | CompletionItem { | ||
303 | label: "should_panic", | ||
304 | source_range: 19..19, | ||
305 | delete: 19..19, | ||
306 | insert: "expected = \"${0:reason}\"", | ||
307 | kind: Attribute, | ||
308 | }, | ||
309 | CompletionItem { | ||
310 | label: "target_feature", | ||
311 | source_range: 19..19, | ||
312 | delete: 19..19, | ||
313 | insert: "target_feature = \"${0:feature}\"", | ||
314 | kind: Attribute, | ||
315 | }, | ||
316 | CompletionItem { | ||
317 | label: "test", | ||
318 | source_range: 19..19, | ||
319 | delete: 19..19, | ||
320 | insert: "test", | ||
321 | kind: Attribute, | ||
322 | }, | ||
323 | CompletionItem { | ||
324 | label: "used", | ||
325 | source_range: 19..19, | ||
326 | delete: 19..19, | ||
327 | insert: "used", | ||
328 | kind: Attribute, | ||
329 | }, | ||
330 | CompletionItem { | ||
331 | label: "warn", | ||
332 | source_range: 19..19, | ||
333 | delete: 19..19, | ||
334 | insert: "warn(${0:lint})", | ||
335 | kind: Attribute, | ||
336 | }, | ||
337 | ] | ||
338 | "### | ||
339 | ); | ||
340 | } | ||
341 | |||
342 | #[test] | ||
343 | fn test_inner_attribute_completion() { | ||
344 | assert_debug_snapshot!( | ||
345 | do_attr_completion( | ||
346 | r" | ||
347 | #![<|>] | ||
348 | ", | ||
349 | ), | ||
350 | @r###" | ||
351 | [ | ||
352 | CompletionItem { | ||
353 | label: "allow", | ||
354 | source_range: 20..20, | ||
355 | delete: 20..20, | ||
356 | insert: "allow(${0:lint})", | ||
357 | kind: Attribute, | ||
358 | }, | ||
359 | CompletionItem { | ||
360 | label: "cfg", | ||
361 | source_range: 20..20, | ||
362 | delete: 20..20, | ||
363 | insert: "cfg(${0:predicate})", | ||
364 | kind: Attribute, | ||
365 | }, | ||
366 | CompletionItem { | ||
367 | label: "cfg_attr", | ||
368 | source_range: 20..20, | ||
369 | delete: 20..20, | ||
370 | insert: "cfg_attr(${1:predicate}, ${0:attr})", | ||
371 | kind: Attribute, | ||
372 | }, | ||
373 | CompletionItem { | ||
374 | label: "deny", | ||
375 | source_range: 20..20, | ||
376 | delete: 20..20, | ||
377 | insert: "deny(${0:lint})", | ||
378 | kind: Attribute, | ||
379 | }, | ||
380 | CompletionItem { | ||
381 | label: "deprecated", | ||
382 | source_range: 20..20, | ||
383 | delete: 20..20, | ||
384 | insert: "deprecated = \"${0:reason}\"", | ||
385 | kind: Attribute, | ||
386 | }, | ||
387 | CompletionItem { | ||
388 | label: "derive", | ||
389 | source_range: 20..20, | ||
390 | delete: 20..20, | ||
391 | insert: "derive(${0:Debug})", | ||
392 | kind: Attribute, | ||
393 | }, | ||
394 | CompletionItem { | ||
395 | label: "doc", | ||
396 | source_range: 20..20, | ||
397 | delete: 20..20, | ||
398 | insert: "doc = \"${0:docs}\"", | ||
399 | kind: Attribute, | ||
400 | }, | ||
401 | CompletionItem { | ||
402 | label: "feature", | ||
403 | source_range: 20..20, | ||
404 | delete: 20..20, | ||
405 | insert: "feature(${0:flag})", | ||
406 | kind: Attribute, | ||
407 | }, | ||
408 | CompletionItem { | ||
409 | label: "forbid", | ||
410 | source_range: 20..20, | ||
411 | delete: 20..20, | ||
412 | insert: "forbid(${0:lint})", | ||
413 | kind: Attribute, | ||
414 | }, | ||
415 | CompletionItem { | ||
416 | label: "global_allocator", | ||
417 | source_range: 20..20, | ||
418 | delete: 20..20, | ||
419 | insert: "global_allocator", | ||
420 | kind: Attribute, | ||
421 | }, | ||
422 | CompletionItem { | ||
423 | label: "ignore", | ||
424 | source_range: 20..20, | ||
425 | delete: 20..20, | ||
426 | insert: "ignore(${0:lint})", | ||
427 | kind: Attribute, | ||
428 | }, | ||
429 | CompletionItem { | ||
430 | label: "inline", | ||
431 | source_range: 20..20, | ||
432 | delete: 20..20, | ||
433 | insert: "inline(${0:lint})", | ||
434 | kind: Attribute, | ||
435 | }, | ||
436 | CompletionItem { | ||
437 | label: "link", | ||
438 | source_range: 20..20, | ||
439 | delete: 20..20, | ||
440 | insert: "link", | ||
441 | kind: Attribute, | ||
442 | }, | ||
443 | CompletionItem { | ||
444 | label: "link_name", | ||
445 | source_range: 20..20, | ||
446 | delete: 20..20, | ||
447 | insert: "link_name = \"${0:symbol_name}\"", | ||
448 | kind: Attribute, | ||
449 | }, | ||
450 | CompletionItem { | ||
451 | label: "macro_export", | ||
452 | source_range: 20..20, | ||
453 | delete: 20..20, | ||
454 | insert: "macro_export", | ||
455 | kind: Attribute, | ||
456 | }, | ||
457 | CompletionItem { | ||
458 | label: "macro_use", | ||
459 | source_range: 20..20, | ||
460 | delete: 20..20, | ||
461 | insert: "macro_use", | ||
462 | kind: Attribute, | ||
463 | }, | ||
464 | CompletionItem { | ||
465 | label: "must_use", | ||
466 | source_range: 20..20, | ||
467 | delete: 20..20, | ||
468 | insert: "must_use = \"${0:reason}\"", | ||
469 | kind: Attribute, | ||
470 | }, | ||
471 | CompletionItem { | ||
472 | label: "no_mangle", | ||
473 | source_range: 20..20, | ||
474 | delete: 20..20, | ||
475 | insert: "no_mangle", | ||
476 | kind: Attribute, | ||
477 | }, | ||
478 | CompletionItem { | ||
479 | label: "no_std", | ||
480 | source_range: 20..20, | ||
481 | delete: 20..20, | ||
482 | insert: "no_std", | ||
483 | kind: Attribute, | ||
484 | }, | ||
485 | CompletionItem { | ||
486 | label: "non_exhaustive", | ||
487 | source_range: 20..20, | ||
488 | delete: 20..20, | ||
489 | insert: "non_exhaustive", | ||
490 | kind: Attribute, | ||
491 | }, | ||
492 | CompletionItem { | ||
493 | label: "panic_handler", | ||
494 | source_range: 20..20, | ||
495 | delete: 20..20, | ||
496 | insert: "panic_handler", | ||
497 | kind: Attribute, | ||
498 | }, | ||
499 | CompletionItem { | ||
500 | label: "path", | ||
501 | source_range: 20..20, | ||
502 | delete: 20..20, | ||
503 | insert: "path =\"${0:path}\"", | ||
504 | kind: Attribute, | ||
505 | }, | ||
506 | CompletionItem { | ||
507 | label: "proc_macro", | ||
508 | source_range: 20..20, | ||
509 | delete: 20..20, | ||
510 | insert: "proc_macro", | ||
511 | kind: Attribute, | ||
512 | }, | ||
513 | CompletionItem { | ||
514 | label: "proc_macro_attribute", | ||
515 | source_range: 20..20, | ||
516 | delete: 20..20, | ||
517 | insert: "proc_macro_attribute", | ||
518 | kind: Attribute, | ||
519 | }, | ||
520 | CompletionItem { | ||
521 | label: "proc_macro_derive", | ||
522 | source_range: 20..20, | ||
523 | delete: 20..20, | ||
524 | insert: "proc_macro_derive(${0:Trait})", | ||
525 | kind: Attribute, | ||
526 | }, | ||
527 | CompletionItem { | ||
528 | label: "recursion_limit", | ||
529 | source_range: 20..20, | ||
530 | delete: 20..20, | ||
531 | insert: "recursion_limit = ${0:128}", | ||
532 | kind: Attribute, | ||
533 | }, | ||
534 | CompletionItem { | ||
535 | label: "repr", | ||
536 | source_range: 20..20, | ||
537 | delete: 20..20, | ||
538 | insert: "repr(${0:C})", | ||
539 | kind: Attribute, | ||
540 | }, | ||
541 | CompletionItem { | ||
542 | label: "should_panic", | ||
543 | source_range: 20..20, | ||
544 | delete: 20..20, | ||
545 | insert: "expected = \"${0:reason}\"", | ||
546 | kind: Attribute, | ||
547 | }, | ||
548 | CompletionItem { | ||
549 | label: "target_feature", | ||
550 | source_range: 20..20, | ||
551 | delete: 20..20, | ||
552 | insert: "target_feature = \"${0:feature}\"", | ||
553 | kind: Attribute, | ||
554 | }, | ||
555 | CompletionItem { | ||
556 | label: "test", | ||
557 | source_range: 20..20, | ||
558 | delete: 20..20, | ||
559 | insert: "test", | ||
560 | kind: Attribute, | ||
561 | }, | ||
562 | CompletionItem { | ||
563 | label: "used", | ||
564 | source_range: 20..20, | ||
565 | delete: 20..20, | ||
566 | insert: "used", | ||
567 | kind: Attribute, | ||
568 | }, | ||
569 | CompletionItem { | ||
570 | label: "warn", | ||
571 | source_range: 20..20, | ||
572 | delete: 20..20, | ||
573 | insert: "warn(${0:lint})", | ||
574 | kind: Attribute, | ||
575 | }, | ||
576 | CompletionItem { | ||
577 | label: "windows_subsystem", | ||
578 | source_range: 20..20, | ||
579 | delete: 20..20, | ||
580 | insert: "windows_subsystem = \"${0:subsystem}\"", | ||
581 | kind: Attribute, | ||
582 | }, | ||
583 | ] | ||
584 | "### | ||
585 | ); | ||
586 | } | ||
587 | } | ||
diff --git a/crates/ra_ide/src/completion/complete_dot.rs b/crates/ra_ide/src/completion/complete_dot.rs index b93153b48..814354ffa 100644 --- a/crates/ra_ide/src/completion/complete_dot.rs +++ b/crates/ra_ide/src/completion/complete_dot.rs | |||
@@ -94,8 +94,8 @@ mod tests { | |||
94 | [ | 94 | [ |
95 | CompletionItem { | 95 | CompletionItem { |
96 | label: "the_field", | 96 | label: "the_field", |
97 | source_range: [94; 94), | 97 | source_range: 94..94, |
98 | delete: [94; 94), | 98 | delete: 94..94, |
99 | insert: "the_field", | 99 | insert: "the_field", |
100 | kind: Field, | 100 | kind: Field, |
101 | detail: "u32", | 101 | detail: "u32", |
@@ -125,8 +125,8 @@ mod tests { | |||
125 | [ | 125 | [ |
126 | CompletionItem { | 126 | CompletionItem { |
127 | label: "foo()", | 127 | label: "foo()", |
128 | source_range: [187; 187), | 128 | source_range: 187..187, |
129 | delete: [187; 187), | 129 | delete: 187..187, |
130 | insert: "foo()$0", | 130 | insert: "foo()$0", |
131 | kind: Method, | 131 | kind: Method, |
132 | lookup: "foo", | 132 | lookup: "foo", |
@@ -134,8 +134,8 @@ mod tests { | |||
134 | }, | 134 | }, |
135 | CompletionItem { | 135 | CompletionItem { |
136 | label: "the_field", | 136 | label: "the_field", |
137 | source_range: [187; 187), | 137 | source_range: 187..187, |
138 | delete: [187; 187), | 138 | delete: 187..187, |
139 | insert: "the_field", | 139 | insert: "the_field", |
140 | kind: Field, | 140 | kind: Field, |
141 | detail: "(u32,)", | 141 | detail: "(u32,)", |
@@ -165,8 +165,8 @@ mod tests { | |||
165 | [ | 165 | [ |
166 | CompletionItem { | 166 | CompletionItem { |
167 | label: "foo()", | 167 | label: "foo()", |
168 | source_range: [126; 126), | 168 | source_range: 126..126, |
169 | delete: [126; 126), | 169 | delete: 126..126, |
170 | insert: "foo()$0", | 170 | insert: "foo()$0", |
171 | kind: Method, | 171 | kind: Method, |
172 | lookup: "foo", | 172 | lookup: "foo", |
@@ -174,8 +174,8 @@ mod tests { | |||
174 | }, | 174 | }, |
175 | CompletionItem { | 175 | CompletionItem { |
176 | label: "the_field", | 176 | label: "the_field", |
177 | source_range: [126; 126), | 177 | source_range: 126..126, |
178 | delete: [126; 126), | 178 | delete: 126..126, |
179 | insert: "the_field", | 179 | insert: "the_field", |
180 | kind: Field, | 180 | kind: Field, |
181 | detail: "(u32, i32)", | 181 | detail: "(u32, i32)", |
@@ -222,24 +222,24 @@ mod tests { | |||
222 | [ | 222 | [ |
223 | CompletionItem { | 223 | CompletionItem { |
224 | label: "crate_field", | 224 | label: "crate_field", |
225 | source_range: [313; 313), | 225 | source_range: 313..313, |
226 | delete: [313; 313), | 226 | delete: 313..313, |
227 | insert: "crate_field", | 227 | insert: "crate_field", |
228 | kind: Field, | 228 | kind: Field, |
229 | detail: "u32", | 229 | detail: "u32", |
230 | }, | 230 | }, |
231 | CompletionItem { | 231 | CompletionItem { |
232 | label: "pub_field", | 232 | label: "pub_field", |
233 | source_range: [313; 313), | 233 | source_range: 313..313, |
234 | delete: [313; 313), | 234 | delete: 313..313, |
235 | insert: "pub_field", | 235 | insert: "pub_field", |
236 | kind: Field, | 236 | kind: Field, |
237 | detail: "u32", | 237 | detail: "u32", |
238 | }, | 238 | }, |
239 | CompletionItem { | 239 | CompletionItem { |
240 | label: "super_field", | 240 | label: "super_field", |
241 | source_range: [313; 313), | 241 | source_range: 313..313, |
242 | delete: [313; 313), | 242 | delete: 313..313, |
243 | insert: "super_field", | 243 | insert: "super_field", |
244 | kind: Field, | 244 | kind: Field, |
245 | detail: "u32", | 245 | detail: "u32", |
@@ -267,8 +267,8 @@ mod tests { | |||
267 | [ | 267 | [ |
268 | CompletionItem { | 268 | CompletionItem { |
269 | label: "the_method()", | 269 | label: "the_method()", |
270 | source_range: [144; 144), | 270 | source_range: 144..144, |
271 | delete: [144; 144), | 271 | delete: 144..144, |
272 | insert: "the_method()$0", | 272 | insert: "the_method()$0", |
273 | kind: Method, | 273 | kind: Method, |
274 | lookup: "the_method", | 274 | lookup: "the_method", |
@@ -300,8 +300,8 @@ mod tests { | |||
300 | [ | 300 | [ |
301 | CompletionItem { | 301 | CompletionItem { |
302 | label: "the_method()", | 302 | label: "the_method()", |
303 | source_range: [243; 243), | 303 | source_range: 243..243, |
304 | delete: [243; 243), | 304 | delete: 243..243, |
305 | insert: "the_method()$0", | 305 | insert: "the_method()$0", |
306 | kind: Method, | 306 | kind: Method, |
307 | lookup: "the_method", | 307 | lookup: "the_method", |
@@ -333,8 +333,8 @@ mod tests { | |||
333 | [ | 333 | [ |
334 | CompletionItem { | 334 | CompletionItem { |
335 | label: "the_method()", | 335 | label: "the_method()", |
336 | source_range: [256; 256), | 336 | source_range: 256..256, |
337 | delete: [256; 256), | 337 | delete: 256..256, |
338 | insert: "the_method()$0", | 338 | insert: "the_method()$0", |
339 | kind: Method, | 339 | kind: Method, |
340 | lookup: "the_method", | 340 | lookup: "the_method", |
@@ -362,8 +362,8 @@ mod tests { | |||
362 | [ | 362 | [ |
363 | CompletionItem { | 363 | CompletionItem { |
364 | label: "the_method()", | 364 | label: "the_method()", |
365 | source_range: [151; 151), | 365 | source_range: 151..151, |
366 | delete: [151; 151), | 366 | delete: 151..151, |
367 | insert: "the_method()$0", | 367 | insert: "the_method()$0", |
368 | kind: Method, | 368 | kind: Method, |
369 | lookup: "the_method", | 369 | lookup: "the_method", |
@@ -391,8 +391,8 @@ mod tests { | |||
391 | [ | 391 | [ |
392 | CompletionItem { | 392 | CompletionItem { |
393 | label: "the_method()", | 393 | label: "the_method()", |
394 | source_range: [155; 155), | 394 | source_range: 155..155, |
395 | delete: [155; 155), | 395 | delete: 155..155, |
396 | insert: "the_method()$0", | 396 | insert: "the_method()$0", |
397 | kind: Method, | 397 | kind: Method, |
398 | lookup: "the_method", | 398 | lookup: "the_method", |
@@ -423,8 +423,8 @@ mod tests { | |||
423 | [ | 423 | [ |
424 | CompletionItem { | 424 | CompletionItem { |
425 | label: "the_method()", | 425 | label: "the_method()", |
426 | source_range: [219; 219), | 426 | source_range: 219..219, |
427 | delete: [219; 219), | 427 | delete: 219..219, |
428 | insert: "the_method()$0", | 428 | insert: "the_method()$0", |
429 | kind: Method, | 429 | kind: Method, |
430 | lookup: "the_method", | 430 | lookup: "the_method", |
@@ -475,8 +475,8 @@ mod tests { | |||
475 | [ | 475 | [ |
476 | CompletionItem { | 476 | CompletionItem { |
477 | label: "the_method()", | 477 | label: "the_method()", |
478 | source_range: [249; 249), | 478 | source_range: 249..249, |
479 | delete: [249; 249), | 479 | delete: 249..249, |
480 | insert: "the_method()$0", | 480 | insert: "the_method()$0", |
481 | kind: Method, | 481 | kind: Method, |
482 | lookup: "the_method", | 482 | lookup: "the_method", |
@@ -502,16 +502,16 @@ mod tests { | |||
502 | [ | 502 | [ |
503 | CompletionItem { | 503 | CompletionItem { |
504 | label: "0", | 504 | label: "0", |
505 | source_range: [75; 75), | 505 | source_range: 75..75, |
506 | delete: [75; 75), | 506 | delete: 75..75, |
507 | insert: "0", | 507 | insert: "0", |
508 | kind: Field, | 508 | kind: Field, |
509 | detail: "i32", | 509 | detail: "i32", |
510 | }, | 510 | }, |
511 | CompletionItem { | 511 | CompletionItem { |
512 | label: "1", | 512 | label: "1", |
513 | source_range: [75; 75), | 513 | source_range: 75..75, |
514 | delete: [75; 75), | 514 | delete: 75..75, |
515 | insert: "1", | 515 | insert: "1", |
516 | kind: Field, | 516 | kind: Field, |
517 | detail: "f64", | 517 | detail: "f64", |
@@ -545,8 +545,8 @@ mod tests { | |||
545 | [ | 545 | [ |
546 | CompletionItem { | 546 | CompletionItem { |
547 | label: "blah()", | 547 | label: "blah()", |
548 | source_range: [299; 300), | 548 | source_range: 299..300, |
549 | delete: [299; 300), | 549 | delete: 299..300, |
550 | insert: "blah()$0", | 550 | insert: "blah()$0", |
551 | kind: Method, | 551 | kind: Method, |
552 | lookup: "blah", | 552 | lookup: "blah", |
@@ -572,8 +572,8 @@ mod tests { | |||
572 | [ | 572 | [ |
573 | CompletionItem { | 573 | CompletionItem { |
574 | label: "the_field", | 574 | label: "the_field", |
575 | source_range: [106; 106), | 575 | source_range: 106..106, |
576 | delete: [106; 106), | 576 | delete: 106..106, |
577 | insert: "the_field", | 577 | insert: "the_field", |
578 | kind: Field, | 578 | kind: Field, |
579 | detail: "u32", | 579 | detail: "u32", |
@@ -606,8 +606,8 @@ mod tests { | |||
606 | [ | 606 | [ |
607 | CompletionItem { | 607 | CompletionItem { |
608 | label: "await", | 608 | label: "await", |
609 | source_range: [74; 74), | 609 | source_range: 74..74, |
610 | delete: [74; 74), | 610 | delete: 74..74, |
611 | insert: "await", | 611 | insert: "await", |
612 | detail: "expr.await", | 612 | detail: "expr.await", |
613 | }, | 613 | }, |
@@ -638,15 +638,15 @@ mod tests { | |||
638 | [ | 638 | [ |
639 | CompletionItem { | 639 | CompletionItem { |
640 | label: "A", | 640 | label: "A", |
641 | source_range: [217; 217), | 641 | source_range: 217..217, |
642 | delete: [217; 217), | 642 | delete: 217..217, |
643 | insert: "A", | 643 | insert: "A", |
644 | kind: Const, | 644 | kind: Const, |
645 | }, | 645 | }, |
646 | CompletionItem { | 646 | CompletionItem { |
647 | label: "b", | 647 | label: "b", |
648 | source_range: [217; 217), | 648 | source_range: 217..217, |
649 | delete: [217; 217), | 649 | delete: 217..217, |
650 | insert: "b", | 650 | insert: "b", |
651 | kind: Module, | 651 | kind: Module, |
652 | }, | 652 | }, |
@@ -671,8 +671,8 @@ mod tests { | |||
671 | [ | 671 | [ |
672 | CompletionItem { | 672 | CompletionItem { |
673 | label: "the_field", | 673 | label: "the_field", |
674 | source_range: [156; 157), | 674 | source_range: 156..157, |
675 | delete: [156; 157), | 675 | delete: 156..157, |
676 | insert: "the_field", | 676 | insert: "the_field", |
677 | kind: Field, | 677 | kind: Field, |
678 | detail: "u32", | 678 | detail: "u32", |
@@ -698,8 +698,8 @@ mod tests { | |||
698 | [ | 698 | [ |
699 | CompletionItem { | 699 | CompletionItem { |
700 | label: "the_field", | 700 | label: "the_field", |
701 | source_range: [156; 157), | 701 | source_range: 156..157, |
702 | delete: [156; 157), | 702 | delete: 156..157, |
703 | insert: "the_field", | 703 | insert: "the_field", |
704 | kind: Field, | 704 | kind: Field, |
705 | detail: "u32", | 705 | detail: "u32", |
@@ -726,8 +726,8 @@ mod tests { | |||
726 | [ | 726 | [ |
727 | CompletionItem { | 727 | CompletionItem { |
728 | label: "the_field", | 728 | label: "the_field", |
729 | source_range: [156; 156), | 729 | source_range: 156..156, |
730 | delete: [156; 156), | 730 | delete: 156..156, |
731 | insert: "the_field", | 731 | insert: "the_field", |
732 | kind: Field, | 732 | kind: Field, |
733 | detail: "u32", | 733 | detail: "u32", |
@@ -753,8 +753,8 @@ mod tests { | |||
753 | [ | 753 | [ |
754 | CompletionItem { | 754 | CompletionItem { |
755 | label: "the_field", | 755 | label: "the_field", |
756 | source_range: [162; 163), | 756 | source_range: 162..163, |
757 | delete: [162; 163), | 757 | delete: 162..163, |
758 | insert: "the_field", | 758 | insert: "the_field", |
759 | kind: Field, | 759 | kind: Field, |
760 | detail: "u32", | 760 | detail: "u32", |
@@ -790,8 +790,8 @@ mod tests { | |||
790 | [ | 790 | [ |
791 | CompletionItem { | 791 | CompletionItem { |
792 | label: "the_field", | 792 | label: "the_field", |
793 | source_range: [552; 552), | 793 | source_range: 552..552, |
794 | delete: [552; 552), | 794 | delete: 552..552, |
795 | insert: "the_field", | 795 | insert: "the_field", |
796 | kind: Field, | 796 | kind: Field, |
797 | detail: "u32", | 797 | detail: "u32", |
@@ -820,8 +820,8 @@ mod tests { | |||
820 | [ | 820 | [ |
821 | CompletionItem { | 821 | CompletionItem { |
822 | label: "the_method()", | 822 | label: "the_method()", |
823 | source_range: [201; 201), | 823 | source_range: 201..201, |
824 | delete: [201; 201), | 824 | delete: 201..201, |
825 | insert: "the_method()$0", | 825 | insert: "the_method()$0", |
826 | kind: Method, | 826 | kind: Method, |
827 | lookup: "the_method", | 827 | lookup: "the_method", |
diff --git a/crates/ra_ide/src/completion/complete_fn_param.rs b/crates/ra_ide/src/completion/complete_fn_param.rs index f84b559fc..a661932a3 100644 --- a/crates/ra_ide/src/completion/complete_fn_param.rs +++ b/crates/ra_ide/src/completion/complete_fn_param.rs | |||
@@ -75,8 +75,8 @@ mod tests { | |||
75 | [ | 75 | [ |
76 | CompletionItem { | 76 | CompletionItem { |
77 | label: "file_id: FileId", | 77 | label: "file_id: FileId", |
78 | source_range: [110; 114), | 78 | source_range: 110..114, |
79 | delete: [110; 114), | 79 | delete: 110..114, |
80 | insert: "file_id: FileId", | 80 | insert: "file_id: FileId", |
81 | lookup: "file_id", | 81 | lookup: "file_id", |
82 | }, | 82 | }, |
@@ -99,8 +99,8 @@ mod tests { | |||
99 | [ | 99 | [ |
100 | CompletionItem { | 100 | CompletionItem { |
101 | label: "file_id: FileId", | 101 | label: "file_id: FileId", |
102 | source_range: [110; 114), | 102 | source_range: 110..114, |
103 | delete: [110; 114), | 103 | delete: 110..114, |
104 | insert: "file_id: FileId", | 104 | insert: "file_id: FileId", |
105 | lookup: "file_id", | 105 | lookup: "file_id", |
106 | }, | 106 | }, |
@@ -126,8 +126,8 @@ mod tests { | |||
126 | [ | 126 | [ |
127 | CompletionItem { | 127 | CompletionItem { |
128 | label: "file_id: FileId", | 128 | label: "file_id: FileId", |
129 | source_range: [289; 293), | 129 | source_range: 289..293, |
130 | delete: [289; 293), | 130 | delete: 289..293, |
131 | insert: "file_id: FileId", | 131 | insert: "file_id: FileId", |
132 | lookup: "file_id", | 132 | lookup: "file_id", |
133 | }, | 133 | }, |
diff --git a/crates/ra_ide/src/completion/complete_keyword.rs b/crates/ra_ide/src/completion/complete_keyword.rs index adefb290e..fd95bc410 100644 --- a/crates/ra_ide/src/completion/complete_keyword.rs +++ b/crates/ra_ide/src/completion/complete_keyword.rs | |||
@@ -97,7 +97,7 @@ fn is_in_loop_body(leaf: &SyntaxToken) -> bool { | |||
97 | } | 97 | } |
98 | }; | 98 | }; |
99 | if let Some(body) = loop_body { | 99 | if let Some(body) = loop_body { |
100 | if leaf.text_range().is_subrange(&body.syntax().text_range()) { | 100 | if body.syntax().text_range().contains_range(leaf.text_range()) { |
101 | return true; | 101 | return true; |
102 | } | 102 | } |
103 | } | 103 | } |
@@ -140,22 +140,22 @@ mod tests { | |||
140 | [ | 140 | [ |
141 | CompletionItem { | 141 | CompletionItem { |
142 | label: "crate", | 142 | label: "crate", |
143 | source_range: [21; 21), | 143 | source_range: 21..21, |
144 | delete: [21; 21), | 144 | delete: 21..21, |
145 | insert: "crate::", | 145 | insert: "crate::", |
146 | kind: Keyword, | 146 | kind: Keyword, |
147 | }, | 147 | }, |
148 | CompletionItem { | 148 | CompletionItem { |
149 | label: "self", | 149 | label: "self", |
150 | source_range: [21; 21), | 150 | source_range: 21..21, |
151 | delete: [21; 21), | 151 | delete: 21..21, |
152 | insert: "self", | 152 | insert: "self", |
153 | kind: Keyword, | 153 | kind: Keyword, |
154 | }, | 154 | }, |
155 | CompletionItem { | 155 | CompletionItem { |
156 | label: "super", | 156 | label: "super", |
157 | source_range: [21; 21), | 157 | source_range: 21..21, |
158 | delete: [21; 21), | 158 | delete: 21..21, |
159 | insert: "super::", | 159 | insert: "super::", |
160 | kind: Keyword, | 160 | kind: Keyword, |
161 | }, | 161 | }, |
@@ -173,15 +173,15 @@ mod tests { | |||
173 | [ | 173 | [ |
174 | CompletionItem { | 174 | CompletionItem { |
175 | label: "self", | 175 | label: "self", |
176 | source_range: [24; 24), | 176 | source_range: 24..24, |
177 | delete: [24; 24), | 177 | delete: 24..24, |
178 | insert: "self", | 178 | insert: "self", |
179 | kind: Keyword, | 179 | kind: Keyword, |
180 | }, | 180 | }, |
181 | CompletionItem { | 181 | CompletionItem { |
182 | label: "super", | 182 | label: "super", |
183 | source_range: [24; 24), | 183 | source_range: 24..24, |
184 | delete: [24; 24), | 184 | delete: 24..24, |
185 | insert: "super::", | 185 | insert: "super::", |
186 | kind: Keyword, | 186 | kind: Keyword, |
187 | }, | 187 | }, |
@@ -199,15 +199,15 @@ mod tests { | |||
199 | [ | 199 | [ |
200 | CompletionItem { | 200 | CompletionItem { |
201 | label: "self", | 201 | label: "self", |
202 | source_range: [28; 28), | 202 | source_range: 28..28, |
203 | delete: [28; 28), | 203 | delete: 28..28, |
204 | insert: "self", | 204 | insert: "self", |
205 | kind: Keyword, | 205 | kind: Keyword, |
206 | }, | 206 | }, |
207 | CompletionItem { | 207 | CompletionItem { |
208 | label: "super", | 208 | label: "super", |
209 | source_range: [28; 28), | 209 | source_range: 28..28, |
210 | delete: [28; 28), | 210 | delete: 28..28, |
211 | insert: "super::", | 211 | insert: "super::", |
212 | kind: Keyword, | 212 | kind: Keyword, |
213 | }, | 213 | }, |
@@ -230,36 +230,36 @@ mod tests { | |||
230 | [ | 230 | [ |
231 | CompletionItem { | 231 | CompletionItem { |
232 | label: "if", | 232 | label: "if", |
233 | source_range: [49; 49), | 233 | source_range: 49..49, |
234 | delete: [49; 49), | 234 | delete: 49..49, |
235 | insert: "if $0 {}", | 235 | insert: "if $0 {}", |
236 | kind: Keyword, | 236 | kind: Keyword, |
237 | }, | 237 | }, |
238 | CompletionItem { | 238 | CompletionItem { |
239 | label: "loop", | 239 | label: "loop", |
240 | source_range: [49; 49), | 240 | source_range: 49..49, |
241 | delete: [49; 49), | 241 | delete: 49..49, |
242 | insert: "loop {$0}", | 242 | insert: "loop {$0}", |
243 | kind: Keyword, | 243 | kind: Keyword, |
244 | }, | 244 | }, |
245 | CompletionItem { | 245 | CompletionItem { |
246 | label: "match", | 246 | label: "match", |
247 | source_range: [49; 49), | 247 | source_range: 49..49, |
248 | delete: [49; 49), | 248 | delete: 49..49, |
249 | insert: "match $0 {}", | 249 | insert: "match $0 {}", |
250 | kind: Keyword, | 250 | kind: Keyword, |
251 | }, | 251 | }, |
252 | CompletionItem { | 252 | CompletionItem { |
253 | label: "return", | 253 | label: "return", |
254 | source_range: [49; 49), | 254 | source_range: 49..49, |
255 | delete: [49; 49), | 255 | delete: 49..49, |
256 | insert: "return;", | 256 | insert: "return;", |
257 | kind: Keyword, | 257 | kind: Keyword, |
258 | }, | 258 | }, |
259 | CompletionItem { | 259 | CompletionItem { |
260 | label: "while", | 260 | label: "while", |
261 | source_range: [49; 49), | 261 | source_range: 49..49, |
262 | delete: [49; 49), | 262 | delete: 49..49, |
263 | insert: "while $0 {}", | 263 | insert: "while $0 {}", |
264 | kind: Keyword, | 264 | kind: Keyword, |
265 | }, | 265 | }, |
@@ -284,50 +284,50 @@ mod tests { | |||
284 | [ | 284 | [ |
285 | CompletionItem { | 285 | CompletionItem { |
286 | label: "else", | 286 | label: "else", |
287 | source_range: [108; 108), | 287 | source_range: 108..108, |
288 | delete: [108; 108), | 288 | delete: 108..108, |
289 | insert: "else {$0}", | 289 | insert: "else {$0}", |
290 | kind: Keyword, | 290 | kind: Keyword, |
291 | }, | 291 | }, |
292 | CompletionItem { | 292 | CompletionItem { |
293 | label: "else if", | 293 | label: "else if", |
294 | source_range: [108; 108), | 294 | source_range: 108..108, |
295 | delete: [108; 108), | 295 | delete: 108..108, |
296 | insert: "else if $0 {}", | 296 | insert: "else if $0 {}", |
297 | kind: Keyword, | 297 | kind: Keyword, |
298 | }, | 298 | }, |
299 | CompletionItem { | 299 | CompletionItem { |
300 | label: "if", | 300 | label: "if", |
301 | source_range: [108; 108), | 301 | source_range: 108..108, |
302 | delete: [108; 108), | 302 | delete: 108..108, |
303 | insert: "if $0 {}", | 303 | insert: "if $0 {}", |
304 | kind: Keyword, | 304 | kind: Keyword, |
305 | }, | 305 | }, |
306 | CompletionItem { | 306 | CompletionItem { |
307 | label: "loop", | 307 | label: "loop", |
308 | source_range: [108; 108), | 308 | source_range: 108..108, |
309 | delete: [108; 108), | 309 | delete: 108..108, |
310 | insert: "loop {$0}", | 310 | insert: "loop {$0}", |
311 | kind: Keyword, | 311 | kind: Keyword, |
312 | }, | 312 | }, |
313 | CompletionItem { | 313 | CompletionItem { |
314 | label: "match", | 314 | label: "match", |
315 | source_range: [108; 108), | 315 | source_range: 108..108, |
316 | delete: [108; 108), | 316 | delete: 108..108, |
317 | insert: "match $0 {}", | 317 | insert: "match $0 {}", |
318 | kind: Keyword, | 318 | kind: Keyword, |
319 | }, | 319 | }, |
320 | CompletionItem { | 320 | CompletionItem { |
321 | label: "return", | 321 | label: "return", |
322 | source_range: [108; 108), | 322 | source_range: 108..108, |
323 | delete: [108; 108), | 323 | delete: 108..108, |
324 | insert: "return;", | 324 | insert: "return;", |
325 | kind: Keyword, | 325 | kind: Keyword, |
326 | }, | 326 | }, |
327 | CompletionItem { | 327 | CompletionItem { |
328 | label: "while", | 328 | label: "while", |
329 | source_range: [108; 108), | 329 | source_range: 108..108, |
330 | delete: [108; 108), | 330 | delete: 108..108, |
331 | insert: "while $0 {}", | 331 | insert: "while $0 {}", |
332 | kind: Keyword, | 332 | kind: Keyword, |
333 | }, | 333 | }, |
@@ -351,36 +351,36 @@ mod tests { | |||
351 | [ | 351 | [ |
352 | CompletionItem { | 352 | CompletionItem { |
353 | label: "if", | 353 | label: "if", |
354 | source_range: [56; 56), | 354 | source_range: 56..56, |
355 | delete: [56; 56), | 355 | delete: 56..56, |
356 | insert: "if $0 {}", | 356 | insert: "if $0 {}", |
357 | kind: Keyword, | 357 | kind: Keyword, |
358 | }, | 358 | }, |
359 | CompletionItem { | 359 | CompletionItem { |
360 | label: "loop", | 360 | label: "loop", |
361 | source_range: [56; 56), | 361 | source_range: 56..56, |
362 | delete: [56; 56), | 362 | delete: 56..56, |
363 | insert: "loop {$0}", | 363 | insert: "loop {$0}", |
364 | kind: Keyword, | 364 | kind: Keyword, |
365 | }, | 365 | }, |
366 | CompletionItem { | 366 | CompletionItem { |
367 | label: "match", | 367 | label: "match", |
368 | source_range: [56; 56), | 368 | source_range: 56..56, |
369 | delete: [56; 56), | 369 | delete: 56..56, |
370 | insert: "match $0 {}", | 370 | insert: "match $0 {}", |
371 | kind: Keyword, | 371 | kind: Keyword, |
372 | }, | 372 | }, |
373 | CompletionItem { | 373 | CompletionItem { |
374 | label: "return", | 374 | label: "return", |
375 | source_range: [56; 56), | 375 | source_range: 56..56, |
376 | delete: [56; 56), | 376 | delete: 56..56, |
377 | insert: "return $0;", | 377 | insert: "return $0;", |
378 | kind: Keyword, | 378 | kind: Keyword, |
379 | }, | 379 | }, |
380 | CompletionItem { | 380 | CompletionItem { |
381 | label: "while", | 381 | label: "while", |
382 | source_range: [56; 56), | 382 | source_range: 56..56, |
383 | delete: [56; 56), | 383 | delete: 56..56, |
384 | insert: "while $0 {}", | 384 | insert: "while $0 {}", |
385 | kind: Keyword, | 385 | kind: Keyword, |
386 | }, | 386 | }, |
@@ -400,36 +400,36 @@ mod tests { | |||
400 | [ | 400 | [ |
401 | CompletionItem { | 401 | CompletionItem { |
402 | label: "if", | 402 | label: "if", |
403 | source_range: [49; 49), | 403 | source_range: 49..49, |
404 | delete: [49; 49), | 404 | delete: 49..49, |
405 | insert: "if $0 {}", | 405 | insert: "if $0 {}", |
406 | kind: Keyword, | 406 | kind: Keyword, |
407 | }, | 407 | }, |
408 | CompletionItem { | 408 | CompletionItem { |
409 | label: "loop", | 409 | label: "loop", |
410 | source_range: [49; 49), | 410 | source_range: 49..49, |
411 | delete: [49; 49), | 411 | delete: 49..49, |
412 | insert: "loop {$0}", | 412 | insert: "loop {$0}", |
413 | kind: Keyword, | 413 | kind: Keyword, |
414 | }, | 414 | }, |
415 | CompletionItem { | 415 | CompletionItem { |
416 | label: "match", | 416 | label: "match", |
417 | source_range: [49; 49), | 417 | source_range: 49..49, |
418 | delete: [49; 49), | 418 | delete: 49..49, |
419 | insert: "match $0 {}", | 419 | insert: "match $0 {}", |
420 | kind: Keyword, | 420 | kind: Keyword, |
421 | }, | 421 | }, |
422 | CompletionItem { | 422 | CompletionItem { |
423 | label: "return", | 423 | label: "return", |
424 | source_range: [49; 49), | 424 | source_range: 49..49, |
425 | delete: [49; 49), | 425 | delete: 49..49, |
426 | insert: "return;", | 426 | insert: "return;", |
427 | kind: Keyword, | 427 | kind: Keyword, |
428 | }, | 428 | }, |
429 | CompletionItem { | 429 | CompletionItem { |
430 | label: "while", | 430 | label: "while", |
431 | source_range: [49; 49), | 431 | source_range: 49..49, |
432 | delete: [49; 49), | 432 | delete: 49..49, |
433 | insert: "while $0 {}", | 433 | insert: "while $0 {}", |
434 | kind: Keyword, | 434 | kind: Keyword, |
435 | }, | 435 | }, |
@@ -454,36 +454,36 @@ mod tests { | |||
454 | [ | 454 | [ |
455 | CompletionItem { | 455 | CompletionItem { |
456 | label: "if", | 456 | label: "if", |
457 | source_range: [97; 97), | 457 | source_range: 97..97, |
458 | delete: [97; 97), | 458 | delete: 97..97, |
459 | insert: "if $0 {}", | 459 | insert: "if $0 {}", |
460 | kind: Keyword, | 460 | kind: Keyword, |
461 | }, | 461 | }, |
462 | CompletionItem { | 462 | CompletionItem { |
463 | label: "loop", | 463 | label: "loop", |
464 | source_range: [97; 97), | 464 | source_range: 97..97, |
465 | delete: [97; 97), | 465 | delete: 97..97, |
466 | insert: "loop {$0}", | 466 | insert: "loop {$0}", |
467 | kind: Keyword, | 467 | kind: Keyword, |
468 | }, | 468 | }, |
469 | CompletionItem { | 469 | CompletionItem { |
470 | label: "match", | 470 | label: "match", |
471 | source_range: [97; 97), | 471 | source_range: 97..97, |
472 | delete: [97; 97), | 472 | delete: 97..97, |
473 | insert: "match $0 {}", | 473 | insert: "match $0 {}", |
474 | kind: Keyword, | 474 | kind: Keyword, |
475 | }, | 475 | }, |
476 | CompletionItem { | 476 | CompletionItem { |
477 | label: "return", | 477 | label: "return", |
478 | source_range: [97; 97), | 478 | source_range: 97..97, |
479 | delete: [97; 97), | 479 | delete: 97..97, |
480 | insert: "return $0", | 480 | insert: "return $0", |
481 | kind: Keyword, | 481 | kind: Keyword, |
482 | }, | 482 | }, |
483 | CompletionItem { | 483 | CompletionItem { |
484 | label: "while", | 484 | label: "while", |
485 | source_range: [97; 97), | 485 | source_range: 97..97, |
486 | delete: [97; 97), | 486 | delete: 97..97, |
487 | insert: "while $0 {}", | 487 | insert: "while $0 {}", |
488 | kind: Keyword, | 488 | kind: Keyword, |
489 | }, | 489 | }, |
@@ -508,36 +508,36 @@ mod tests { | |||
508 | [ | 508 | [ |
509 | CompletionItem { | 509 | CompletionItem { |
510 | label: "if", | 510 | label: "if", |
511 | source_range: [95; 95), | 511 | source_range: 95..95, |
512 | delete: [95; 95), | 512 | delete: 95..95, |
513 | insert: "if $0 {}", | 513 | insert: "if $0 {}", |
514 | kind: Keyword, | 514 | kind: Keyword, |
515 | }, | 515 | }, |
516 | CompletionItem { | 516 | CompletionItem { |
517 | label: "loop", | 517 | label: "loop", |
518 | source_range: [95; 95), | 518 | source_range: 95..95, |
519 | delete: [95; 95), | 519 | delete: 95..95, |
520 | insert: "loop {$0}", | 520 | insert: "loop {$0}", |
521 | kind: Keyword, | 521 | kind: Keyword, |
522 | }, | 522 | }, |
523 | CompletionItem { | 523 | CompletionItem { |
524 | label: "match", | 524 | label: "match", |
525 | source_range: [95; 95), | 525 | source_range: 95..95, |
526 | delete: [95; 95), | 526 | delete: 95..95, |
527 | insert: "match $0 {}", | 527 | insert: "match $0 {}", |
528 | kind: Keyword, | 528 | kind: Keyword, |
529 | }, | 529 | }, |
530 | CompletionItem { | 530 | CompletionItem { |
531 | label: "return", | 531 | label: "return", |
532 | source_range: [95; 95), | 532 | source_range: 95..95, |
533 | delete: [95; 95), | 533 | delete: 95..95, |
534 | insert: "return $0;", | 534 | insert: "return $0;", |
535 | kind: Keyword, | 535 | kind: Keyword, |
536 | }, | 536 | }, |
537 | CompletionItem { | 537 | CompletionItem { |
538 | label: "while", | 538 | label: "while", |
539 | source_range: [95; 95), | 539 | source_range: 95..95, |
540 | delete: [95; 95), | 540 | delete: 95..95, |
541 | insert: "while $0 {}", | 541 | insert: "while $0 {}", |
542 | kind: Keyword, | 542 | kind: Keyword, |
543 | }, | 543 | }, |
@@ -560,36 +560,36 @@ mod tests { | |||
560 | [ | 560 | [ |
561 | CompletionItem { | 561 | CompletionItem { |
562 | label: "if", | 562 | label: "if", |
563 | source_range: [95; 95), | 563 | source_range: 95..95, |
564 | delete: [95; 95), | 564 | delete: 95..95, |
565 | insert: "if $0 {}", | 565 | insert: "if $0 {}", |
566 | kind: Keyword, | 566 | kind: Keyword, |
567 | }, | 567 | }, |
568 | CompletionItem { | 568 | CompletionItem { |
569 | label: "loop", | 569 | label: "loop", |
570 | source_range: [95; 95), | 570 | source_range: 95..95, |
571 | delete: [95; 95), | 571 | delete: 95..95, |
572 | insert: "loop {$0}", | 572 | insert: "loop {$0}", |
573 | kind: Keyword, | 573 | kind: Keyword, |
574 | }, | 574 | }, |
575 | CompletionItem { | 575 | CompletionItem { |
576 | label: "match", | 576 | label: "match", |
577 | source_range: [95; 95), | 577 | source_range: 95..95, |
578 | delete: [95; 95), | 578 | delete: 95..95, |
579 | insert: "match $0 {}", | 579 | insert: "match $0 {}", |
580 | kind: Keyword, | 580 | kind: Keyword, |
581 | }, | 581 | }, |
582 | CompletionItem { | 582 | CompletionItem { |
583 | label: "return", | 583 | label: "return", |
584 | source_range: [95; 95), | 584 | source_range: 95..95, |
585 | delete: [95; 95), | 585 | delete: 95..95, |
586 | insert: "return $0;", | 586 | insert: "return $0;", |
587 | kind: Keyword, | 587 | kind: Keyword, |
588 | }, | 588 | }, |
589 | CompletionItem { | 589 | CompletionItem { |
590 | label: "while", | 590 | label: "while", |
591 | source_range: [95; 95), | 591 | source_range: 95..95, |
592 | delete: [95; 95), | 592 | delete: 95..95, |
593 | insert: "while $0 {}", | 593 | insert: "while $0 {}", |
594 | kind: Keyword, | 594 | kind: Keyword, |
595 | }, | 595 | }, |
@@ -612,50 +612,50 @@ mod tests { | |||
612 | [ | 612 | [ |
613 | CompletionItem { | 613 | CompletionItem { |
614 | label: "break", | 614 | label: "break", |
615 | source_range: [63; 63), | 615 | source_range: 63..63, |
616 | delete: [63; 63), | 616 | delete: 63..63, |
617 | insert: "break;", | 617 | insert: "break;", |
618 | kind: Keyword, | 618 | kind: Keyword, |
619 | }, | 619 | }, |
620 | CompletionItem { | 620 | CompletionItem { |
621 | label: "continue", | 621 | label: "continue", |
622 | source_range: [63; 63), | 622 | source_range: 63..63, |
623 | delete: [63; 63), | 623 | delete: 63..63, |
624 | insert: "continue;", | 624 | insert: "continue;", |
625 | kind: Keyword, | 625 | kind: Keyword, |
626 | }, | 626 | }, |
627 | CompletionItem { | 627 | CompletionItem { |
628 | label: "if", | 628 | label: "if", |
629 | source_range: [63; 63), | 629 | source_range: 63..63, |
630 | delete: [63; 63), | 630 | delete: 63..63, |
631 | insert: "if $0 {}", | 631 | insert: "if $0 {}", |
632 | kind: Keyword, | 632 | kind: Keyword, |
633 | }, | 633 | }, |
634 | CompletionItem { | 634 | CompletionItem { |
635 | label: "loop", | 635 | label: "loop", |
636 | source_range: [63; 63), | 636 | source_range: 63..63, |
637 | delete: [63; 63), | 637 | delete: 63..63, |
638 | insert: "loop {$0}", | 638 | insert: "loop {$0}", |
639 | kind: Keyword, | 639 | kind: Keyword, |
640 | }, | 640 | }, |
641 | CompletionItem { | 641 | CompletionItem { |
642 | label: "match", | 642 | label: "match", |
643 | source_range: [63; 63), | 643 | source_range: 63..63, |
644 | delete: [63; 63), | 644 | delete: 63..63, |
645 | insert: "match $0 {}", | 645 | insert: "match $0 {}", |
646 | kind: Keyword, | 646 | kind: Keyword, |
647 | }, | 647 | }, |
648 | CompletionItem { | 648 | CompletionItem { |
649 | label: "return", | 649 | label: "return", |
650 | source_range: [63; 63), | 650 | source_range: 63..63, |
651 | delete: [63; 63), | 651 | delete: 63..63, |
652 | insert: "return $0;", | 652 | insert: "return $0;", |
653 | kind: Keyword, | 653 | kind: Keyword, |
654 | }, | 654 | }, |
655 | CompletionItem { | 655 | CompletionItem { |
656 | label: "while", | 656 | label: "while", |
657 | source_range: [63; 63), | 657 | source_range: 63..63, |
658 | delete: [63; 63), | 658 | delete: 63..63, |
659 | insert: "while $0 {}", | 659 | insert: "while $0 {}", |
660 | kind: Keyword, | 660 | kind: Keyword, |
661 | }, | 661 | }, |
@@ -676,36 +676,36 @@ mod tests { | |||
676 | [ | 676 | [ |
677 | CompletionItem { | 677 | CompletionItem { |
678 | label: "if", | 678 | label: "if", |
679 | source_range: [68; 68), | 679 | source_range: 68..68, |
680 | delete: [68; 68), | 680 | delete: 68..68, |
681 | insert: "if $0 {}", | 681 | insert: "if $0 {}", |
682 | kind: Keyword, | 682 | kind: Keyword, |
683 | }, | 683 | }, |
684 | CompletionItem { | 684 | CompletionItem { |
685 | label: "loop", | 685 | label: "loop", |
686 | source_range: [68; 68), | 686 | source_range: 68..68, |
687 | delete: [68; 68), | 687 | delete: 68..68, |
688 | insert: "loop {$0}", | 688 | insert: "loop {$0}", |
689 | kind: Keyword, | 689 | kind: Keyword, |
690 | }, | 690 | }, |
691 | CompletionItem { | 691 | CompletionItem { |
692 | label: "match", | 692 | label: "match", |
693 | source_range: [68; 68), | 693 | source_range: 68..68, |
694 | delete: [68; 68), | 694 | delete: 68..68, |
695 | insert: "match $0 {}", | 695 | insert: "match $0 {}", |
696 | kind: Keyword, | 696 | kind: Keyword, |
697 | }, | 697 | }, |
698 | CompletionItem { | 698 | CompletionItem { |
699 | label: "return", | 699 | label: "return", |
700 | source_range: [68; 68), | 700 | source_range: 68..68, |
701 | delete: [68; 68), | 701 | delete: 68..68, |
702 | insert: "return $0;", | 702 | insert: "return $0;", |
703 | kind: Keyword, | 703 | kind: Keyword, |
704 | }, | 704 | }, |
705 | CompletionItem { | 705 | CompletionItem { |
706 | label: "while", | 706 | label: "while", |
707 | source_range: [68; 68), | 707 | source_range: 68..68, |
708 | delete: [68; 68), | 708 | delete: 68..68, |
709 | insert: "while $0 {}", | 709 | insert: "while $0 {}", |
710 | kind: Keyword, | 710 | kind: Keyword, |
711 | }, | 711 | }, |
@@ -732,50 +732,50 @@ mod tests { | |||
732 | [ | 732 | [ |
733 | CompletionItem { | 733 | CompletionItem { |
734 | label: "break", | 734 | label: "break", |
735 | source_range: [122; 124), | 735 | source_range: 122..124, |
736 | delete: [122; 124), | 736 | delete: 122..124, |
737 | insert: "break", | 737 | insert: "break", |
738 | kind: Keyword, | 738 | kind: Keyword, |
739 | }, | 739 | }, |
740 | CompletionItem { | 740 | CompletionItem { |
741 | label: "continue", | 741 | label: "continue", |
742 | source_range: [122; 124), | 742 | source_range: 122..124, |
743 | delete: [122; 124), | 743 | delete: 122..124, |
744 | insert: "continue", | 744 | insert: "continue", |
745 | kind: Keyword, | 745 | kind: Keyword, |
746 | }, | 746 | }, |
747 | CompletionItem { | 747 | CompletionItem { |
748 | label: "if", | 748 | label: "if", |
749 | source_range: [122; 124), | 749 | source_range: 122..124, |
750 | delete: [122; 124), | 750 | delete: 122..124, |
751 | insert: "if $0 {}", | 751 | insert: "if $0 {}", |
752 | kind: Keyword, | 752 | kind: Keyword, |
753 | }, | 753 | }, |
754 | CompletionItem { | 754 | CompletionItem { |
755 | label: "loop", | 755 | label: "loop", |
756 | source_range: [122; 124), | 756 | source_range: 122..124, |
757 | delete: [122; 124), | 757 | delete: 122..124, |
758 | insert: "loop {$0}", | 758 | insert: "loop {$0}", |
759 | kind: Keyword, | 759 | kind: Keyword, |
760 | }, | 760 | }, |
761 | CompletionItem { | 761 | CompletionItem { |
762 | label: "match", | 762 | label: "match", |
763 | source_range: [122; 124), | 763 | source_range: 122..124, |
764 | delete: [122; 124), | 764 | delete: 122..124, |
765 | insert: "match $0 {}", | 765 | insert: "match $0 {}", |
766 | kind: Keyword, | 766 | kind: Keyword, |
767 | }, | 767 | }, |
768 | CompletionItem { | 768 | CompletionItem { |
769 | label: "return", | 769 | label: "return", |
770 | source_range: [122; 124), | 770 | source_range: 122..124, |
771 | delete: [122; 124), | 771 | delete: 122..124, |
772 | insert: "return", | 772 | insert: "return", |
773 | kind: Keyword, | 773 | kind: Keyword, |
774 | }, | 774 | }, |
775 | CompletionItem { | 775 | CompletionItem { |
776 | label: "while", | 776 | label: "while", |
777 | source_range: [122; 124), | 777 | source_range: 122..124, |
778 | delete: [122; 124), | 778 | delete: 122..124, |
779 | insert: "while $0 {}", | 779 | insert: "while $0 {}", |
780 | kind: Keyword, | 780 | kind: Keyword, |
781 | }, | 781 | }, |
diff --git a/crates/ra_ide/src/completion/complete_macro_in_item_position.rs b/crates/ra_ide/src/completion/complete_macro_in_item_position.rs index 270e96df0..d9bb5fd25 100644 --- a/crates/ra_ide/src/completion/complete_macro_in_item_position.rs +++ b/crates/ra_ide/src/completion/complete_macro_in_item_position.rs | |||
@@ -41,9 +41,9 @@ mod tests { | |||
41 | @r###" | 41 | @r###" |
42 | [ | 42 | [ |
43 | CompletionItem { | 43 | CompletionItem { |
44 | label: "foo!", | 44 | label: "foo!(…)", |
45 | source_range: [46; 46), | 45 | source_range: 46..46, |
46 | delete: [46; 46), | 46 | delete: 46..46, |
47 | insert: "foo!($0)", | 47 | insert: "foo!($0)", |
48 | kind: Macro, | 48 | kind: Macro, |
49 | detail: "macro_rules! foo", | 49 | detail: "macro_rules! foo", |
@@ -81,9 +81,9 @@ mod tests { | |||
81 | @r###" | 81 | @r###" |
82 | [ | 82 | [ |
83 | CompletionItem { | 83 | CompletionItem { |
84 | label: "vec!", | 84 | label: "vec![…]", |
85 | source_range: [280; 280), | 85 | source_range: 280..280, |
86 | delete: [280; 280), | 86 | delete: 280..280, |
87 | insert: "vec![$0]", | 87 | insert: "vec![$0]", |
88 | kind: Macro, | 88 | kind: Macro, |
89 | detail: "macro_rules! vec", | 89 | detail: "macro_rules! vec", |
@@ -118,9 +118,9 @@ mod tests { | |||
118 | @r###" | 118 | @r###" |
119 | [ | 119 | [ |
120 | CompletionItem { | 120 | CompletionItem { |
121 | label: "foo!", | 121 | label: "foo! {…}", |
122 | source_range: [163; 163), | 122 | source_range: 163..163, |
123 | delete: [163; 163), | 123 | delete: 163..163, |
124 | insert: "foo! {$0}", | 124 | insert: "foo! {$0}", |
125 | kind: Macro, | 125 | kind: Macro, |
126 | detail: "macro_rules! foo", | 126 | detail: "macro_rules! foo", |
@@ -130,8 +130,8 @@ mod tests { | |||
130 | }, | 130 | }, |
131 | CompletionItem { | 131 | CompletionItem { |
132 | label: "main()", | 132 | label: "main()", |
133 | source_range: [163; 163), | 133 | source_range: 163..163, |
134 | delete: [163; 163), | 134 | delete: 163..163, |
135 | insert: "main()$0", | 135 | insert: "main()$0", |
136 | kind: Function, | 136 | kind: Function, |
137 | lookup: "main", | 137 | lookup: "main", |
diff --git a/crates/ra_ide/src/completion/complete_pattern.rs b/crates/ra_ide/src/completion/complete_pattern.rs index a8b4ce114..fdd9e928b 100644 --- a/crates/ra_ide/src/completion/complete_pattern.rs +++ b/crates/ra_ide/src/completion/complete_pattern.rs | |||
@@ -63,37 +63,37 @@ mod tests { | |||
63 | [ | 63 | [ |
64 | CompletionItem { | 64 | CompletionItem { |
65 | label: "Bar", | 65 | label: "Bar", |
66 | source_range: [246; 246), | 66 | source_range: 246..246, |
67 | delete: [246; 246), | 67 | delete: 246..246, |
68 | insert: "Bar", | 68 | insert: "Bar", |
69 | kind: Struct, | 69 | kind: Struct, |
70 | }, | 70 | }, |
71 | CompletionItem { | 71 | CompletionItem { |
72 | label: "E", | 72 | label: "E", |
73 | source_range: [246; 246), | 73 | source_range: 246..246, |
74 | delete: [246; 246), | 74 | delete: 246..246, |
75 | insert: "E", | 75 | insert: "E", |
76 | kind: Enum, | 76 | kind: Enum, |
77 | }, | 77 | }, |
78 | CompletionItem { | 78 | CompletionItem { |
79 | label: "X", | 79 | label: "X", |
80 | source_range: [246; 246), | 80 | source_range: 246..246, |
81 | delete: [246; 246), | 81 | delete: 246..246, |
82 | insert: "X", | 82 | insert: "X", |
83 | kind: EnumVariant, | 83 | kind: EnumVariant, |
84 | detail: "()", | 84 | detail: "()", |
85 | }, | 85 | }, |
86 | CompletionItem { | 86 | CompletionItem { |
87 | label: "Z", | 87 | label: "Z", |
88 | source_range: [246; 246), | 88 | source_range: 246..246, |
89 | delete: [246; 246), | 89 | delete: 246..246, |
90 | insert: "Z", | 90 | insert: "Z", |
91 | kind: Const, | 91 | kind: Const, |
92 | }, | 92 | }, |
93 | CompletionItem { | 93 | CompletionItem { |
94 | label: "m", | 94 | label: "m", |
95 | source_range: [246; 246), | 95 | source_range: 246..246, |
96 | delete: [246; 246), | 96 | delete: 246..246, |
97 | insert: "m", | 97 | insert: "m", |
98 | kind: Module, | 98 | kind: Module, |
99 | }, | 99 | }, |
@@ -119,15 +119,15 @@ mod tests { | |||
119 | [ | 119 | [ |
120 | CompletionItem { | 120 | CompletionItem { |
121 | label: "E", | 121 | label: "E", |
122 | source_range: [151; 151), | 122 | source_range: 151..151, |
123 | delete: [151; 151), | 123 | delete: 151..151, |
124 | insert: "E", | 124 | insert: "E", |
125 | kind: Enum, | 125 | kind: Enum, |
126 | }, | 126 | }, |
127 | CompletionItem { | 127 | CompletionItem { |
128 | label: "m!", | 128 | label: "m!(…)", |
129 | source_range: [151; 151), | 129 | source_range: 151..151, |
130 | delete: [151; 151), | 130 | delete: 151..151, |
131 | insert: "m!($0)", | 131 | insert: "m!($0)", |
132 | kind: Macro, | 132 | kind: Macro, |
133 | detail: "macro_rules! m", | 133 | detail: "macro_rules! m", |
diff --git a/crates/ra_ide/src/completion/complete_postfix.rs b/crates/ra_ide/src/completion/complete_postfix.rs index 8d397b0fe..6a0f0c72e 100644 --- a/crates/ra_ide/src/completion/complete_postfix.rs +++ b/crates/ra_ide/src/completion/complete_postfix.rs | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | use ra_syntax::{ | 3 | use ra_syntax::{ |
4 | ast::{self, AstNode}, | 4 | ast::{self, AstNode}, |
5 | TextRange, TextUnit, | 5 | TextRange, TextSize, |
6 | }; | 6 | }; |
7 | use ra_text_edit::TextEdit; | 7 | use ra_text_edit::TextEdit; |
8 | 8 | ||
@@ -115,7 +115,7 @@ pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) { | |||
115 | fn get_receiver_text(receiver: &ast::Expr, receiver_is_ambiguous_float_literal: bool) -> String { | 115 | fn get_receiver_text(receiver: &ast::Expr, receiver_is_ambiguous_float_literal: bool) -> String { |
116 | if receiver_is_ambiguous_float_literal { | 116 | if receiver_is_ambiguous_float_literal { |
117 | let text = receiver.syntax().text(); | 117 | let text = receiver.syntax().text(); |
118 | let without_dot = ..text.len() - TextUnit::of_char('.'); | 118 | let without_dot = ..text.len() - TextSize::of('.'); |
119 | text.slice(without_dot).to_string() | 119 | text.slice(without_dot).to_string() |
120 | } else { | 120 | } else { |
121 | receiver.to_string() | 121 | receiver.to_string() |
@@ -143,7 +143,7 @@ fn postfix_snippet( | |||
143 | let edit = { | 143 | let edit = { |
144 | let receiver_syntax = receiver.syntax(); | 144 | let receiver_syntax = receiver.syntax(); |
145 | let receiver_range = ctx.sema.original_range(receiver_syntax).range; | 145 | let receiver_range = ctx.sema.original_range(receiver_syntax).range; |
146 | let delete_range = TextRange::from_to(receiver_range.start(), ctx.source_range().end()); | 146 | let delete_range = TextRange::new(receiver_range.start(), ctx.source_range().end()); |
147 | TextEdit::replace(delete_range, snippet.to_string()) | 147 | TextEdit::replace(delete_range, snippet.to_string()) |
148 | }; | 148 | }; |
149 | CompletionItem::new(CompletionKind::Postfix, ctx.source_range(), label) | 149 | CompletionItem::new(CompletionKind::Postfix, ctx.source_range(), label) |
@@ -176,57 +176,57 @@ mod tests { | |||
176 | [ | 176 | [ |
177 | CompletionItem { | 177 | CompletionItem { |
178 | label: "box", | 178 | label: "box", |
179 | source_range: [89; 89), | 179 | source_range: 89..89, |
180 | delete: [85; 89), | 180 | delete: 85..89, |
181 | insert: "Box::new(bar)", | 181 | insert: "Box::new(bar)", |
182 | detail: "Box::new(expr)", | 182 | detail: "Box::new(expr)", |
183 | }, | 183 | }, |
184 | CompletionItem { | 184 | CompletionItem { |
185 | label: "dbg", | 185 | label: "dbg", |
186 | source_range: [89; 89), | 186 | source_range: 89..89, |
187 | delete: [85; 89), | 187 | delete: 85..89, |
188 | insert: "dbg!(bar)", | 188 | insert: "dbg!(bar)", |
189 | detail: "dbg!(expr)", | 189 | detail: "dbg!(expr)", |
190 | }, | 190 | }, |
191 | CompletionItem { | 191 | CompletionItem { |
192 | label: "if", | 192 | label: "if", |
193 | source_range: [89; 89), | 193 | source_range: 89..89, |
194 | delete: [85; 89), | 194 | delete: 85..89, |
195 | insert: "if bar {$0}", | 195 | insert: "if bar {$0}", |
196 | detail: "if expr {}", | 196 | detail: "if expr {}", |
197 | }, | 197 | }, |
198 | CompletionItem { | 198 | CompletionItem { |
199 | label: "match", | 199 | label: "match", |
200 | source_range: [89; 89), | 200 | source_range: 89..89, |
201 | delete: [85; 89), | 201 | delete: 85..89, |
202 | insert: "match bar {\n ${1:_} => {$0\\},\n}", | 202 | insert: "match bar {\n ${1:_} => {$0\\},\n}", |
203 | detail: "match expr {}", | 203 | detail: "match expr {}", |
204 | }, | 204 | }, |
205 | CompletionItem { | 205 | CompletionItem { |
206 | label: "not", | 206 | label: "not", |
207 | source_range: [89; 89), | 207 | source_range: 89..89, |
208 | delete: [85; 89), | 208 | delete: 85..89, |
209 | insert: "!bar", | 209 | insert: "!bar", |
210 | detail: "!expr", | 210 | detail: "!expr", |
211 | }, | 211 | }, |
212 | CompletionItem { | 212 | CompletionItem { |
213 | label: "ref", | 213 | label: "ref", |
214 | source_range: [89; 89), | 214 | source_range: 89..89, |
215 | delete: [85; 89), | 215 | delete: 85..89, |
216 | insert: "&bar", | 216 | insert: "&bar", |
217 | detail: "&expr", | 217 | detail: "&expr", |
218 | }, | 218 | }, |
219 | CompletionItem { | 219 | CompletionItem { |
220 | label: "refm", | 220 | label: "refm", |
221 | source_range: [89; 89), | 221 | source_range: 89..89, |
222 | delete: [85; 89), | 222 | delete: 85..89, |
223 | insert: "&mut bar", | 223 | insert: "&mut bar", |
224 | detail: "&mut expr", | 224 | detail: "&mut expr", |
225 | }, | 225 | }, |
226 | CompletionItem { | 226 | CompletionItem { |
227 | label: "while", | 227 | label: "while", |
228 | source_range: [89; 89), | 228 | source_range: 89..89, |
229 | delete: [85; 89), | 229 | delete: 85..89, |
230 | insert: "while bar {\n$0\n}", | 230 | insert: "while bar {\n$0\n}", |
231 | detail: "while expr {}", | 231 | detail: "while expr {}", |
232 | }, | 232 | }, |
@@ -250,43 +250,43 @@ mod tests { | |||
250 | [ | 250 | [ |
251 | CompletionItem { | 251 | CompletionItem { |
252 | label: "box", | 252 | label: "box", |
253 | source_range: [91; 91), | 253 | source_range: 91..91, |
254 | delete: [87; 91), | 254 | delete: 87..91, |
255 | insert: "Box::new(bar)", | 255 | insert: "Box::new(bar)", |
256 | detail: "Box::new(expr)", | 256 | detail: "Box::new(expr)", |
257 | }, | 257 | }, |
258 | CompletionItem { | 258 | CompletionItem { |
259 | label: "dbg", | 259 | label: "dbg", |
260 | source_range: [91; 91), | 260 | source_range: 91..91, |
261 | delete: [87; 91), | 261 | delete: 87..91, |
262 | insert: "dbg!(bar)", | 262 | insert: "dbg!(bar)", |
263 | detail: "dbg!(expr)", | 263 | detail: "dbg!(expr)", |
264 | }, | 264 | }, |
265 | CompletionItem { | 265 | CompletionItem { |
266 | label: "match", | 266 | label: "match", |
267 | source_range: [91; 91), | 267 | source_range: 91..91, |
268 | delete: [87; 91), | 268 | delete: 87..91, |
269 | insert: "match bar {\n ${1:_} => {$0\\},\n}", | 269 | insert: "match bar {\n ${1:_} => {$0\\},\n}", |
270 | detail: "match expr {}", | 270 | detail: "match expr {}", |
271 | }, | 271 | }, |
272 | CompletionItem { | 272 | CompletionItem { |
273 | label: "not", | 273 | label: "not", |
274 | source_range: [91; 91), | 274 | source_range: 91..91, |
275 | delete: [87; 91), | 275 | delete: 87..91, |
276 | insert: "!bar", | 276 | insert: "!bar", |
277 | detail: "!expr", | 277 | detail: "!expr", |
278 | }, | 278 | }, |
279 | CompletionItem { | 279 | CompletionItem { |
280 | label: "ref", | 280 | label: "ref", |
281 | source_range: [91; 91), | 281 | source_range: 91..91, |
282 | delete: [87; 91), | 282 | delete: 87..91, |
283 | insert: "&bar", | 283 | insert: "&bar", |
284 | detail: "&expr", | 284 | detail: "&expr", |
285 | }, | 285 | }, |
286 | CompletionItem { | 286 | CompletionItem { |
287 | label: "refm", | 287 | label: "refm", |
288 | source_range: [91; 91), | 288 | source_range: 91..91, |
289 | delete: [87; 91), | 289 | delete: 87..91, |
290 | insert: "&mut bar", | 290 | insert: "&mut bar", |
291 | detail: "&mut expr", | 291 | detail: "&mut expr", |
292 | }, | 292 | }, |
@@ -309,43 +309,43 @@ mod tests { | |||
309 | [ | 309 | [ |
310 | CompletionItem { | 310 | CompletionItem { |
311 | label: "box", | 311 | label: "box", |
312 | source_range: [52; 52), | 312 | source_range: 52..52, |
313 | delete: [49; 52), | 313 | delete: 49..52, |
314 | insert: "Box::new(42)", | 314 | insert: "Box::new(42)", |
315 | detail: "Box::new(expr)", | 315 | detail: "Box::new(expr)", |
316 | }, | 316 | }, |
317 | CompletionItem { | 317 | CompletionItem { |
318 | label: "dbg", | 318 | label: "dbg", |
319 | source_range: [52; 52), | 319 | source_range: 52..52, |
320 | delete: [49; 52), | 320 | delete: 49..52, |
321 | insert: "dbg!(42)", | 321 | insert: "dbg!(42)", |
322 | detail: "dbg!(expr)", | 322 | detail: "dbg!(expr)", |
323 | }, | 323 | }, |
324 | CompletionItem { | 324 | CompletionItem { |
325 | label: "match", | 325 | label: "match", |
326 | source_range: [52; 52), | 326 | source_range: 52..52, |
327 | delete: [49; 52), | 327 | delete: 49..52, |
328 | insert: "match 42 {\n ${1:_} => {$0\\},\n}", | 328 | insert: "match 42 {\n ${1:_} => {$0\\},\n}", |
329 | detail: "match expr {}", | 329 | detail: "match expr {}", |
330 | }, | 330 | }, |
331 | CompletionItem { | 331 | CompletionItem { |
332 | label: "not", | 332 | label: "not", |
333 | source_range: [52; 52), | 333 | source_range: 52..52, |
334 | delete: [49; 52), | 334 | delete: 49..52, |
335 | insert: "!42", | 335 | insert: "!42", |
336 | detail: "!expr", | 336 | detail: "!expr", |
337 | }, | 337 | }, |
338 | CompletionItem { | 338 | CompletionItem { |
339 | label: "ref", | 339 | label: "ref", |
340 | source_range: [52; 52), | 340 | source_range: 52..52, |
341 | delete: [49; 52), | 341 | delete: 49..52, |
342 | insert: "&42", | 342 | insert: "&42", |
343 | detail: "&expr", | 343 | detail: "&expr", |
344 | }, | 344 | }, |
345 | CompletionItem { | 345 | CompletionItem { |
346 | label: "refm", | 346 | label: "refm", |
347 | source_range: [52; 52), | 347 | source_range: 52..52, |
348 | delete: [49; 52), | 348 | delete: 49..52, |
349 | insert: "&mut 42", | 349 | insert: "&mut 42", |
350 | detail: "&mut expr", | 350 | detail: "&mut expr", |
351 | }, | 351 | }, |
@@ -370,43 +370,43 @@ mod tests { | |||
370 | [ | 370 | [ |
371 | CompletionItem { | 371 | CompletionItem { |
372 | label: "box", | 372 | label: "box", |
373 | source_range: [149; 150), | 373 | source_range: 149..150, |
374 | delete: [145; 150), | 374 | delete: 145..150, |
375 | insert: "Box::new(bar)", | 375 | insert: "Box::new(bar)", |
376 | detail: "Box::new(expr)", | 376 | detail: "Box::new(expr)", |
377 | }, | 377 | }, |
378 | CompletionItem { | 378 | CompletionItem { |
379 | label: "dbg", | 379 | label: "dbg", |
380 | source_range: [149; 150), | 380 | source_range: 149..150, |
381 | delete: [145; 150), | 381 | delete: 145..150, |
382 | insert: "dbg!(bar)", | 382 | insert: "dbg!(bar)", |
383 | detail: "dbg!(expr)", | 383 | detail: "dbg!(expr)", |
384 | }, | 384 | }, |
385 | CompletionItem { | 385 | CompletionItem { |
386 | label: "match", | 386 | label: "match", |
387 | source_range: [149; 150), | 387 | source_range: 149..150, |
388 | delete: [145; 150), | 388 | delete: 145..150, |
389 | insert: "match bar {\n ${1:_} => {$0\\},\n}", | 389 | insert: "match bar {\n ${1:_} => {$0\\},\n}", |
390 | detail: "match expr {}", | 390 | detail: "match expr {}", |
391 | }, | 391 | }, |
392 | CompletionItem { | 392 | CompletionItem { |
393 | label: "not", | 393 | label: "not", |
394 | source_range: [149; 150), | 394 | source_range: 149..150, |
395 | delete: [145; 150), | 395 | delete: 145..150, |
396 | insert: "!bar", | 396 | insert: "!bar", |
397 | detail: "!expr", | 397 | detail: "!expr", |
398 | }, | 398 | }, |
399 | CompletionItem { | 399 | CompletionItem { |
400 | label: "ref", | 400 | label: "ref", |
401 | source_range: [149; 150), | 401 | source_range: 149..150, |
402 | delete: [145; 150), | 402 | delete: 145..150, |
403 | insert: "&bar", | 403 | insert: "&bar", |
404 | detail: "&expr", | 404 | detail: "&expr", |
405 | }, | 405 | }, |
406 | CompletionItem { | 406 | CompletionItem { |
407 | label: "refm", | 407 | label: "refm", |
408 | source_range: [149; 150), | 408 | source_range: 149..150, |
409 | delete: [145; 150), | 409 | delete: 145..150, |
410 | insert: "&mut bar", | 410 | insert: "&mut bar", |
411 | detail: "&mut expr", | 411 | detail: "&mut expr", |
412 | }, | 412 | }, |
@@ -429,43 +429,43 @@ mod tests { | |||
429 | [ | 429 | [ |
430 | CompletionItem { | 430 | CompletionItem { |
431 | label: "box", | 431 | label: "box", |
432 | source_range: [56; 56), | 432 | source_range: 56..56, |
433 | delete: [49; 56), | 433 | delete: 49..56, |
434 | insert: "Box::new(&&&&42)", | 434 | insert: "Box::new(&&&&42)", |
435 | detail: "Box::new(expr)", | 435 | detail: "Box::new(expr)", |
436 | }, | 436 | }, |
437 | CompletionItem { | 437 | CompletionItem { |
438 | label: "dbg", | 438 | label: "dbg", |
439 | source_range: [56; 56), | 439 | source_range: 56..56, |
440 | delete: [49; 56), | 440 | delete: 49..56, |
441 | insert: "dbg!(&&&&42)", | 441 | insert: "dbg!(&&&&42)", |
442 | detail: "dbg!(expr)", | 442 | detail: "dbg!(expr)", |
443 | }, | 443 | }, |
444 | CompletionItem { | 444 | CompletionItem { |
445 | label: "match", | 445 | label: "match", |
446 | source_range: [56; 56), | 446 | source_range: 56..56, |
447 | delete: [49; 56), | 447 | delete: 49..56, |
448 | insert: "match &&&&42 {\n ${1:_} => {$0\\},\n}", | 448 | insert: "match &&&&42 {\n ${1:_} => {$0\\},\n}", |
449 | detail: "match expr {}", | 449 | detail: "match expr {}", |
450 | }, | 450 | }, |
451 | CompletionItem { | 451 | CompletionItem { |
452 | label: "not", | 452 | label: "not", |
453 | source_range: [56; 56), | 453 | source_range: 56..56, |
454 | delete: [53; 56), | 454 | delete: 53..56, |
455 | insert: "!42", | 455 | insert: "!42", |
456 | detail: "!expr", | 456 | detail: "!expr", |
457 | }, | 457 | }, |
458 | CompletionItem { | 458 | CompletionItem { |
459 | label: "ref", | 459 | label: "ref", |
460 | source_range: [56; 56), | 460 | source_range: 56..56, |
461 | delete: [53; 56), | 461 | delete: 53..56, |
462 | insert: "&42", | 462 | insert: "&42", |
463 | detail: "&expr", | 463 | detail: "&expr", |
464 | }, | 464 | }, |
465 | CompletionItem { | 465 | CompletionItem { |
466 | label: "refm", | 466 | label: "refm", |
467 | source_range: [56; 56), | 467 | source_range: 56..56, |
468 | delete: [53; 56), | 468 | delete: 53..56, |
469 | insert: "&mut 42", | 469 | insert: "&mut 42", |
470 | detail: "&mut expr", | 470 | detail: "&mut expr", |
471 | }, | 471 | }, |
diff --git a/crates/ra_ide/src/completion/complete_qualified_path.rs b/crates/ra_ide/src/completion/complete_qualified_path.rs index d98523406..dd10f74e6 100644 --- a/crates/ra_ide/src/completion/complete_qualified_path.rs +++ b/crates/ra_ide/src/completion/complete_qualified_path.rs | |||
@@ -57,9 +57,7 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon | |||
57 | } | 57 | } |
58 | match item { | 58 | match item { |
59 | hir::AssocItem::Function(func) => { | 59 | hir::AssocItem::Function(func) => { |
60 | if !func.has_self_param(ctx.db) { | 60 | acc.add_function(ctx, func, None); |
61 | acc.add_function(ctx, func, None); | ||
62 | } | ||
63 | } | 61 | } |
64 | hir::AssocItem::Const(ct) => acc.add_const(ctx, ct), | 62 | hir::AssocItem::Const(ct) => acc.add_const(ctx, ct), |
65 | hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty), | 63 | hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty), |
@@ -86,9 +84,7 @@ pub(super) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon | |||
86 | } | 84 | } |
87 | match item { | 85 | match item { |
88 | hir::AssocItem::Function(func) => { | 86 | hir::AssocItem::Function(func) => { |
89 | if !func.has_self_param(ctx.db) { | 87 | acc.add_function(ctx, func, None); |
90 | acc.add_function(ctx, func, None); | ||
91 | } | ||
92 | } | 88 | } |
93 | hir::AssocItem::Const(ct) => acc.add_const(ctx, ct), | 89 | hir::AssocItem::Const(ct) => acc.add_const(ctx, ct), |
94 | hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty), | 90 | hir::AssocItem::TypeAlias(ty) => acc.add_type_alias(ctx, ty), |
@@ -166,8 +162,8 @@ mod tests { | |||
166 | [ | 162 | [ |
167 | CompletionItem { | 163 | CompletionItem { |
168 | label: "my", | 164 | label: "my", |
169 | source_range: [27; 29), | 165 | source_range: 27..29, |
170 | delete: [27; 29), | 166 | delete: 27..29, |
171 | insert: "my", | 167 | insert: "my", |
172 | kind: Module, | 168 | kind: Module, |
173 | documentation: Documentation( | 169 | documentation: Documentation( |
@@ -197,15 +193,15 @@ mod tests { | |||
197 | [ | 193 | [ |
198 | CompletionItem { | 194 | CompletionItem { |
199 | label: "Foo", | 195 | label: "Foo", |
200 | source_range: [31; 31), | 196 | source_range: 31..31, |
201 | delete: [31; 31), | 197 | delete: 31..31, |
202 | insert: "Foo", | 198 | insert: "Foo", |
203 | kind: Struct, | 199 | kind: Struct, |
204 | }, | 200 | }, |
205 | CompletionItem { | 201 | CompletionItem { |
206 | label: "PublicBar", | 202 | label: "PublicBar", |
207 | source_range: [31; 31), | 203 | source_range: 31..31, |
208 | delete: [31; 31), | 204 | delete: 31..31, |
209 | insert: "PublicBar", | 205 | insert: "PublicBar", |
210 | kind: Struct, | 206 | kind: Struct, |
211 | }, | 207 | }, |
@@ -230,8 +226,8 @@ mod tests { | |||
230 | [ | 226 | [ |
231 | CompletionItem { | 227 | CompletionItem { |
232 | label: "Bar", | 228 | label: "Bar", |
233 | source_range: [30; 30), | 229 | source_range: 30..30, |
234 | delete: [30; 30), | 230 | delete: 30..30, |
235 | insert: "Bar", | 231 | insert: "Bar", |
236 | kind: Struct, | 232 | kind: Struct, |
237 | }, | 233 | }, |
@@ -256,15 +252,15 @@ mod tests { | |||
256 | [ | 252 | [ |
257 | CompletionItem { | 253 | CompletionItem { |
258 | label: "Spam", | 254 | label: "Spam", |
259 | source_range: [11; 13), | 255 | source_range: 11..13, |
260 | delete: [11; 13), | 256 | delete: 11..13, |
261 | insert: "Spam", | 257 | insert: "Spam", |
262 | kind: Struct, | 258 | kind: Struct, |
263 | }, | 259 | }, |
264 | CompletionItem { | 260 | CompletionItem { |
265 | label: "foo", | 261 | label: "foo", |
266 | source_range: [11; 13), | 262 | source_range: 11..13, |
267 | delete: [11; 13), | 263 | delete: 11..13, |
268 | insert: "foo", | 264 | insert: "foo", |
269 | kind: Module, | 265 | kind: Module, |
270 | }, | 266 | }, |
@@ -289,15 +285,15 @@ mod tests { | |||
289 | [ | 285 | [ |
290 | CompletionItem { | 286 | CompletionItem { |
291 | label: "Spam", | 287 | label: "Spam", |
292 | source_range: [12; 14), | 288 | source_range: 12..14, |
293 | delete: [12; 14), | 289 | delete: 12..14, |
294 | insert: "Spam", | 290 | insert: "Spam", |
295 | kind: Struct, | 291 | kind: Struct, |
296 | }, | 292 | }, |
297 | CompletionItem { | 293 | CompletionItem { |
298 | label: "foo", | 294 | label: "foo", |
299 | source_range: [12; 14), | 295 | source_range: 12..14, |
300 | delete: [12; 14), | 296 | delete: 12..14, |
301 | insert: "foo", | 297 | insert: "foo", |
302 | kind: Module, | 298 | kind: Module, |
303 | }, | 299 | }, |
@@ -326,8 +322,8 @@ mod tests { | |||
326 | [ | 322 | [ |
327 | CompletionItem { | 323 | CompletionItem { |
328 | label: "Spam", | 324 | label: "Spam", |
329 | source_range: [23; 25), | 325 | source_range: 23..25, |
330 | delete: [23; 25), | 326 | delete: 23..25, |
331 | insert: "Spam", | 327 | insert: "Spam", |
332 | kind: Struct, | 328 | kind: Struct, |
333 | }, | 329 | }, |
@@ -356,8 +352,8 @@ mod tests { | |||
356 | [ | 352 | [ |
357 | CompletionItem { | 353 | CompletionItem { |
358 | label: "Bar(…)", | 354 | label: "Bar(…)", |
359 | source_range: [116; 116), | 355 | source_range: 116..116, |
360 | delete: [116; 116), | 356 | delete: 116..116, |
361 | insert: "Bar($0)", | 357 | insert: "Bar($0)", |
362 | kind: EnumVariant, | 358 | kind: EnumVariant, |
363 | lookup: "Bar", | 359 | lookup: "Bar", |
@@ -369,8 +365,8 @@ mod tests { | |||
369 | }, | 365 | }, |
370 | CompletionItem { | 366 | CompletionItem { |
371 | label: "Foo", | 367 | label: "Foo", |
372 | source_range: [116; 116), | 368 | source_range: 116..116, |
373 | delete: [116; 116), | 369 | delete: 116..116, |
374 | insert: "Foo", | 370 | insert: "Foo", |
375 | kind: EnumVariant, | 371 | kind: EnumVariant, |
376 | detail: "()", | 372 | detail: "()", |
@@ -406,8 +402,8 @@ mod tests { | |||
406 | [ | 402 | [ |
407 | CompletionItem { | 403 | CompletionItem { |
408 | label: "Bar(…)", | 404 | label: "Bar(…)", |
409 | source_range: [180; 180), | 405 | source_range: 180..180, |
410 | delete: [180; 180), | 406 | delete: 180..180, |
411 | insert: "Bar($0)", | 407 | insert: "Bar($0)", |
412 | kind: EnumVariant, | 408 | kind: EnumVariant, |
413 | lookup: "Bar", | 409 | lookup: "Bar", |
@@ -419,8 +415,8 @@ mod tests { | |||
419 | }, | 415 | }, |
420 | CompletionItem { | 416 | CompletionItem { |
421 | label: "Foo", | 417 | label: "Foo", |
422 | source_range: [180; 180), | 418 | source_range: 180..180, |
423 | delete: [180; 180), | 419 | delete: 180..180, |
424 | insert: "Foo", | 420 | insert: "Foo", |
425 | kind: EnumVariant, | 421 | kind: EnumVariant, |
426 | detail: "()", | 422 | detail: "()", |
@@ -430,8 +426,8 @@ mod tests { | |||
430 | }, | 426 | }, |
431 | CompletionItem { | 427 | CompletionItem { |
432 | label: "S(…)", | 428 | label: "S(…)", |
433 | source_range: [180; 180), | 429 | source_range: 180..180, |
434 | delete: [180; 180), | 430 | delete: 180..180, |
435 | insert: "S($0)", | 431 | insert: "S($0)", |
436 | kind: EnumVariant, | 432 | kind: EnumVariant, |
437 | lookup: "S", | 433 | lookup: "S", |
@@ -467,8 +463,8 @@ mod tests { | |||
467 | [ | 463 | [ |
468 | CompletionItem { | 464 | CompletionItem { |
469 | label: "m()", | 465 | label: "m()", |
470 | source_range: [100; 100), | 466 | source_range: 100..100, |
471 | delete: [100; 100), | 467 | delete: 100..100, |
472 | insert: "m()$0", | 468 | insert: "m()$0", |
473 | kind: Function, | 469 | kind: Function, |
474 | lookup: "m", | 470 | lookup: "m", |
@@ -483,6 +479,42 @@ mod tests { | |||
483 | } | 479 | } |
484 | 480 | ||
485 | #[test] | 481 | #[test] |
482 | fn completes_struct_associated_method_with_self() { | ||
483 | assert_debug_snapshot!( | ||
484 | do_reference_completion( | ||
485 | " | ||
486 | //- /lib.rs | ||
487 | /// A Struct | ||
488 | struct S; | ||
489 | |||
490 | impl S { | ||
491 | /// An associated method | ||
492 | fn m(&self) { } | ||
493 | } | ||
494 | |||
495 | fn foo() { let _ = S::<|> } | ||
496 | " | ||
497 | ), | ||
498 | @r###" | ||
499 | [ | ||
500 | CompletionItem { | ||
501 | label: "m()", | ||
502 | source_range: 105..105, | ||
503 | delete: 105..105, | ||
504 | insert: "m()$0", | ||
505 | kind: Method, | ||
506 | lookup: "m", | ||
507 | detail: "fn m(&self)", | ||
508 | documentation: Documentation( | ||
509 | "An associated method", | ||
510 | ), | ||
511 | }, | ||
512 | ] | ||
513 | "### | ||
514 | ); | ||
515 | } | ||
516 | |||
517 | #[test] | ||
486 | fn completes_struct_associated_const() { | 518 | fn completes_struct_associated_const() { |
487 | assert_debug_snapshot!( | 519 | assert_debug_snapshot!( |
488 | do_reference_completion( | 520 | do_reference_completion( |
@@ -503,8 +535,8 @@ mod tests { | |||
503 | [ | 535 | [ |
504 | CompletionItem { | 536 | CompletionItem { |
505 | label: "C", | 537 | label: "C", |
506 | source_range: [107; 107), | 538 | source_range: 107..107, |
507 | delete: [107; 107), | 539 | delete: 107..107, |
508 | insert: "C", | 540 | insert: "C", |
509 | kind: Const, | 541 | kind: Const, |
510 | detail: "const C: i32 = 42;", | 542 | detail: "const C: i32 = 42;", |
@@ -538,8 +570,8 @@ mod tests { | |||
538 | [ | 570 | [ |
539 | CompletionItem { | 571 | CompletionItem { |
540 | label: "T", | 572 | label: "T", |
541 | source_range: [101; 101), | 573 | source_range: 101..101, |
542 | delete: [101; 101), | 574 | delete: 101..101, |
543 | insert: "T", | 575 | insert: "T", |
544 | kind: TypeAlias, | 576 | kind: TypeAlias, |
545 | detail: "type T = i32;", | 577 | detail: "type T = i32;", |
@@ -578,24 +610,24 @@ mod tests { | |||
578 | [ | 610 | [ |
579 | CompletionItem { | 611 | CompletionItem { |
580 | label: "PUBLIC_CONST", | 612 | label: "PUBLIC_CONST", |
581 | source_range: [302; 302), | 613 | source_range: 302..302, |
582 | delete: [302; 302), | 614 | delete: 302..302, |
583 | insert: "PUBLIC_CONST", | 615 | insert: "PUBLIC_CONST", |
584 | kind: Const, | 616 | kind: Const, |
585 | detail: "pub(super) const PUBLIC_CONST: u32 = 1;", | 617 | detail: "pub(super) const PUBLIC_CONST: u32 = 1;", |
586 | }, | 618 | }, |
587 | CompletionItem { | 619 | CompletionItem { |
588 | label: "PublicType", | 620 | label: "PublicType", |
589 | source_range: [302; 302), | 621 | source_range: 302..302, |
590 | delete: [302; 302), | 622 | delete: 302..302, |
591 | insert: "PublicType", | 623 | insert: "PublicType", |
592 | kind: TypeAlias, | 624 | kind: TypeAlias, |
593 | detail: "pub(super) type PublicType = u32;", | 625 | detail: "pub(super) type PublicType = u32;", |
594 | }, | 626 | }, |
595 | CompletionItem { | 627 | CompletionItem { |
596 | label: "public_method()", | 628 | label: "public_method()", |
597 | source_range: [302; 302), | 629 | source_range: 302..302, |
598 | delete: [302; 302), | 630 | delete: 302..302, |
599 | insert: "public_method()$0", | 631 | insert: "public_method()$0", |
600 | kind: Function, | 632 | kind: Function, |
601 | lookup: "public_method", | 633 | lookup: "public_method", |
@@ -627,8 +659,8 @@ mod tests { | |||
627 | [ | 659 | [ |
628 | CompletionItem { | 660 | CompletionItem { |
629 | label: "m()", | 661 | label: "m()", |
630 | source_range: [100; 100), | 662 | source_range: 100..100, |
631 | delete: [100; 100), | 663 | delete: 100..100, |
632 | insert: "m()$0", | 664 | insert: "m()$0", |
633 | kind: Function, | 665 | kind: Function, |
634 | lookup: "m", | 666 | lookup: "m", |
@@ -663,8 +695,8 @@ mod tests { | |||
663 | [ | 695 | [ |
664 | CompletionItem { | 696 | CompletionItem { |
665 | label: "m()", | 697 | label: "m()", |
666 | source_range: [101; 101), | 698 | source_range: 101..101, |
667 | delete: [101; 101), | 699 | delete: 101..101, |
668 | insert: "m()$0", | 700 | insert: "m()$0", |
669 | kind: Function, | 701 | kind: Function, |
670 | lookup: "m", | 702 | lookup: "m", |
@@ -696,8 +728,8 @@ mod tests { | |||
696 | [ | 728 | [ |
697 | CompletionItem { | 729 | CompletionItem { |
698 | label: "bar", | 730 | label: "bar", |
699 | source_range: [9; 9), | 731 | source_range: 9..9, |
700 | delete: [9; 9), | 732 | delete: 9..9, |
701 | insert: "bar", | 733 | insert: "bar", |
702 | kind: Module, | 734 | kind: Module, |
703 | }, | 735 | }, |
@@ -724,8 +756,8 @@ mod tests { | |||
724 | [ | 756 | [ |
725 | CompletionItem { | 757 | CompletionItem { |
726 | label: "m()", | 758 | label: "m()", |
727 | source_range: [73; 73), | 759 | source_range: 73..73, |
728 | delete: [73; 73), | 760 | delete: 73..73, |
729 | insert: "m()$0", | 761 | insert: "m()$0", |
730 | kind: Function, | 762 | kind: Function, |
731 | lookup: "m", | 763 | lookup: "m", |
@@ -760,8 +792,8 @@ mod tests { | |||
760 | [ | 792 | [ |
761 | CompletionItem { | 793 | CompletionItem { |
762 | label: "m()", | 794 | label: "m()", |
763 | source_range: [99; 99), | 795 | source_range: 99..99, |
764 | delete: [99; 99), | 796 | delete: 99..99, |
765 | insert: "m()$0", | 797 | insert: "m()$0", |
766 | kind: Function, | 798 | kind: Function, |
767 | lookup: "m", | 799 | lookup: "m", |
@@ -796,8 +828,8 @@ mod tests { | |||
796 | [ | 828 | [ |
797 | CompletionItem { | 829 | CompletionItem { |
798 | label: "m()", | 830 | label: "m()", |
799 | source_range: [110; 110), | 831 | source_range: 110..110, |
800 | delete: [110; 110), | 832 | delete: 110..110, |
801 | insert: "m()$0", | 833 | insert: "m()$0", |
802 | kind: Function, | 834 | kind: Function, |
803 | lookup: "m", | 835 | lookup: "m", |
@@ -830,8 +862,8 @@ mod tests { | |||
830 | [ | 862 | [ |
831 | CompletionItem { | 863 | CompletionItem { |
832 | label: "bar()", | 864 | label: "bar()", |
833 | source_range: [185; 185), | 865 | source_range: 185..185, |
834 | delete: [185; 185), | 866 | delete: 185..185, |
835 | insert: "bar()$0", | 867 | insert: "bar()$0", |
836 | kind: Function, | 868 | kind: Function, |
837 | lookup: "bar", | 869 | lookup: "bar", |
@@ -839,8 +871,8 @@ mod tests { | |||
839 | }, | 871 | }, |
840 | CompletionItem { | 872 | CompletionItem { |
841 | label: "foo()", | 873 | label: "foo()", |
842 | source_range: [185; 185), | 874 | source_range: 185..185, |
843 | delete: [185; 185), | 875 | delete: 185..185, |
844 | insert: "foo()$0", | 876 | insert: "foo()$0", |
845 | kind: Function, | 877 | kind: Function, |
846 | lookup: "foo", | 878 | lookup: "foo", |
@@ -869,17 +901,17 @@ mod tests { | |||
869 | @r###" | 901 | @r###" |
870 | [ | 902 | [ |
871 | CompletionItem { | 903 | CompletionItem { |
872 | label: "foo!", | 904 | label: "foo!(…)", |
873 | source_range: [179; 179), | 905 | source_range: 179..179, |
874 | delete: [179; 179), | 906 | delete: 179..179, |
875 | insert: "foo!($0)", | 907 | insert: "foo!($0)", |
876 | kind: Macro, | 908 | kind: Macro, |
877 | detail: "#[macro_export]\nmacro_rules! foo", | 909 | detail: "#[macro_export]\nmacro_rules! foo", |
878 | }, | 910 | }, |
879 | CompletionItem { | 911 | CompletionItem { |
880 | label: "main()", | 912 | label: "main()", |
881 | source_range: [179; 179), | 913 | source_range: 179..179, |
882 | delete: [179; 179), | 914 | delete: 179..179, |
883 | insert: "main()$0", | 915 | insert: "main()$0", |
884 | kind: Function, | 916 | kind: Function, |
885 | lookup: "main", | 917 | lookup: "main", |
@@ -915,22 +947,22 @@ mod tests { | |||
915 | [ | 947 | [ |
916 | CompletionItem { | 948 | CompletionItem { |
917 | label: "RIGHT_CONST", | 949 | label: "RIGHT_CONST", |
918 | source_range: [57; 57), | 950 | source_range: 57..57, |
919 | delete: [57; 57), | 951 | delete: 57..57, |
920 | insert: "RIGHT_CONST", | 952 | insert: "RIGHT_CONST", |
921 | kind: Const, | 953 | kind: Const, |
922 | }, | 954 | }, |
923 | CompletionItem { | 955 | CompletionItem { |
924 | label: "RightType", | 956 | label: "RightType", |
925 | source_range: [57; 57), | 957 | source_range: 57..57, |
926 | delete: [57; 57), | 958 | delete: 57..57, |
927 | insert: "RightType", | 959 | insert: "RightType", |
928 | kind: Struct, | 960 | kind: Struct, |
929 | }, | 961 | }, |
930 | CompletionItem { | 962 | CompletionItem { |
931 | label: "right_fn()", | 963 | label: "right_fn()", |
932 | source_range: [57; 57), | 964 | source_range: 57..57, |
933 | delete: [57; 57), | 965 | delete: 57..57, |
934 | insert: "right_fn()$0", | 966 | insert: "right_fn()$0", |
935 | kind: Function, | 967 | kind: Function, |
936 | lookup: "right_fn", | 968 | lookup: "right_fn", |
@@ -954,8 +986,8 @@ mod tests { | |||
954 | [ | 986 | [ |
955 | CompletionItem { | 987 | CompletionItem { |
956 | label: "foo()", | 988 | label: "foo()", |
957 | source_range: [93; 94), | 989 | source_range: 93..94, |
958 | delete: [93; 94), | 990 | delete: 93..94, |
959 | insert: "foo()$0", | 991 | insert: "foo()$0", |
960 | kind: Function, | 992 | kind: Function, |
961 | lookup: "foo", | 993 | lookup: "foo", |
@@ -963,8 +995,8 @@ mod tests { | |||
963 | }, | 995 | }, |
964 | CompletionItem { | 996 | CompletionItem { |
965 | label: "main()", | 997 | label: "main()", |
966 | source_range: [93; 94), | 998 | source_range: 93..94, |
967 | delete: [93; 94), | 999 | delete: 93..94, |
968 | insert: "main()$0", | 1000 | insert: "main()$0", |
969 | kind: Function, | 1001 | kind: Function, |
970 | lookup: "main", | 1002 | lookup: "main", |
@@ -993,15 +1025,15 @@ mod tests { | |||
993 | [ | 1025 | [ |
994 | CompletionItem { | 1026 | CompletionItem { |
995 | label: "z", | 1027 | label: "z", |
996 | source_range: [57; 57), | 1028 | source_range: 57..57, |
997 | delete: [57; 57), | 1029 | delete: 57..57, |
998 | insert: "z", | 1030 | insert: "z", |
999 | kind: Module, | 1031 | kind: Module, |
1000 | }, | 1032 | }, |
1001 | CompletionItem { | 1033 | CompletionItem { |
1002 | label: "z()", | 1034 | label: "z()", |
1003 | source_range: [57; 57), | 1035 | source_range: 57..57, |
1004 | delete: [57; 57), | 1036 | delete: 57..57, |
1005 | insert: "z()$0", | 1037 | insert: "z()$0", |
1006 | kind: Function, | 1038 | kind: Function, |
1007 | lookup: "z", | 1039 | lookup: "z", |
@@ -1032,8 +1064,8 @@ mod tests { | |||
1032 | [ | 1064 | [ |
1033 | CompletionItem { | 1065 | CompletionItem { |
1034 | label: "new()", | 1066 | label: "new()", |
1035 | source_range: [292; 292), | 1067 | source_range: 292..292, |
1036 | delete: [292; 292), | 1068 | delete: 292..292, |
1037 | insert: "new()$0", | 1069 | insert: "new()$0", |
1038 | kind: Function, | 1070 | kind: Function, |
1039 | lookup: "new", | 1071 | lookup: "new", |
diff --git a/crates/ra_ide/src/completion/complete_record.rs b/crates/ra_ide/src/completion/complete_record.rs index 83a553155..b7ab654c5 100644 --- a/crates/ra_ide/src/completion/complete_record.rs +++ b/crates/ra_ide/src/completion/complete_record.rs | |||
@@ -44,8 +44,8 @@ mod tests { | |||
44 | [ | 44 | [ |
45 | CompletionItem { | 45 | CompletionItem { |
46 | label: "foo", | 46 | label: "foo", |
47 | source_range: [117; 118), | 47 | source_range: 117..118, |
48 | delete: [117; 118), | 48 | delete: 117..118, |
49 | insert: "foo", | 49 | insert: "foo", |
50 | kind: Field, | 50 | kind: Field, |
51 | detail: "u32", | 51 | detail: "u32", |
@@ -73,16 +73,16 @@ mod tests { | |||
73 | [ | 73 | [ |
74 | CompletionItem { | 74 | CompletionItem { |
75 | label: "bar", | 75 | label: "bar", |
76 | source_range: [161; 161), | 76 | source_range: 161..161, |
77 | delete: [161; 161), | 77 | delete: 161..161, |
78 | insert: "bar", | 78 | insert: "bar", |
79 | kind: Field, | 79 | kind: Field, |
80 | detail: "()", | 80 | detail: "()", |
81 | }, | 81 | }, |
82 | CompletionItem { | 82 | CompletionItem { |
83 | label: "foo", | 83 | label: "foo", |
84 | source_range: [161; 161), | 84 | source_range: 161..161, |
85 | delete: [161; 161), | 85 | delete: 161..161, |
86 | insert: "foo", | 86 | insert: "foo", |
87 | kind: Field, | 87 | kind: Field, |
88 | detail: "u32", | 88 | detail: "u32", |
@@ -109,8 +109,8 @@ mod tests { | |||
109 | [ | 109 | [ |
110 | CompletionItem { | 110 | CompletionItem { |
111 | label: "foo", | 111 | label: "foo", |
112 | source_range: [171; 172), | 112 | source_range: 171..172, |
113 | delete: [171; 172), | 113 | delete: 171..172, |
114 | insert: "foo", | 114 | insert: "foo", |
115 | kind: Field, | 115 | kind: Field, |
116 | detail: "u32", | 116 | detail: "u32", |
@@ -145,16 +145,16 @@ mod tests { | |||
145 | [ | 145 | [ |
146 | CompletionItem { | 146 | CompletionItem { |
147 | label: "bar", | 147 | label: "bar", |
148 | source_range: [372; 372), | 148 | source_range: 372..372, |
149 | delete: [372; 372), | 149 | delete: 372..372, |
150 | insert: "bar", | 150 | insert: "bar", |
151 | kind: Field, | 151 | kind: Field, |
152 | detail: "u32", | 152 | detail: "u32", |
153 | }, | 153 | }, |
154 | CompletionItem { | 154 | CompletionItem { |
155 | label: "baz", | 155 | label: "baz", |
156 | source_range: [372; 372), | 156 | source_range: 372..372, |
157 | delete: [372; 372), | 157 | delete: 372..372, |
158 | insert: "baz", | 158 | insert: "baz", |
159 | kind: Field, | 159 | kind: Field, |
160 | detail: "u32", | 160 | detail: "u32", |
@@ -190,8 +190,8 @@ mod tests { | |||
190 | [ | 190 | [ |
191 | CompletionItem { | 191 | CompletionItem { |
192 | label: "the_field", | 192 | label: "the_field", |
193 | source_range: [142; 145), | 193 | source_range: 142..145, |
194 | delete: [142; 145), | 194 | delete: 142..145, |
195 | insert: "the_field", | 195 | insert: "the_field", |
196 | kind: Field, | 196 | kind: Field, |
197 | detail: "u32", | 197 | detail: "u32", |
@@ -215,8 +215,8 @@ mod tests { | |||
215 | [ | 215 | [ |
216 | CompletionItem { | 216 | CompletionItem { |
217 | label: "the_field", | 217 | label: "the_field", |
218 | source_range: [83; 86), | 218 | source_range: 83..86, |
219 | delete: [83; 86), | 219 | delete: 83..86, |
220 | insert: "the_field", | 220 | insert: "the_field", |
221 | kind: Field, | 221 | kind: Field, |
222 | detail: "u32", | 222 | detail: "u32", |
@@ -241,8 +241,8 @@ mod tests { | |||
241 | [ | 241 | [ |
242 | CompletionItem { | 242 | CompletionItem { |
243 | label: "a", | 243 | label: "a", |
244 | source_range: [119; 119), | 244 | source_range: 119..119, |
245 | delete: [119; 119), | 245 | delete: 119..119, |
246 | insert: "a", | 246 | insert: "a", |
247 | kind: Field, | 247 | kind: Field, |
248 | detail: "u32", | 248 | detail: "u32", |
@@ -267,8 +267,8 @@ mod tests { | |||
267 | [ | 267 | [ |
268 | CompletionItem { | 268 | CompletionItem { |
269 | label: "b", | 269 | label: "b", |
270 | source_range: [119; 119), | 270 | source_range: 119..119, |
271 | delete: [119; 119), | 271 | delete: 119..119, |
272 | insert: "b", | 272 | insert: "b", |
273 | kind: Field, | 273 | kind: Field, |
274 | detail: "u32", | 274 | detail: "u32", |
@@ -292,8 +292,8 @@ mod tests { | |||
292 | [ | 292 | [ |
293 | CompletionItem { | 293 | CompletionItem { |
294 | label: "a", | 294 | label: "a", |
295 | source_range: [93; 93), | 295 | source_range: 93..93, |
296 | delete: [93; 93), | 296 | delete: 93..93, |
297 | insert: "a", | 297 | insert: "a", |
298 | kind: Field, | 298 | kind: Field, |
299 | detail: "u32", | 299 | detail: "u32", |
@@ -317,8 +317,8 @@ mod tests { | |||
317 | [ | 317 | [ |
318 | CompletionItem { | 318 | CompletionItem { |
319 | label: "the_field", | 319 | label: "the_field", |
320 | source_range: [137; 140), | 320 | source_range: 137..140, |
321 | delete: [137; 140), | 321 | delete: 137..140, |
322 | insert: "the_field", | 322 | insert: "the_field", |
323 | kind: Field, | 323 | kind: Field, |
324 | detail: "u32", | 324 | detail: "u32", |
@@ -352,16 +352,16 @@ mod tests { | |||
352 | [ | 352 | [ |
353 | CompletionItem { | 353 | CompletionItem { |
354 | label: "bar", | 354 | label: "bar", |
355 | source_range: [302; 302), | 355 | source_range: 302..302, |
356 | delete: [302; 302), | 356 | delete: 302..302, |
357 | insert: "bar", | 357 | insert: "bar", |
358 | kind: Field, | 358 | kind: Field, |
359 | detail: "u32", | 359 | detail: "u32", |
360 | }, | 360 | }, |
361 | CompletionItem { | 361 | CompletionItem { |
362 | label: "baz", | 362 | label: "baz", |
363 | source_range: [302; 302), | 363 | source_range: 302..302, |
364 | delete: [302; 302), | 364 | delete: 302..302, |
365 | insert: "baz", | 365 | insert: "baz", |
366 | kind: Field, | 366 | kind: Field, |
367 | detail: "u32", | 367 | detail: "u32", |
@@ -393,8 +393,8 @@ mod tests { | |||
393 | [ | 393 | [ |
394 | CompletionItem { | 394 | CompletionItem { |
395 | label: "foo2", | 395 | label: "foo2", |
396 | source_range: [221; 221), | 396 | source_range: 221..221, |
397 | delete: [221; 221), | 397 | delete: 221..221, |
398 | insert: "foo2", | 398 | insert: "foo2", |
399 | kind: Field, | 399 | kind: Field, |
400 | detail: "u32", | 400 | detail: "u32", |
diff --git a/crates/ra_ide/src/completion/complete_snippet.rs b/crates/ra_ide/src/completion/complete_snippet.rs index 4bccfbfed..a3f5d1b6a 100644 --- a/crates/ra_ide/src/completion/complete_snippet.rs +++ b/crates/ra_ide/src/completion/complete_snippet.rs | |||
@@ -67,15 +67,15 @@ mod tests { | |||
67 | [ | 67 | [ |
68 | CompletionItem { | 68 | CompletionItem { |
69 | label: "pd", | 69 | label: "pd", |
70 | source_range: [17; 17), | 70 | source_range: 17..17, |
71 | delete: [17; 17), | 71 | delete: 17..17, |
72 | insert: "eprintln!(\"$0 = {:?}\", $0);", | 72 | insert: "eprintln!(\"$0 = {:?}\", $0);", |
73 | kind: Snippet, | 73 | kind: Snippet, |
74 | }, | 74 | }, |
75 | CompletionItem { | 75 | CompletionItem { |
76 | label: "ppd", | 76 | label: "ppd", |
77 | source_range: [17; 17), | 77 | source_range: 17..17, |
78 | delete: [17; 17), | 78 | delete: 17..17, |
79 | insert: "eprintln!(\"$0 = {:#?}\", $0);", | 79 | insert: "eprintln!(\"$0 = {:#?}\", $0);", |
80 | kind: Snippet, | 80 | kind: Snippet, |
81 | }, | 81 | }, |
@@ -111,23 +111,23 @@ mod tests { | |||
111 | [ | 111 | [ |
112 | CompletionItem { | 112 | CompletionItem { |
113 | label: "Test function", | 113 | label: "Test function", |
114 | source_range: [78; 78), | 114 | source_range: 78..78, |
115 | delete: [78; 78), | 115 | delete: 78..78, |
116 | insert: "#[test]\nfn ${1:feature}() {\n $0\n}", | 116 | insert: "#[test]\nfn ${1:feature}() {\n $0\n}", |
117 | kind: Snippet, | 117 | kind: Snippet, |
118 | lookup: "tfn", | 118 | lookup: "tfn", |
119 | }, | 119 | }, |
120 | CompletionItem { | 120 | CompletionItem { |
121 | label: "macro_rules", | 121 | label: "macro_rules", |
122 | source_range: [78; 78), | 122 | source_range: 78..78, |
123 | delete: [78; 78), | 123 | delete: 78..78, |
124 | insert: "macro_rules! $1 {\n\t($2) => {\n\t\t$0\n\t};\n}", | 124 | insert: "macro_rules! $1 {\n\t($2) => {\n\t\t$0\n\t};\n}", |
125 | kind: Snippet, | 125 | kind: Snippet, |
126 | }, | 126 | }, |
127 | CompletionItem { | 127 | CompletionItem { |
128 | label: "pub(crate)", | 128 | label: "pub(crate)", |
129 | source_range: [78; 78), | 129 | source_range: 78..78, |
130 | delete: [78; 78), | 130 | delete: 78..78, |
131 | insert: "pub(crate) $0", | 131 | insert: "pub(crate) $0", |
132 | kind: Snippet, | 132 | kind: Snippet, |
133 | }, | 133 | }, |
diff --git a/crates/ra_ide/src/completion/complete_trait_impl.rs b/crates/ra_ide/src/completion/complete_trait_impl.rs index c39943252..ee32d1ff6 100644 --- a/crates/ra_ide/src/completion/complete_trait_impl.rs +++ b/crates/ra_ide/src/completion/complete_trait_impl.rs | |||
@@ -141,7 +141,7 @@ fn add_function_impl( | |||
141 | } else { | 141 | } else { |
142 | CompletionItemKind::Function | 142 | CompletionItemKind::Function |
143 | }; | 143 | }; |
144 | let range = TextRange::from_to(fn_def_node.text_range().start(), ctx.source_range().end()); | 144 | let range = TextRange::new(fn_def_node.text_range().start(), ctx.source_range().end()); |
145 | 145 | ||
146 | match ctx.config.snippet_cap { | 146 | match ctx.config.snippet_cap { |
147 | Some(cap) => { | 147 | Some(cap) => { |
@@ -167,7 +167,7 @@ fn add_type_alias_impl( | |||
167 | 167 | ||
168 | let snippet = format!("type {} = ", alias_name); | 168 | let snippet = format!("type {} = ", alias_name); |
169 | 169 | ||
170 | let range = TextRange::from_to(type_def_node.text_range().start(), ctx.source_range().end()); | 170 | let range = TextRange::new(type_def_node.text_range().start(), ctx.source_range().end()); |
171 | 171 | ||
172 | CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) | 172 | CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) |
173 | .text_edit(TextEdit::replace(range, snippet)) | 173 | .text_edit(TextEdit::replace(range, snippet)) |
@@ -188,8 +188,7 @@ fn add_const_impl( | |||
188 | if let Some(const_name) = const_name { | 188 | if let Some(const_name) = const_name { |
189 | let snippet = make_const_compl_syntax(&const_.source(ctx.db).value); | 189 | let snippet = make_const_compl_syntax(&const_.source(ctx.db).value); |
190 | 190 | ||
191 | let range = | 191 | let range = TextRange::new(const_def_node.text_range().start(), ctx.source_range().end()); |
192 | TextRange::from_to(const_def_node.text_range().start(), ctx.source_range().end()); | ||
193 | 192 | ||
194 | CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) | 193 | CompletionItem::new(CompletionKind::Magic, ctx.source_range(), snippet.clone()) |
195 | .text_edit(TextEdit::replace(range, snippet)) | 194 | .text_edit(TextEdit::replace(range, snippet)) |
@@ -216,7 +215,7 @@ fn make_const_compl_syntax(const_: &ast::ConstDef) -> String { | |||
216 | .map_or(const_end, |f| f.text_range().start()); | 215 | .map_or(const_end, |f| f.text_range().start()); |
217 | 216 | ||
218 | let len = end - start; | 217 | let len = end - start; |
219 | let range = TextRange::from_to(0.into(), len); | 218 | let range = TextRange::new(0.into(), len); |
220 | 219 | ||
221 | let syntax = const_.syntax().text().slice(range).to_string(); | 220 | let syntax = const_.syntax().text().slice(range).to_string(); |
222 | 221 | ||
@@ -254,24 +253,24 @@ mod tests { | |||
254 | [ | 253 | [ |
255 | CompletionItem { | 254 | CompletionItem { |
256 | label: "const TEST_CONST: u16 = ", | 255 | label: "const TEST_CONST: u16 = ", |
257 | source_range: [209; 210), | 256 | source_range: 209..210, |
258 | delete: [209; 210), | 257 | delete: 209..210, |
259 | insert: "const TEST_CONST: u16 = ", | 258 | insert: "const TEST_CONST: u16 = ", |
260 | kind: Const, | 259 | kind: Const, |
261 | lookup: "TEST_CONST", | 260 | lookup: "TEST_CONST", |
262 | }, | 261 | }, |
263 | CompletionItem { | 262 | CompletionItem { |
264 | label: "fn test()", | 263 | label: "fn test()", |
265 | source_range: [209; 210), | 264 | source_range: 209..210, |
266 | delete: [209; 210), | 265 | delete: 209..210, |
267 | insert: "fn test() {\n $0\n}", | 266 | insert: "fn test() {\n $0\n}", |
268 | kind: Function, | 267 | kind: Function, |
269 | lookup: "test", | 268 | lookup: "test", |
270 | }, | 269 | }, |
271 | CompletionItem { | 270 | CompletionItem { |
272 | label: "type TestType = ", | 271 | label: "type TestType = ", |
273 | source_range: [209; 210), | 272 | source_range: 209..210, |
274 | delete: [209; 210), | 273 | delete: 209..210, |
275 | insert: "type TestType = ", | 274 | insert: "type TestType = ", |
276 | kind: TypeAlias, | 275 | kind: TypeAlias, |
277 | lookup: "TestType", | 276 | lookup: "TestType", |
@@ -320,8 +319,8 @@ mod tests { | |||
320 | [ | 319 | [ |
321 | CompletionItem { | 320 | CompletionItem { |
322 | label: "fn test()", | 321 | label: "fn test()", |
323 | source_range: [139; 140), | 322 | source_range: 139..140, |
324 | delete: [139; 140), | 323 | delete: 139..140, |
325 | insert: "fn test() {\n $0\n}", | 324 | insert: "fn test() {\n $0\n}", |
326 | kind: Function, | 325 | kind: Function, |
327 | lookup: "test", | 326 | lookup: "test", |
@@ -349,8 +348,8 @@ mod tests { | |||
349 | [ | 348 | [ |
350 | CompletionItem { | 349 | CompletionItem { |
351 | label: "fn foo()", | 350 | label: "fn foo()", |
352 | source_range: [141; 142), | 351 | source_range: 141..142, |
353 | delete: [138; 142), | 352 | delete: 138..142, |
354 | insert: "fn foo() {\n $0\n}", | 353 | insert: "fn foo() {\n $0\n}", |
355 | kind: Function, | 354 | kind: Function, |
356 | lookup: "foo", | 355 | lookup: "foo", |
@@ -381,8 +380,8 @@ mod tests { | |||
381 | [ | 380 | [ |
382 | CompletionItem { | 381 | CompletionItem { |
383 | label: "fn foo_bar()", | 382 | label: "fn foo_bar()", |
384 | source_range: [200; 201), | 383 | source_range: 200..201, |
385 | delete: [197; 201), | 384 | delete: 197..201, |
386 | insert: "fn foo_bar() {\n $0\n}", | 385 | insert: "fn foo_bar() {\n $0\n}", |
387 | kind: Function, | 386 | kind: Function, |
388 | lookup: "foo_bar", | 387 | lookup: "foo_bar", |
@@ -432,8 +431,8 @@ mod tests { | |||
432 | [ | 431 | [ |
433 | CompletionItem { | 432 | CompletionItem { |
434 | label: "fn foo()", | 433 | label: "fn foo()", |
435 | source_range: [144; 145), | 434 | source_range: 144..145, |
436 | delete: [141; 145), | 435 | delete: 141..145, |
437 | insert: "fn foo<T>() {\n $0\n}", | 436 | insert: "fn foo<T>() {\n $0\n}", |
438 | kind: Function, | 437 | kind: Function, |
439 | lookup: "foo", | 438 | lookup: "foo", |
@@ -461,8 +460,8 @@ mod tests { | |||
461 | [ | 460 | [ |
462 | CompletionItem { | 461 | CompletionItem { |
463 | label: "fn foo()", | 462 | label: "fn foo()", |
464 | source_range: [166; 167), | 463 | source_range: 166..167, |
465 | delete: [163; 167), | 464 | delete: 163..167, |
466 | insert: "fn foo<T>()\nwhere T: Into<String> {\n $0\n}", | 465 | insert: "fn foo<T>()\nwhere T: Into<String> {\n $0\n}", |
467 | kind: Function, | 466 | kind: Function, |
468 | lookup: "foo", | 467 | lookup: "foo", |
@@ -488,8 +487,8 @@ mod tests { | |||
488 | [ | 487 | [ |
489 | CompletionItem { | 488 | CompletionItem { |
490 | label: "type SomeType = ", | 489 | label: "type SomeType = ", |
491 | source_range: [124; 125), | 490 | source_range: 124..125, |
492 | delete: [119; 125), | 491 | delete: 119..125, |
493 | insert: "type SomeType = ", | 492 | insert: "type SomeType = ", |
494 | kind: TypeAlias, | 493 | kind: TypeAlias, |
495 | lookup: "SomeType", | 494 | lookup: "SomeType", |
@@ -515,8 +514,8 @@ mod tests { | |||
515 | [ | 514 | [ |
516 | CompletionItem { | 515 | CompletionItem { |
517 | label: "const SOME_CONST: u16 = ", | 516 | label: "const SOME_CONST: u16 = ", |
518 | source_range: [133; 134), | 517 | source_range: 133..134, |
519 | delete: [127; 134), | 518 | delete: 127..134, |
520 | insert: "const SOME_CONST: u16 = ", | 519 | insert: "const SOME_CONST: u16 = ", |
521 | kind: Const, | 520 | kind: Const, |
522 | lookup: "SOME_CONST", | 521 | lookup: "SOME_CONST", |
@@ -542,8 +541,8 @@ mod tests { | |||
542 | [ | 541 | [ |
543 | CompletionItem { | 542 | CompletionItem { |
544 | label: "const SOME_CONST: u16 = ", | 543 | label: "const SOME_CONST: u16 = ", |
545 | source_range: [138; 139), | 544 | source_range: 138..139, |
546 | delete: [132; 139), | 545 | delete: 132..139, |
547 | insert: "const SOME_CONST: u16 = ", | 546 | insert: "const SOME_CONST: u16 = ", |
548 | kind: Const, | 547 | kind: Const, |
549 | lookup: "SOME_CONST", | 548 | lookup: "SOME_CONST", |
diff --git a/crates/ra_ide/src/completion/complete_unqualified_path.rs b/crates/ra_ide/src/completion/complete_unqualified_path.rs index ad00154a3..56cd086c6 100644 --- a/crates/ra_ide/src/completion/complete_unqualified_path.rs +++ b/crates/ra_ide/src/completion/complete_unqualified_path.rs | |||
@@ -38,7 +38,15 @@ fn complete_enum_variants(acc: &mut Completions, ctx: &CompletionContext) { | |||
38 | if let Some(ty) = ctx.expected_type_of(&ctx.token.parent()) { | 38 | if let Some(ty) = ctx.expected_type_of(&ctx.token.parent()) { |
39 | if let Some(Adt::Enum(enum_data)) = ty.as_adt() { | 39 | if let Some(Adt::Enum(enum_data)) = ty.as_adt() { |
40 | let variants = enum_data.variants(ctx.db); | 40 | let variants = enum_data.variants(ctx.db); |
41 | let module = enum_data.module(ctx.db); | 41 | |
42 | let module = if let Some(module) = ctx.scope().module() { | ||
43 | // Compute path from the completion site if available. | ||
44 | module | ||
45 | } else { | ||
46 | // Otherwise fall back to the enum's definition site. | ||
47 | enum_data.module(ctx.db) | ||
48 | }; | ||
49 | |||
42 | for variant in variants { | 50 | for variant in variants { |
43 | if let Some(path) = module.find_use_path(ctx.db, ModuleDef::from(variant)) { | 51 | if let Some(path) = module.find_use_path(ctx.db, ModuleDef::from(variant)) { |
44 | // Variants with trivial paths are already added by the existing completion logic, | 52 | // Variants with trivial paths are already added by the existing completion logic, |
@@ -77,8 +85,8 @@ mod tests { | |||
77 | [ | 85 | [ |
78 | CompletionItem { | 86 | CompletionItem { |
79 | label: "collections", | 87 | label: "collections", |
80 | source_range: [21; 24), | 88 | source_range: 21..24, |
81 | delete: [21; 24), | 89 | delete: 21..24, |
82 | insert: "collections", | 90 | insert: "collections", |
83 | }, | 91 | }, |
84 | ] | 92 | ] |
@@ -149,8 +157,8 @@ mod tests { | |||
149 | [ | 157 | [ |
150 | CompletionItem { | 158 | CompletionItem { |
151 | label: "Enum", | 159 | label: "Enum", |
152 | source_range: [231; 233), | 160 | source_range: 231..233, |
153 | delete: [231; 233), | 161 | delete: 231..233, |
154 | insert: "Enum", | 162 | insert: "Enum", |
155 | kind: Enum, | 163 | kind: Enum, |
156 | }, | 164 | }, |
@@ -175,8 +183,8 @@ mod tests { | |||
175 | [ | 183 | [ |
176 | CompletionItem { | 184 | CompletionItem { |
177 | label: "quux(…)", | 185 | label: "quux(…)", |
178 | source_range: [91; 91), | 186 | source_range: 91..91, |
179 | delete: [91; 91), | 187 | delete: 91..91, |
180 | insert: "quux(${1:x})$0", | 188 | insert: "quux(${1:x})$0", |
181 | kind: Function, | 189 | kind: Function, |
182 | lookup: "quux", | 190 | lookup: "quux", |
@@ -185,16 +193,16 @@ mod tests { | |||
185 | }, | 193 | }, |
186 | CompletionItem { | 194 | CompletionItem { |
187 | label: "x", | 195 | label: "x", |
188 | source_range: [91; 91), | 196 | source_range: 91..91, |
189 | delete: [91; 91), | 197 | delete: 91..91, |
190 | insert: "x", | 198 | insert: "x", |
191 | kind: Binding, | 199 | kind: Binding, |
192 | detail: "i32", | 200 | detail: "i32", |
193 | }, | 201 | }, |
194 | CompletionItem { | 202 | CompletionItem { |
195 | label: "y", | 203 | label: "y", |
196 | source_range: [91; 91), | 204 | source_range: 91..91, |
197 | delete: [91; 91), | 205 | delete: 91..91, |
198 | insert: "y", | 206 | insert: "y", |
199 | kind: Binding, | 207 | kind: Binding, |
200 | detail: "i32", | 208 | detail: "i32", |
@@ -224,23 +232,23 @@ mod tests { | |||
224 | [ | 232 | [ |
225 | CompletionItem { | 233 | CompletionItem { |
226 | label: "a", | 234 | label: "a", |
227 | source_range: [242; 242), | 235 | source_range: 242..242, |
228 | delete: [242; 242), | 236 | delete: 242..242, |
229 | insert: "a", | 237 | insert: "a", |
230 | kind: Binding, | 238 | kind: Binding, |
231 | }, | 239 | }, |
232 | CompletionItem { | 240 | CompletionItem { |
233 | label: "b", | 241 | label: "b", |
234 | source_range: [242; 242), | 242 | source_range: 242..242, |
235 | delete: [242; 242), | 243 | delete: 242..242, |
236 | insert: "b", | 244 | insert: "b", |
237 | kind: Binding, | 245 | kind: Binding, |
238 | detail: "i32", | 246 | detail: "i32", |
239 | }, | 247 | }, |
240 | CompletionItem { | 248 | CompletionItem { |
241 | label: "quux()", | 249 | label: "quux()", |
242 | source_range: [242; 242), | 250 | source_range: 242..242, |
243 | delete: [242; 242), | 251 | delete: 242..242, |
244 | insert: "quux()$0", | 252 | insert: "quux()$0", |
245 | kind: Function, | 253 | kind: Function, |
246 | lookup: "quux", | 254 | lookup: "quux", |
@@ -267,8 +275,8 @@ mod tests { | |||
267 | [ | 275 | [ |
268 | CompletionItem { | 276 | CompletionItem { |
269 | label: "quux()", | 277 | label: "quux()", |
270 | source_range: [95; 95), | 278 | source_range: 95..95, |
271 | delete: [95; 95), | 279 | delete: 95..95, |
272 | insert: "quux()$0", | 280 | insert: "quux()$0", |
273 | kind: Function, | 281 | kind: Function, |
274 | lookup: "quux", | 282 | lookup: "quux", |
@@ -276,8 +284,8 @@ mod tests { | |||
276 | }, | 284 | }, |
277 | CompletionItem { | 285 | CompletionItem { |
278 | label: "x", | 286 | label: "x", |
279 | source_range: [95; 95), | 287 | source_range: 95..95, |
280 | delete: [95; 95), | 288 | delete: 95..95, |
281 | insert: "x", | 289 | insert: "x", |
282 | kind: Binding, | 290 | kind: Binding, |
283 | }, | 291 | }, |
@@ -300,15 +308,15 @@ mod tests { | |||
300 | [ | 308 | [ |
301 | CompletionItem { | 309 | CompletionItem { |
302 | label: "T", | 310 | label: "T", |
303 | source_range: [52; 52), | 311 | source_range: 52..52, |
304 | delete: [52; 52), | 312 | delete: 52..52, |
305 | insert: "T", | 313 | insert: "T", |
306 | kind: TypeParam, | 314 | kind: TypeParam, |
307 | }, | 315 | }, |
308 | CompletionItem { | 316 | CompletionItem { |
309 | label: "quux()", | 317 | label: "quux()", |
310 | source_range: [52; 52), | 318 | source_range: 52..52, |
311 | delete: [52; 52), | 319 | delete: 52..52, |
312 | insert: "quux()$0", | 320 | insert: "quux()$0", |
313 | kind: Function, | 321 | kind: Function, |
314 | lookup: "quux", | 322 | lookup: "quux", |
@@ -333,22 +341,22 @@ mod tests { | |||
333 | [ | 341 | [ |
334 | CompletionItem { | 342 | CompletionItem { |
335 | label: "Self", | 343 | label: "Self", |
336 | source_range: [54; 54), | 344 | source_range: 54..54, |
337 | delete: [54; 54), | 345 | delete: 54..54, |
338 | insert: "Self", | 346 | insert: "Self", |
339 | kind: TypeParam, | 347 | kind: TypeParam, |
340 | }, | 348 | }, |
341 | CompletionItem { | 349 | CompletionItem { |
342 | label: "T", | 350 | label: "T", |
343 | source_range: [54; 54), | 351 | source_range: 54..54, |
344 | delete: [54; 54), | 352 | delete: 54..54, |
345 | insert: "T", | 353 | insert: "T", |
346 | kind: TypeParam, | 354 | kind: TypeParam, |
347 | }, | 355 | }, |
348 | CompletionItem { | 356 | CompletionItem { |
349 | label: "X<…>", | 357 | label: "X<…>", |
350 | source_range: [54; 54), | 358 | source_range: 54..54, |
351 | delete: [54; 54), | 359 | delete: 54..54, |
352 | insert: "X<$0>", | 360 | insert: "X<$0>", |
353 | kind: Struct, | 361 | kind: Struct, |
354 | lookup: "X", | 362 | lookup: "X", |
@@ -372,15 +380,15 @@ mod tests { | |||
372 | [ | 380 | [ |
373 | CompletionItem { | 381 | CompletionItem { |
374 | label: "Self", | 382 | label: "Self", |
375 | source_range: [48; 48), | 383 | source_range: 48..48, |
376 | delete: [48; 48), | 384 | delete: 48..48, |
377 | insert: "Self", | 385 | insert: "Self", |
378 | kind: TypeParam, | 386 | kind: TypeParam, |
379 | }, | 387 | }, |
380 | CompletionItem { | 388 | CompletionItem { |
381 | label: "X", | 389 | label: "X", |
382 | source_range: [48; 48), | 390 | source_range: 48..48, |
383 | delete: [48; 48), | 391 | delete: 48..48, |
384 | insert: "X", | 392 | insert: "X", |
385 | kind: Enum, | 393 | kind: Enum, |
386 | }, | 394 | }, |
@@ -405,22 +413,22 @@ mod tests { | |||
405 | [ | 413 | [ |
406 | CompletionItem { | 414 | CompletionItem { |
407 | label: "Baz", | 415 | label: "Baz", |
408 | source_range: [105; 105), | 416 | source_range: 105..105, |
409 | delete: [105; 105), | 417 | delete: 105..105, |
410 | insert: "Baz", | 418 | insert: "Baz", |
411 | kind: Enum, | 419 | kind: Enum, |
412 | }, | 420 | }, |
413 | CompletionItem { | 421 | CompletionItem { |
414 | label: "Foo", | 422 | label: "Foo", |
415 | source_range: [105; 105), | 423 | source_range: 105..105, |
416 | delete: [105; 105), | 424 | delete: 105..105, |
417 | insert: "Foo", | 425 | insert: "Foo", |
418 | kind: Struct, | 426 | kind: Struct, |
419 | }, | 427 | }, |
420 | CompletionItem { | 428 | CompletionItem { |
421 | label: "quux()", | 429 | label: "quux()", |
422 | source_range: [105; 105), | 430 | source_range: 105..105, |
423 | delete: [105; 105), | 431 | delete: 105..105, |
424 | insert: "quux()$0", | 432 | insert: "quux()$0", |
425 | kind: Function, | 433 | kind: Function, |
426 | lookup: "quux", | 434 | lookup: "quux", |
@@ -447,8 +455,8 @@ mod tests { | |||
447 | [ | 455 | [ |
448 | CompletionItem { | 456 | CompletionItem { |
449 | label: "other_crate", | 457 | label: "other_crate", |
450 | source_range: [4; 4), | 458 | source_range: 4..4, |
451 | delete: [4; 4), | 459 | delete: 4..4, |
452 | insert: "other_crate", | 460 | insert: "other_crate", |
453 | kind: Module, | 461 | kind: Module, |
454 | }, | 462 | }, |
@@ -473,15 +481,15 @@ mod tests { | |||
473 | [ | 481 | [ |
474 | CompletionItem { | 482 | CompletionItem { |
475 | label: "Bar", | 483 | label: "Bar", |
476 | source_range: [117; 117), | 484 | source_range: 117..117, |
477 | delete: [117; 117), | 485 | delete: 117..117, |
478 | insert: "Bar", | 486 | insert: "Bar", |
479 | kind: Struct, | 487 | kind: Struct, |
480 | }, | 488 | }, |
481 | CompletionItem { | 489 | CompletionItem { |
482 | label: "quux()", | 490 | label: "quux()", |
483 | source_range: [117; 117), | 491 | source_range: 117..117, |
484 | delete: [117; 117), | 492 | delete: 117..117, |
485 | insert: "quux()$0", | 493 | insert: "quux()$0", |
486 | kind: Function, | 494 | kind: Function, |
487 | lookup: "quux", | 495 | lookup: "quux", |
@@ -505,15 +513,15 @@ mod tests { | |||
505 | [ | 513 | [ |
506 | CompletionItem { | 514 | CompletionItem { |
507 | label: "Foo", | 515 | label: "Foo", |
508 | source_range: [55; 55), | 516 | source_range: 55..55, |
509 | delete: [55; 55), | 517 | delete: 55..55, |
510 | insert: "Foo", | 518 | insert: "Foo", |
511 | kind: Struct, | 519 | kind: Struct, |
512 | }, | 520 | }, |
513 | CompletionItem { | 521 | CompletionItem { |
514 | label: "x()", | 522 | label: "x()", |
515 | source_range: [55; 55), | 523 | source_range: 55..55, |
516 | delete: [55; 55), | 524 | delete: 55..55, |
517 | insert: "x()$0", | 525 | insert: "x()$0", |
518 | kind: Function, | 526 | kind: Function, |
519 | lookup: "x", | 527 | lookup: "x", |
@@ -542,16 +550,16 @@ mod tests { | |||
542 | [ | 550 | [ |
543 | CompletionItem { | 551 | CompletionItem { |
544 | label: "bar", | 552 | label: "bar", |
545 | source_range: [146; 146), | 553 | source_range: 146..146, |
546 | delete: [146; 146), | 554 | delete: 146..146, |
547 | insert: "bar", | 555 | insert: "bar", |
548 | kind: Binding, | 556 | kind: Binding, |
549 | detail: "i32", | 557 | detail: "i32", |
550 | }, | 558 | }, |
551 | CompletionItem { | 559 | CompletionItem { |
552 | label: "foo()", | 560 | label: "foo()", |
553 | source_range: [146; 146), | 561 | source_range: 146..146, |
554 | delete: [146; 146), | 562 | delete: 146..146, |
555 | insert: "foo()$0", | 563 | insert: "foo()$0", |
556 | kind: Function, | 564 | kind: Function, |
557 | lookup: "foo", | 565 | lookup: "foo", |
@@ -570,15 +578,15 @@ mod tests { | |||
570 | [ | 578 | [ |
571 | CompletionItem { | 579 | CompletionItem { |
572 | label: "Self", | 580 | label: "Self", |
573 | source_range: [25; 25), | 581 | source_range: 25..25, |
574 | delete: [25; 25), | 582 | delete: 25..25, |
575 | insert: "Self", | 583 | insert: "Self", |
576 | kind: TypeParam, | 584 | kind: TypeParam, |
577 | }, | 585 | }, |
578 | CompletionItem { | 586 | CompletionItem { |
579 | label: "self", | 587 | label: "self", |
580 | source_range: [25; 25), | 588 | source_range: 25..25, |
581 | delete: [25; 25), | 589 | delete: 25..25, |
582 | insert: "self", | 590 | insert: "self", |
583 | kind: Binding, | 591 | kind: Binding, |
584 | detail: "&{unknown}", | 592 | detail: "&{unknown}", |
@@ -609,15 +617,15 @@ mod tests { | |||
609 | [ | 617 | [ |
610 | CompletionItem { | 618 | CompletionItem { |
611 | label: "Option", | 619 | label: "Option", |
612 | source_range: [18; 18), | 620 | source_range: 18..18, |
613 | delete: [18; 18), | 621 | delete: 18..18, |
614 | insert: "Option", | 622 | insert: "Option", |
615 | kind: Struct, | 623 | kind: Struct, |
616 | }, | 624 | }, |
617 | CompletionItem { | 625 | CompletionItem { |
618 | label: "foo()", | 626 | label: "foo()", |
619 | source_range: [18; 18), | 627 | source_range: 18..18, |
620 | delete: [18; 18), | 628 | delete: 18..18, |
621 | insert: "foo()$0", | 629 | insert: "foo()$0", |
622 | kind: Function, | 630 | kind: Function, |
623 | lookup: "foo", | 631 | lookup: "foo", |
@@ -625,8 +633,8 @@ mod tests { | |||
625 | }, | 633 | }, |
626 | CompletionItem { | 634 | CompletionItem { |
627 | label: "std", | 635 | label: "std", |
628 | source_range: [18; 18), | 636 | source_range: 18..18, |
629 | delete: [18; 18), | 637 | delete: 18..18, |
630 | insert: "std", | 638 | insert: "std", |
631 | kind: Module, | 639 | kind: Module, |
632 | }, | 640 | }, |
@@ -664,22 +672,22 @@ mod tests { | |||
664 | [ | 672 | [ |
665 | CompletionItem { | 673 | CompletionItem { |
666 | label: "String", | 674 | label: "String", |
667 | source_range: [18; 18), | 675 | source_range: 18..18, |
668 | delete: [18; 18), | 676 | delete: 18..18, |
669 | insert: "String", | 677 | insert: "String", |
670 | kind: Struct, | 678 | kind: Struct, |
671 | }, | 679 | }, |
672 | CompletionItem { | 680 | CompletionItem { |
673 | label: "core", | 681 | label: "core", |
674 | source_range: [18; 18), | 682 | source_range: 18..18, |
675 | delete: [18; 18), | 683 | delete: 18..18, |
676 | insert: "core", | 684 | insert: "core", |
677 | kind: Module, | 685 | kind: Module, |
678 | }, | 686 | }, |
679 | CompletionItem { | 687 | CompletionItem { |
680 | label: "foo()", | 688 | label: "foo()", |
681 | source_range: [18; 18), | 689 | source_range: 18..18, |
682 | delete: [18; 18), | 690 | delete: 18..18, |
683 | insert: "foo()$0", | 691 | insert: "foo()$0", |
684 | kind: Function, | 692 | kind: Function, |
685 | lookup: "foo", | 693 | lookup: "foo", |
@@ -687,8 +695,8 @@ mod tests { | |||
687 | }, | 695 | }, |
688 | CompletionItem { | 696 | CompletionItem { |
689 | label: "std", | 697 | label: "std", |
690 | source_range: [18; 18), | 698 | source_range: 18..18, |
691 | delete: [18; 18), | 699 | delete: 18..18, |
692 | insert: "std", | 700 | insert: "std", |
693 | kind: Module, | 701 | kind: Module, |
694 | }, | 702 | }, |
@@ -733,47 +741,47 @@ mod tests { | |||
733 | @r###" | 741 | @r###" |
734 | [ | 742 | [ |
735 | CompletionItem { | 743 | CompletionItem { |
736 | label: "bar!", | 744 | label: "bar!(…)", |
737 | source_range: [252; 252), | 745 | source_range: 252..252, |
738 | delete: [252; 252), | 746 | delete: 252..252, |
739 | insert: "bar!($0)", | 747 | insert: "bar!($0)", |
740 | kind: Macro, | 748 | kind: Macro, |
741 | detail: "macro_rules! bar", | 749 | detail: "macro_rules! bar", |
742 | }, | 750 | }, |
743 | CompletionItem { | 751 | CompletionItem { |
744 | label: "baz!", | 752 | label: "baz!(…)", |
745 | source_range: [252; 252), | 753 | source_range: 252..252, |
746 | delete: [252; 252), | 754 | delete: 252..252, |
747 | insert: "baz!($0)", | 755 | insert: "baz!($0)", |
748 | kind: Macro, | 756 | kind: Macro, |
749 | detail: "#[macro_export]\nmacro_rules! baz", | 757 | detail: "#[macro_export]\nmacro_rules! baz", |
750 | }, | 758 | }, |
751 | CompletionItem { | 759 | CompletionItem { |
752 | label: "foo!", | 760 | label: "foo!(…)", |
753 | source_range: [252; 252), | 761 | source_range: 252..252, |
754 | delete: [252; 252), | 762 | delete: 252..252, |
755 | insert: "foo!($0)", | 763 | insert: "foo!($0)", |
756 | kind: Macro, | 764 | kind: Macro, |
757 | detail: "macro_rules! foo", | 765 | detail: "macro_rules! foo", |
758 | }, | 766 | }, |
759 | CompletionItem { | 767 | CompletionItem { |
760 | label: "m1", | 768 | label: "m1", |
761 | source_range: [252; 252), | 769 | source_range: 252..252, |
762 | delete: [252; 252), | 770 | delete: 252..252, |
763 | insert: "m1", | 771 | insert: "m1", |
764 | kind: Module, | 772 | kind: Module, |
765 | }, | 773 | }, |
766 | CompletionItem { | 774 | CompletionItem { |
767 | label: "m2", | 775 | label: "m2", |
768 | source_range: [252; 252), | 776 | source_range: 252..252, |
769 | delete: [252; 252), | 777 | delete: 252..252, |
770 | insert: "m2", | 778 | insert: "m2", |
771 | kind: Module, | 779 | kind: Module, |
772 | }, | 780 | }, |
773 | CompletionItem { | 781 | CompletionItem { |
774 | label: "main()", | 782 | label: "main()", |
775 | source_range: [252; 252), | 783 | source_range: 252..252, |
776 | delete: [252; 252), | 784 | delete: 252..252, |
777 | insert: "main()$0", | 785 | insert: "main()$0", |
778 | kind: Function, | 786 | kind: Function, |
779 | lookup: "main", | 787 | lookup: "main", |
@@ -802,17 +810,17 @@ mod tests { | |||
802 | @r###" | 810 | @r###" |
803 | [ | 811 | [ |
804 | CompletionItem { | 812 | CompletionItem { |
805 | label: "foo!", | 813 | label: "foo!(…)", |
806 | source_range: [49; 49), | 814 | source_range: 49..49, |
807 | delete: [49; 49), | 815 | delete: 49..49, |
808 | insert: "foo!($0)", | 816 | insert: "foo!($0)", |
809 | kind: Macro, | 817 | kind: Macro, |
810 | detail: "macro_rules! foo", | 818 | detail: "macro_rules! foo", |
811 | }, | 819 | }, |
812 | CompletionItem { | 820 | CompletionItem { |
813 | label: "foo()", | 821 | label: "foo()", |
814 | source_range: [49; 49), | 822 | source_range: 49..49, |
815 | delete: [49; 49), | 823 | delete: 49..49, |
816 | insert: "foo()$0", | 824 | insert: "foo()$0", |
817 | kind: Function, | 825 | kind: Function, |
818 | lookup: "foo", | 826 | lookup: "foo", |
@@ -841,17 +849,17 @@ mod tests { | |||
841 | @r###" | 849 | @r###" |
842 | [ | 850 | [ |
843 | CompletionItem { | 851 | CompletionItem { |
844 | label: "foo!", | 852 | label: "foo!(…)", |
845 | source_range: [57; 57), | 853 | source_range: 57..57, |
846 | delete: [57; 57), | 854 | delete: 57..57, |
847 | insert: "foo!($0)", | 855 | insert: "foo!($0)", |
848 | kind: Macro, | 856 | kind: Macro, |
849 | detail: "macro_rules! foo", | 857 | detail: "macro_rules! foo", |
850 | }, | 858 | }, |
851 | CompletionItem { | 859 | CompletionItem { |
852 | label: "main()", | 860 | label: "main()", |
853 | source_range: [57; 57), | 861 | source_range: 57..57, |
854 | delete: [57; 57), | 862 | delete: 57..57, |
855 | insert: "main()$0", | 863 | insert: "main()$0", |
856 | kind: Function, | 864 | kind: Function, |
857 | lookup: "main", | 865 | lookup: "main", |
@@ -880,17 +888,17 @@ mod tests { | |||
880 | @r###" | 888 | @r###" |
881 | [ | 889 | [ |
882 | CompletionItem { | 890 | CompletionItem { |
883 | label: "foo!", | 891 | label: "foo!(…)", |
884 | source_range: [50; 50), | 892 | source_range: 50..50, |
885 | delete: [50; 50), | 893 | delete: 50..50, |
886 | insert: "foo!($0)", | 894 | insert: "foo!($0)", |
887 | kind: Macro, | 895 | kind: Macro, |
888 | detail: "macro_rules! foo", | 896 | detail: "macro_rules! foo", |
889 | }, | 897 | }, |
890 | CompletionItem { | 898 | CompletionItem { |
891 | label: "main()", | 899 | label: "main()", |
892 | source_range: [50; 50), | 900 | source_range: 50..50, |
893 | delete: [50; 50), | 901 | delete: 50..50, |
894 | insert: "main()$0", | 902 | insert: "main()$0", |
895 | kind: Function, | 903 | kind: Function, |
896 | lookup: "main", | 904 | lookup: "main", |
@@ -917,8 +925,8 @@ mod tests { | |||
917 | [ | 925 | [ |
918 | CompletionItem { | 926 | CompletionItem { |
919 | label: "frobnicate()", | 927 | label: "frobnicate()", |
920 | source_range: [23; 24), | 928 | source_range: 23..24, |
921 | delete: [23; 24), | 929 | delete: 23..24, |
922 | insert: "frobnicate()$0", | 930 | insert: "frobnicate()$0", |
923 | kind: Function, | 931 | kind: Function, |
924 | lookup: "frobnicate", | 932 | lookup: "frobnicate", |
@@ -926,8 +934,8 @@ mod tests { | |||
926 | }, | 934 | }, |
927 | CompletionItem { | 935 | CompletionItem { |
928 | label: "main()", | 936 | label: "main()", |
929 | source_range: [23; 24), | 937 | source_range: 23..24, |
930 | delete: [23; 24), | 938 | delete: 23..24, |
931 | insert: "main()$0", | 939 | insert: "main()$0", |
932 | kind: Function, | 940 | kind: Function, |
933 | lookup: "main", | 941 | lookup: "main", |
@@ -953,17 +961,17 @@ mod tests { | |||
953 | @r###" | 961 | @r###" |
954 | [ | 962 | [ |
955 | CompletionItem { | 963 | CompletionItem { |
956 | label: "m!", | 964 | label: "m!(…)", |
957 | source_range: [145; 145), | 965 | source_range: 145..145, |
958 | delete: [145; 145), | 966 | delete: 145..145, |
959 | insert: "m!($0)", | 967 | insert: "m!($0)", |
960 | kind: Macro, | 968 | kind: Macro, |
961 | detail: "macro_rules! m", | 969 | detail: "macro_rules! m", |
962 | }, | 970 | }, |
963 | CompletionItem { | 971 | CompletionItem { |
964 | label: "quux(…)", | 972 | label: "quux(…)", |
965 | source_range: [145; 145), | 973 | source_range: 145..145, |
966 | delete: [145; 145), | 974 | delete: 145..145, |
967 | insert: "quux(${1:x})$0", | 975 | insert: "quux(${1:x})$0", |
968 | kind: Function, | 976 | kind: Function, |
969 | lookup: "quux", | 977 | lookup: "quux", |
@@ -972,16 +980,16 @@ mod tests { | |||
972 | }, | 980 | }, |
973 | CompletionItem { | 981 | CompletionItem { |
974 | label: "x", | 982 | label: "x", |
975 | source_range: [145; 145), | 983 | source_range: 145..145, |
976 | delete: [145; 145), | 984 | delete: 145..145, |
977 | insert: "x", | 985 | insert: "x", |
978 | kind: Binding, | 986 | kind: Binding, |
979 | detail: "i32", | 987 | detail: "i32", |
980 | }, | 988 | }, |
981 | CompletionItem { | 989 | CompletionItem { |
982 | label: "y", | 990 | label: "y", |
983 | source_range: [145; 145), | 991 | source_range: 145..145, |
984 | delete: [145; 145), | 992 | delete: 145..145, |
985 | insert: "y", | 993 | insert: "y", |
986 | kind: Binding, | 994 | kind: Binding, |
987 | detail: "i32", | 995 | detail: "i32", |
@@ -1006,17 +1014,17 @@ mod tests { | |||
1006 | @r###" | 1014 | @r###" |
1007 | [ | 1015 | [ |
1008 | CompletionItem { | 1016 | CompletionItem { |
1009 | label: "m!", | 1017 | label: "m!(…)", |
1010 | source_range: [145; 146), | 1018 | source_range: 145..146, |
1011 | delete: [145; 146), | 1019 | delete: 145..146, |
1012 | insert: "m!($0)", | 1020 | insert: "m!($0)", |
1013 | kind: Macro, | 1021 | kind: Macro, |
1014 | detail: "macro_rules! m", | 1022 | detail: "macro_rules! m", |
1015 | }, | 1023 | }, |
1016 | CompletionItem { | 1024 | CompletionItem { |
1017 | label: "quux(…)", | 1025 | label: "quux(…)", |
1018 | source_range: [145; 146), | 1026 | source_range: 145..146, |
1019 | delete: [145; 146), | 1027 | delete: 145..146, |
1020 | insert: "quux(${1:x})$0", | 1028 | insert: "quux(${1:x})$0", |
1021 | kind: Function, | 1029 | kind: Function, |
1022 | lookup: "quux", | 1030 | lookup: "quux", |
@@ -1025,16 +1033,16 @@ mod tests { | |||
1025 | }, | 1033 | }, |
1026 | CompletionItem { | 1034 | CompletionItem { |
1027 | label: "x", | 1035 | label: "x", |
1028 | source_range: [145; 146), | 1036 | source_range: 145..146, |
1029 | delete: [145; 146), | 1037 | delete: 145..146, |
1030 | insert: "x", | 1038 | insert: "x", |
1031 | kind: Binding, | 1039 | kind: Binding, |
1032 | detail: "i32", | 1040 | detail: "i32", |
1033 | }, | 1041 | }, |
1034 | CompletionItem { | 1042 | CompletionItem { |
1035 | label: "y", | 1043 | label: "y", |
1036 | source_range: [145; 146), | 1044 | source_range: 145..146, |
1037 | delete: [145; 146), | 1045 | delete: 145..146, |
1038 | insert: "y", | 1046 | insert: "y", |
1039 | kind: Binding, | 1047 | kind: Binding, |
1040 | detail: "i32", | 1048 | detail: "i32", |
@@ -1059,17 +1067,17 @@ mod tests { | |||
1059 | @r###" | 1067 | @r###" |
1060 | [ | 1068 | [ |
1061 | CompletionItem { | 1069 | CompletionItem { |
1062 | label: "m!", | 1070 | label: "m!(…)", |
1063 | source_range: [145; 146), | 1071 | source_range: 145..146, |
1064 | delete: [145; 146), | 1072 | delete: 145..146, |
1065 | insert: "m!($0)", | 1073 | insert: "m!($0)", |
1066 | kind: Macro, | 1074 | kind: Macro, |
1067 | detail: "macro_rules! m", | 1075 | detail: "macro_rules! m", |
1068 | }, | 1076 | }, |
1069 | CompletionItem { | 1077 | CompletionItem { |
1070 | label: "quux(…)", | 1078 | label: "quux(…)", |
1071 | source_range: [145; 146), | 1079 | source_range: 145..146, |
1072 | delete: [145; 146), | 1080 | delete: 145..146, |
1073 | insert: "quux(${1:x})$0", | 1081 | insert: "quux(${1:x})$0", |
1074 | kind: Function, | 1082 | kind: Function, |
1075 | lookup: "quux", | 1083 | lookup: "quux", |
@@ -1078,16 +1086,16 @@ mod tests { | |||
1078 | }, | 1086 | }, |
1079 | CompletionItem { | 1087 | CompletionItem { |
1080 | label: "x", | 1088 | label: "x", |
1081 | source_range: [145; 146), | 1089 | source_range: 145..146, |
1082 | delete: [145; 146), | 1090 | delete: 145..146, |
1083 | insert: "x", | 1091 | insert: "x", |
1084 | kind: Binding, | 1092 | kind: Binding, |
1085 | detail: "i32", | 1093 | detail: "i32", |
1086 | }, | 1094 | }, |
1087 | CompletionItem { | 1095 | CompletionItem { |
1088 | label: "y", | 1096 | label: "y", |
1089 | source_range: [145; 146), | 1097 | source_range: 145..146, |
1090 | delete: [145; 146), | 1098 | delete: 145..146, |
1091 | insert: "y", | 1099 | insert: "y", |
1092 | kind: Binding, | 1100 | kind: Binding, |
1093 | detail: "i32", | 1101 | detail: "i32", |
@@ -1113,14 +1121,14 @@ mod tests { | |||
1113 | [ | 1121 | [ |
1114 | CompletionItem { | 1122 | CompletionItem { |
1115 | label: "Quux", | 1123 | label: "Quux", |
1116 | source_range: [82; 82), | 1124 | source_range: 82..82, |
1117 | delete: [82; 82), | 1125 | delete: 82..82, |
1118 | insert: "Quux", | 1126 | insert: "Quux", |
1119 | }, | 1127 | }, |
1120 | CompletionItem { | 1128 | CompletionItem { |
1121 | label: "main()", | 1129 | label: "main()", |
1122 | source_range: [82; 82), | 1130 | source_range: 82..82, |
1123 | delete: [82; 82), | 1131 | delete: 82..82, |
1124 | insert: "main()$0", | 1132 | insert: "main()$0", |
1125 | kind: Function, | 1133 | kind: Function, |
1126 | lookup: "main", | 1134 | lookup: "main", |
@@ -1154,31 +1162,31 @@ mod tests { | |||
1154 | [ | 1162 | [ |
1155 | CompletionItem { | 1163 | CompletionItem { |
1156 | label: "Foo", | 1164 | label: "Foo", |
1157 | source_range: [248; 250), | 1165 | source_range: 248..250, |
1158 | delete: [248; 250), | 1166 | delete: 248..250, |
1159 | insert: "Foo", | 1167 | insert: "Foo", |
1160 | kind: Enum, | 1168 | kind: Enum, |
1161 | }, | 1169 | }, |
1162 | CompletionItem { | 1170 | CompletionItem { |
1163 | label: "Foo::Bar", | 1171 | label: "Foo::Bar", |
1164 | source_range: [248; 250), | 1172 | source_range: 248..250, |
1165 | delete: [248; 250), | 1173 | delete: 248..250, |
1166 | insert: "Foo::Bar", | 1174 | insert: "Foo::Bar", |
1167 | kind: EnumVariant, | 1175 | kind: EnumVariant, |
1168 | detail: "()", | 1176 | detail: "()", |
1169 | }, | 1177 | }, |
1170 | CompletionItem { | 1178 | CompletionItem { |
1171 | label: "Foo::Baz", | 1179 | label: "Foo::Baz", |
1172 | source_range: [248; 250), | 1180 | source_range: 248..250, |
1173 | delete: [248; 250), | 1181 | delete: 248..250, |
1174 | insert: "Foo::Baz", | 1182 | insert: "Foo::Baz", |
1175 | kind: EnumVariant, | 1183 | kind: EnumVariant, |
1176 | detail: "()", | 1184 | detail: "()", |
1177 | }, | 1185 | }, |
1178 | CompletionItem { | 1186 | CompletionItem { |
1179 | label: "Foo::Quux", | 1187 | label: "Foo::Quux", |
1180 | source_range: [248; 250), | 1188 | source_range: 248..250, |
1181 | delete: [248; 250), | 1189 | delete: 248..250, |
1182 | insert: "Foo::Quux", | 1190 | insert: "Foo::Quux", |
1183 | kind: EnumVariant, | 1191 | kind: EnumVariant, |
1184 | detail: "()", | 1192 | detail: "()", |
@@ -1212,31 +1220,31 @@ mod tests { | |||
1212 | [ | 1220 | [ |
1213 | CompletionItem { | 1221 | CompletionItem { |
1214 | label: "Foo", | 1222 | label: "Foo", |
1215 | source_range: [219; 221), | 1223 | source_range: 219..221, |
1216 | delete: [219; 221), | 1224 | delete: 219..221, |
1217 | insert: "Foo", | 1225 | insert: "Foo", |
1218 | kind: Enum, | 1226 | kind: Enum, |
1219 | }, | 1227 | }, |
1220 | CompletionItem { | 1228 | CompletionItem { |
1221 | label: "Foo::Bar", | 1229 | label: "Foo::Bar", |
1222 | source_range: [219; 221), | 1230 | source_range: 219..221, |
1223 | delete: [219; 221), | 1231 | delete: 219..221, |
1224 | insert: "Foo::Bar", | 1232 | insert: "Foo::Bar", |
1225 | kind: EnumVariant, | 1233 | kind: EnumVariant, |
1226 | detail: "()", | 1234 | detail: "()", |
1227 | }, | 1235 | }, |
1228 | CompletionItem { | 1236 | CompletionItem { |
1229 | label: "Foo::Baz", | 1237 | label: "Foo::Baz", |
1230 | source_range: [219; 221), | 1238 | source_range: 219..221, |
1231 | delete: [219; 221), | 1239 | delete: 219..221, |
1232 | insert: "Foo::Baz", | 1240 | insert: "Foo::Baz", |
1233 | kind: EnumVariant, | 1241 | kind: EnumVariant, |
1234 | detail: "()", | 1242 | detail: "()", |
1235 | }, | 1243 | }, |
1236 | CompletionItem { | 1244 | CompletionItem { |
1237 | label: "Foo::Quux", | 1245 | label: "Foo::Quux", |
1238 | source_range: [219; 221), | 1246 | source_range: 219..221, |
1239 | delete: [219; 221), | 1247 | delete: 219..221, |
1240 | insert: "Foo::Quux", | 1248 | insert: "Foo::Quux", |
1241 | kind: EnumVariant, | 1249 | kind: EnumVariant, |
1242 | detail: "()", | 1250 | detail: "()", |
@@ -1266,39 +1274,39 @@ mod tests { | |||
1266 | [ | 1274 | [ |
1267 | CompletionItem { | 1275 | CompletionItem { |
1268 | label: "Foo", | 1276 | label: "Foo", |
1269 | source_range: [185; 186), | 1277 | source_range: 185..186, |
1270 | delete: [185; 186), | 1278 | delete: 185..186, |
1271 | insert: "Foo", | 1279 | insert: "Foo", |
1272 | kind: Enum, | 1280 | kind: Enum, |
1273 | }, | 1281 | }, |
1274 | CompletionItem { | 1282 | CompletionItem { |
1275 | label: "Foo::Bar", | 1283 | label: "Foo::Bar", |
1276 | source_range: [185; 186), | 1284 | source_range: 185..186, |
1277 | delete: [185; 186), | 1285 | delete: 185..186, |
1278 | insert: "Foo::Bar", | 1286 | insert: "Foo::Bar", |
1279 | kind: EnumVariant, | 1287 | kind: EnumVariant, |
1280 | detail: "()", | 1288 | detail: "()", |
1281 | }, | 1289 | }, |
1282 | CompletionItem { | 1290 | CompletionItem { |
1283 | label: "Foo::Baz", | 1291 | label: "Foo::Baz", |
1284 | source_range: [185; 186), | 1292 | source_range: 185..186, |
1285 | delete: [185; 186), | 1293 | delete: 185..186, |
1286 | insert: "Foo::Baz", | 1294 | insert: "Foo::Baz", |
1287 | kind: EnumVariant, | 1295 | kind: EnumVariant, |
1288 | detail: "()", | 1296 | detail: "()", |
1289 | }, | 1297 | }, |
1290 | CompletionItem { | 1298 | CompletionItem { |
1291 | label: "Foo::Quux", | 1299 | label: "Foo::Quux", |
1292 | source_range: [185; 186), | 1300 | source_range: 185..186, |
1293 | delete: [185; 186), | 1301 | delete: 185..186, |
1294 | insert: "Foo::Quux", | 1302 | insert: "Foo::Quux", |
1295 | kind: EnumVariant, | 1303 | kind: EnumVariant, |
1296 | detail: "()", | 1304 | detail: "()", |
1297 | }, | 1305 | }, |
1298 | CompletionItem { | 1306 | CompletionItem { |
1299 | label: "main()", | 1307 | label: "main()", |
1300 | source_range: [185; 186), | 1308 | source_range: 185..186, |
1301 | delete: [185; 186), | 1309 | delete: 185..186, |
1302 | insert: "main()$0", | 1310 | insert: "main()$0", |
1303 | kind: Function, | 1311 | kind: Function, |
1304 | lookup: "main", | 1312 | lookup: "main", |
@@ -1308,4 +1316,47 @@ mod tests { | |||
1308 | "### | 1316 | "### |
1309 | ) | 1317 | ) |
1310 | } | 1318 | } |
1319 | |||
1320 | #[test] | ||
1321 | fn completes_enum_variant_from_module() { | ||
1322 | assert_debug_snapshot!( | ||
1323 | do_reference_completion( | ||
1324 | r" | ||
1325 | mod m { pub enum E { V } } | ||
1326 | |||
1327 | fn f() -> m::E { | ||
1328 | V<|> | ||
1329 | } | ||
1330 | " | ||
1331 | ), | ||
1332 | @r###" | ||
1333 | [ | ||
1334 | CompletionItem { | ||
1335 | label: "f()", | ||
1336 | source_range: 98..99, | ||
1337 | delete: 98..99, | ||
1338 | insert: "f()$0", | ||
1339 | kind: Function, | ||
1340 | lookup: "f", | ||
1341 | detail: "fn f() -> m::E", | ||
1342 | }, | ||
1343 | CompletionItem { | ||
1344 | label: "m", | ||
1345 | source_range: 98..99, | ||
1346 | delete: 98..99, | ||
1347 | insert: "m", | ||
1348 | kind: Module, | ||
1349 | }, | ||
1350 | CompletionItem { | ||
1351 | label: "m::E::V", | ||
1352 | source_range: 98..99, | ||
1353 | delete: 98..99, | ||
1354 | insert: "m::E::V", | ||
1355 | kind: EnumVariant, | ||
1356 | detail: "()", | ||
1357 | }, | ||
1358 | ] | ||
1359 | "### | ||
1360 | ) | ||
1361 | } | ||
1311 | } | 1362 | } |
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs index a76d1ce45..5f2797e41 100644 --- a/crates/ra_ide/src/completion/completion_context.rs +++ b/crates/ra_ide/src/completion/completion_context.rs | |||
@@ -7,7 +7,7 @@ use ra_syntax::{ | |||
7 | algo::{find_covering_element, find_node_at_offset}, | 7 | algo::{find_covering_element, find_node_at_offset}, |
8 | ast, AstNode, | 8 | ast, AstNode, |
9 | SyntaxKind::*, | 9 | SyntaxKind::*, |
10 | SyntaxNode, SyntaxToken, TextRange, TextUnit, | 10 | SyntaxNode, SyntaxToken, TextRange, TextSize, |
11 | }; | 11 | }; |
12 | use ra_text_edit::AtomTextEdit; | 12 | use ra_text_edit::AtomTextEdit; |
13 | 13 | ||
@@ -20,7 +20,7 @@ pub(crate) struct CompletionContext<'a> { | |||
20 | pub(super) sema: Semantics<'a, RootDatabase>, | 20 | pub(super) sema: Semantics<'a, RootDatabase>, |
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: TextSize, |
24 | /// The token before the cursor, in the original file. | 24 | /// The token before the cursor, in the original file. |
25 | pub(super) original_token: SyntaxToken, | 25 | pub(super) original_token: SyntaxToken, |
26 | /// The token before the cursor, in the macro-expanded file. | 26 | /// The token before the cursor, in the macro-expanded file. |
@@ -57,6 +57,7 @@ pub(crate) struct CompletionContext<'a> { | |||
57 | pub(super) is_macro_call: bool, | 57 | pub(super) is_macro_call: bool, |
58 | pub(super) is_path_type: bool, | 58 | pub(super) is_path_type: bool, |
59 | pub(super) has_type_args: bool, | 59 | pub(super) has_type_args: bool, |
60 | pub(super) is_attribute: bool, | ||
60 | } | 61 | } |
61 | 62 | ||
62 | impl<'a> CompletionContext<'a> { | 63 | impl<'a> CompletionContext<'a> { |
@@ -113,6 +114,7 @@ impl<'a> CompletionContext<'a> { | |||
113 | is_path_type: false, | 114 | is_path_type: false, |
114 | has_type_args: false, | 115 | has_type_args: false, |
115 | dot_receiver_is_ambiguous_float_literal: false, | 116 | dot_receiver_is_ambiguous_float_literal: false, |
117 | is_attribute: false, | ||
116 | }; | 118 | }; |
117 | 119 | ||
118 | let mut original_file = original_file.syntax().clone(); | 120 | let mut original_file = original_file.syntax().clone(); |
@@ -165,7 +167,7 @@ impl<'a> CompletionContext<'a> { | |||
165 | match self.token.kind() { | 167 | match self.token.kind() { |
166 | // workaroud when completion is triggered by trigger characters. | 168 | // workaroud when completion is triggered by trigger characters. |
167 | IDENT => self.original_token.text_range(), | 169 | IDENT => self.original_token.text_range(), |
168 | _ => TextRange::offset_len(self.offset, 0.into()), | 170 | _ => TextRange::empty(self.offset), |
169 | } | 171 | } |
170 | } | 172 | } |
171 | 173 | ||
@@ -188,7 +190,7 @@ impl<'a> CompletionContext<'a> { | |||
188 | &mut self, | 190 | &mut self, |
189 | original_file: &SyntaxNode, | 191 | original_file: &SyntaxNode, |
190 | file_with_fake_ident: SyntaxNode, | 192 | file_with_fake_ident: SyntaxNode, |
191 | offset: TextUnit, | 193 | offset: TextSize, |
192 | ) { | 194 | ) { |
193 | // First, let's try to complete a reference to some declaration. | 195 | // First, let's try to complete a reference to some declaration. |
194 | if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(&file_with_fake_ident, offset) { | 196 | if let Some(name_ref) = find_node_at_offset::<ast::NameRef>(&file_with_fake_ident, offset) { |
@@ -222,7 +224,8 @@ impl<'a> CompletionContext<'a> { | |||
222 | } | 224 | } |
223 | if let Some(let_stmt) = bind_pat.syntax().ancestors().find_map(ast::LetStmt::cast) { | 225 | if let Some(let_stmt) = bind_pat.syntax().ancestors().find_map(ast::LetStmt::cast) { |
224 | if let Some(pat) = let_stmt.pat() { | 226 | if let Some(pat) = let_stmt.pat() { |
225 | if bind_pat.syntax().text_range().is_subrange(&pat.syntax().text_range()) { | 227 | if pat.syntax().text_range().contains_range(bind_pat.syntax().text_range()) |
228 | { | ||
226 | self.is_pat_binding_or_const = false; | 229 | self.is_pat_binding_or_const = false; |
227 | } | 230 | } |
228 | } | 231 | } |
@@ -244,7 +247,7 @@ impl<'a> CompletionContext<'a> { | |||
244 | &mut self, | 247 | &mut self, |
245 | original_file: &SyntaxNode, | 248 | original_file: &SyntaxNode, |
246 | name_ref: ast::NameRef, | 249 | name_ref: ast::NameRef, |
247 | offset: TextUnit, | 250 | offset: TextSize, |
248 | ) { | 251 | ) { |
249 | self.name_ref_syntax = | 252 | self.name_ref_syntax = |
250 | find_node_at_offset(&original_file, name_ref.syntax().text_range().start()); | 253 | find_node_at_offset(&original_file, name_ref.syntax().text_range().start()); |
@@ -306,6 +309,7 @@ impl<'a> CompletionContext<'a> { | |||
306 | .and_then(|it| it.syntax().parent().and_then(ast::CallExpr::cast)) | 309 | .and_then(|it| it.syntax().parent().and_then(ast::CallExpr::cast)) |
307 | .is_some(); | 310 | .is_some(); |
308 | self.is_macro_call = path.syntax().parent().and_then(ast::MacroCall::cast).is_some(); | 311 | self.is_macro_call = path.syntax().parent().and_then(ast::MacroCall::cast).is_some(); |
312 | self.is_attribute = path.syntax().parent().and_then(ast::Attr::cast).is_some(); | ||
309 | 313 | ||
310 | self.is_path_type = path.syntax().parent().and_then(ast::PathType::cast).is_some(); | 314 | self.is_path_type = path.syntax().parent().and_then(ast::PathType::cast).is_some(); |
311 | self.has_type_args = segment.type_arg_list().is_some(); | 315 | self.has_type_args = segment.type_arg_list().is_some(); |
diff --git a/crates/ra_ide/src/completion/completion_item.rs b/crates/ra_ide/src/completion/completion_item.rs index fb06cc125..5936fb8f7 100644 --- a/crates/ra_ide/src/completion/completion_item.rs +++ b/crates/ra_ide/src/completion/completion_item.rs | |||
@@ -121,6 +121,7 @@ pub enum CompletionItemKind { | |||
121 | Method, | 121 | Method, |
122 | TypeParam, | 122 | TypeParam, |
123 | Macro, | 123 | Macro, |
124 | Attribute, | ||
124 | } | 125 | } |
125 | 126 | ||
126 | #[derive(Debug, PartialEq, Eq, Copy, Clone)] | 127 | #[derive(Debug, PartialEq, Eq, Copy, Clone)] |
@@ -134,6 +135,7 @@ pub(crate) enum CompletionKind { | |||
134 | Snippet, | 135 | Snippet, |
135 | Postfix, | 136 | Postfix, |
136 | BuiltinType, | 137 | BuiltinType, |
138 | Attribute, | ||
137 | } | 139 | } |
138 | 140 | ||
139 | #[derive(Debug, PartialEq, Eq, Copy, Clone)] | 141 | #[derive(Debug, PartialEq, Eq, Copy, Clone)] |
diff --git a/crates/ra_ide/src/completion/presentation.rs b/crates/ra_ide/src/completion/presentation.rs index 5e2b8b920..9f9f06bf0 100644 --- a/crates/ra_ide/src/completion/presentation.rs +++ b/crates/ra_ide/src/completion/presentation.rs | |||
@@ -133,29 +133,6 @@ impl Completions { | |||
133 | completion_item.kind(kind).set_documentation(docs).add_to(self) | 133 | completion_item.kind(kind).set_documentation(docs).add_to(self) |
134 | } | 134 | } |
135 | 135 | ||
136 | fn guess_macro_braces(&self, macro_name: &str, docs: &str) -> &'static str { | ||
137 | let mut votes = [0, 0, 0]; | ||
138 | for (idx, s) in docs.match_indices(¯o_name) { | ||
139 | let (before, after) = (&docs[..idx], &docs[idx + s.len()..]); | ||
140 | // Ensure to match the full word | ||
141 | if after.starts_with('!') | ||
142 | && !before.ends_with(|c: char| c == '_' || c.is_ascii_alphanumeric()) | ||
143 | { | ||
144 | // It may have spaces before the braces like `foo! {}` | ||
145 | match after[1..].chars().find(|&c| !c.is_whitespace()) { | ||
146 | Some('{') => votes[0] += 1, | ||
147 | Some('[') => votes[1] += 1, | ||
148 | Some('(') => votes[2] += 1, | ||
149 | _ => {} | ||
150 | } | ||
151 | } | ||
152 | } | ||
153 | |||
154 | // Insert a space before `{}`. | ||
155 | // We prefer the last one when some votes equal. | ||
156 | *votes.iter().zip(&[" {$0}", "[$0]", "($0)"]).max_by_key(|&(&vote, _)| vote).unwrap().1 | ||
157 | } | ||
158 | |||
159 | pub(crate) fn add_macro( | 136 | pub(crate) fn add_macro( |
160 | &mut self, | 137 | &mut self, |
161 | ctx: &CompletionContext, | 138 | ctx: &CompletionContext, |
@@ -177,21 +154,27 @@ impl Completions { | |||
177 | let detail = macro_label(&ast_node); | 154 | let detail = macro_label(&ast_node); |
178 | 155 | ||
179 | let docs = macro_.docs(ctx.db); | 156 | let docs = macro_.docs(ctx.db); |
180 | let macro_declaration = format!("{}!", name); | ||
181 | 157 | ||
182 | let mut builder = | 158 | let mut builder = CompletionItem::new( |
183 | CompletionItem::new(CompletionKind::Reference, ctx.source_range(), ¯o_declaration) | 159 | CompletionKind::Reference, |
184 | .kind(CompletionItemKind::Macro) | 160 | ctx.source_range(), |
185 | .set_documentation(docs.clone()) | 161 | &format!("{}!", name), |
186 | .set_deprecated(is_deprecated(macro_, ctx.db)) | 162 | ) |
187 | .detail(detail); | 163 | .kind(CompletionItemKind::Macro) |
164 | .set_documentation(docs.clone()) | ||
165 | .set_deprecated(is_deprecated(macro_, ctx.db)) | ||
166 | .detail(detail); | ||
188 | 167 | ||
168 | let needs_bang = ctx.use_item_syntax.is_none() && !ctx.is_macro_call; | ||
189 | builder = match ctx.config.snippet_cap { | 169 | builder = match ctx.config.snippet_cap { |
190 | Some(cap) if ctx.use_item_syntax.is_none() && !ctx.is_macro_call => { | 170 | Some(cap) if needs_bang => { |
191 | let macro_braces_to_insert = | 171 | let docs = docs.as_ref().map_or("", |s| s.as_str()); |
192 | self.guess_macro_braces(&name, docs.as_ref().map_or("", |s| s.as_str())); | 172 | let (bra, ket) = guess_macro_braces(&name, docs); |
193 | builder.insert_snippet(cap, macro_declaration + macro_braces_to_insert) | 173 | builder |
174 | .insert_snippet(cap, format!("{}!{}$0{}", name, bra, ket)) | ||
175 | .label(format!("{}!{}…{}", name, bra, ket)) | ||
194 | } | 176 | } |
177 | None if needs_bang => builder.insert_text(format!("{}!", name)), | ||
195 | _ => { | 178 | _ => { |
196 | tested_by!(dont_insert_macro_call_parens_unncessary); | 179 | tested_by!(dont_insert_macro_call_parens_unncessary); |
197 | builder.insert_text(name) | 180 | builder.insert_text(name) |
@@ -404,6 +387,34 @@ fn is_deprecated(node: impl HasAttrs, db: &RootDatabase) -> bool { | |||
404 | node.attrs(db).by_key("deprecated").exists() | 387 | node.attrs(db).by_key("deprecated").exists() |
405 | } | 388 | } |
406 | 389 | ||
390 | fn guess_macro_braces(macro_name: &str, docs: &str) -> (&'static str, &'static str) { | ||
391 | let mut votes = [0, 0, 0]; | ||
392 | for (idx, s) in docs.match_indices(¯o_name) { | ||
393 | let (before, after) = (&docs[..idx], &docs[idx + s.len()..]); | ||
394 | // Ensure to match the full word | ||
395 | if after.starts_with('!') | ||
396 | && !before.ends_with(|c: char| c == '_' || c.is_ascii_alphanumeric()) | ||
397 | { | ||
398 | // It may have spaces before the braces like `foo! {}` | ||
399 | match after[1..].chars().find(|&c| !c.is_whitespace()) { | ||
400 | Some('{') => votes[0] += 1, | ||
401 | Some('[') => votes[1] += 1, | ||
402 | Some('(') => votes[2] += 1, | ||
403 | _ => {} | ||
404 | } | ||
405 | } | ||
406 | } | ||
407 | |||
408 | // Insert a space before `{}`. | ||
409 | // We prefer the last one when some votes equal. | ||
410 | let (_vote, (bra, ket)) = votes | ||
411 | .iter() | ||
412 | .zip(&[(" {", "}"), ("[", "]"), ("(", ")")]) | ||
413 | .max_by_key(|&(&vote, _)| vote) | ||
414 | .unwrap(); | ||
415 | (*bra, *ket) | ||
416 | } | ||
417 | |||
407 | #[cfg(test)] | 418 | #[cfg(test)] |
408 | mod tests { | 419 | mod tests { |
409 | use insta::assert_debug_snapshot; | 420 | use insta::assert_debug_snapshot; |
@@ -441,8 +452,8 @@ mod tests { | |||
441 | [ | 452 | [ |
442 | CompletionItem { | 453 | CompletionItem { |
443 | label: "Foo", | 454 | label: "Foo", |
444 | source_range: [121; 123), | 455 | source_range: 121..123, |
445 | delete: [121; 123), | 456 | delete: 121..123, |
446 | insert: "Foo", | 457 | insert: "Foo", |
447 | kind: EnumVariant, | 458 | kind: EnumVariant, |
448 | detail: "{ x: i32, y: i32 }", | 459 | detail: "{ x: i32, y: i32 }", |
@@ -467,8 +478,8 @@ mod tests { | |||
467 | [ | 478 | [ |
468 | CompletionItem { | 479 | CompletionItem { |
469 | label: "Foo(…)", | 480 | label: "Foo(…)", |
470 | source_range: [115; 117), | 481 | source_range: 115..117, |
471 | delete: [115; 117), | 482 | delete: 115..117, |
472 | insert: "Foo($0)", | 483 | insert: "Foo($0)", |
473 | kind: EnumVariant, | 484 | kind: EnumVariant, |
474 | lookup: "Foo", | 485 | lookup: "Foo", |
@@ -495,8 +506,8 @@ mod tests { | |||
495 | [ | 506 | [ |
496 | CompletionItem { | 507 | CompletionItem { |
497 | label: "Foo", | 508 | label: "Foo", |
498 | source_range: [104; 106), | 509 | source_range: 104..106, |
499 | delete: [104; 106), | 510 | delete: 104..106, |
500 | insert: "Foo", | 511 | insert: "Foo", |
501 | kind: EnumVariant, | 512 | kind: EnumVariant, |
502 | detail: "()", | 513 | detail: "()", |
@@ -523,8 +534,8 @@ mod tests { | |||
523 | [ | 534 | [ |
524 | CompletionItem { | 535 | CompletionItem { |
525 | label: "main()", | 536 | label: "main()", |
526 | source_range: [203; 206), | 537 | source_range: 203..206, |
527 | delete: [203; 206), | 538 | delete: 203..206, |
528 | insert: "main()$0", | 539 | insert: "main()$0", |
529 | kind: Function, | 540 | kind: Function, |
530 | lookup: "main", | 541 | lookup: "main", |
@@ -532,8 +543,8 @@ mod tests { | |||
532 | }, | 543 | }, |
533 | CompletionItem { | 544 | CompletionItem { |
534 | label: "something_deprecated()", | 545 | label: "something_deprecated()", |
535 | source_range: [203; 206), | 546 | source_range: 203..206, |
536 | delete: [203; 206), | 547 | delete: 203..206, |
537 | insert: "something_deprecated()$0", | 548 | insert: "something_deprecated()$0", |
538 | kind: Function, | 549 | kind: Function, |
539 | lookup: "something_deprecated", | 550 | lookup: "something_deprecated", |
@@ -542,8 +553,8 @@ mod tests { | |||
542 | }, | 553 | }, |
543 | CompletionItem { | 554 | CompletionItem { |
544 | label: "something_else_deprecated()", | 555 | label: "something_else_deprecated()", |
545 | source_range: [203; 206), | 556 | source_range: 203..206, |
546 | delete: [203; 206), | 557 | delete: 203..206, |
547 | insert: "something_else_deprecated()$0", | 558 | insert: "something_else_deprecated()$0", |
548 | kind: Function, | 559 | kind: Function, |
549 | lookup: "something_else_deprecated", | 560 | lookup: "something_else_deprecated", |
@@ -569,8 +580,8 @@ mod tests { | |||
569 | [ | 580 | [ |
570 | CompletionItem { | 581 | CompletionItem { |
571 | label: "main()", | 582 | label: "main()", |
572 | source_range: [61; 64), | 583 | source_range: 61..64, |
573 | delete: [61; 64), | 584 | delete: 61..64, |
574 | insert: "main()$0", | 585 | insert: "main()$0", |
575 | kind: Function, | 586 | kind: Function, |
576 | lookup: "main", | 587 | lookup: "main", |
@@ -578,8 +589,8 @@ mod tests { | |||
578 | }, | 589 | }, |
579 | CompletionItem { | 590 | CompletionItem { |
580 | label: "no_args()", | 591 | label: "no_args()", |
581 | source_range: [61; 64), | 592 | source_range: 61..64, |
582 | delete: [61; 64), | 593 | delete: 61..64, |
583 | insert: "no_args()$0", | 594 | insert: "no_args()$0", |
584 | kind: Function, | 595 | kind: Function, |
585 | lookup: "no_args", | 596 | lookup: "no_args", |
@@ -599,8 +610,8 @@ mod tests { | |||
599 | [ | 610 | [ |
600 | CompletionItem { | 611 | CompletionItem { |
601 | label: "main()", | 612 | label: "main()", |
602 | source_range: [80; 85), | 613 | source_range: 80..85, |
603 | delete: [80; 85), | 614 | delete: 80..85, |
604 | insert: "main()$0", | 615 | insert: "main()$0", |
605 | kind: Function, | 616 | kind: Function, |
606 | lookup: "main", | 617 | lookup: "main", |
@@ -608,8 +619,8 @@ mod tests { | |||
608 | }, | 619 | }, |
609 | CompletionItem { | 620 | CompletionItem { |
610 | label: "with_args(…)", | 621 | label: "with_args(…)", |
611 | source_range: [80; 85), | 622 | source_range: 80..85, |
612 | delete: [80; 85), | 623 | delete: 80..85, |
613 | insert: "with_args(${1:x}, ${2:y})$0", | 624 | insert: "with_args(${1:x}, ${2:y})$0", |
614 | kind: Function, | 625 | kind: Function, |
615 | lookup: "with_args", | 626 | lookup: "with_args", |
@@ -635,8 +646,8 @@ mod tests { | |||
635 | [ | 646 | [ |
636 | CompletionItem { | 647 | CompletionItem { |
637 | label: "foo()", | 648 | label: "foo()", |
638 | source_range: [163; 164), | 649 | source_range: 163..164, |
639 | delete: [163; 164), | 650 | delete: 163..164, |
640 | insert: "foo()$0", | 651 | insert: "foo()$0", |
641 | kind: Method, | 652 | kind: Method, |
642 | lookup: "foo", | 653 | lookup: "foo", |
@@ -663,23 +674,23 @@ mod tests { | |||
663 | [ | 674 | [ |
664 | CompletionItem { | 675 | CompletionItem { |
665 | label: "None", | 676 | label: "None", |
666 | source_range: [144; 147), | 677 | source_range: 144..147, |
667 | delete: [144; 147), | 678 | delete: 144..147, |
668 | insert: "None", | 679 | insert: "None", |
669 | kind: EnumVariant, | 680 | kind: EnumVariant, |
670 | detail: "()", | 681 | detail: "()", |
671 | }, | 682 | }, |
672 | CompletionItem { | 683 | CompletionItem { |
673 | label: "Option", | 684 | label: "Option", |
674 | source_range: [144; 147), | 685 | source_range: 144..147, |
675 | delete: [144; 147), | 686 | delete: 144..147, |
676 | insert: "Option", | 687 | insert: "Option", |
677 | kind: Enum, | 688 | kind: Enum, |
678 | }, | 689 | }, |
679 | CompletionItem { | 690 | CompletionItem { |
680 | label: "Some(…)", | 691 | label: "Some(…)", |
681 | source_range: [144; 147), | 692 | source_range: 144..147, |
682 | delete: [144; 147), | 693 | delete: 144..147, |
683 | insert: "Some($0)", | 694 | insert: "Some($0)", |
684 | kind: EnumVariant, | 695 | kind: EnumVariant, |
685 | lookup: "Some", | 696 | lookup: "Some", |
@@ -688,8 +699,8 @@ mod tests { | |||
688 | }, | 699 | }, |
689 | CompletionItem { | 700 | CompletionItem { |
690 | label: "main()", | 701 | label: "main()", |
691 | source_range: [144; 147), | 702 | source_range: 144..147, |
692 | delete: [144; 147), | 703 | delete: 144..147, |
693 | insert: "main()$0", | 704 | insert: "main()$0", |
694 | kind: Function, | 705 | kind: Function, |
695 | lookup: "main", | 706 | lookup: "main", |
@@ -714,23 +725,23 @@ mod tests { | |||
714 | [ | 725 | [ |
715 | CompletionItem { | 726 | CompletionItem { |
716 | label: "None", | 727 | label: "None", |
717 | source_range: [185; 188), | 728 | source_range: 185..188, |
718 | delete: [185; 188), | 729 | delete: 185..188, |
719 | insert: "None", | 730 | insert: "None", |
720 | kind: EnumVariant, | 731 | kind: EnumVariant, |
721 | detail: "()", | 732 | detail: "()", |
722 | }, | 733 | }, |
723 | CompletionItem { | 734 | CompletionItem { |
724 | label: "Option", | 735 | label: "Option", |
725 | source_range: [185; 188), | 736 | source_range: 185..188, |
726 | delete: [185; 188), | 737 | delete: 185..188, |
727 | insert: "Option", | 738 | insert: "Option", |
728 | kind: Enum, | 739 | kind: Enum, |
729 | }, | 740 | }, |
730 | CompletionItem { | 741 | CompletionItem { |
731 | label: "Some(…)", | 742 | label: "Some(…)", |
732 | source_range: [185; 188), | 743 | source_range: 185..188, |
733 | delete: [185; 188), | 744 | delete: 185..188, |
734 | insert: "Some($0)", | 745 | insert: "Some($0)", |
735 | kind: EnumVariant, | 746 | kind: EnumVariant, |
736 | lookup: "Some", | 747 | lookup: "Some", |
@@ -760,8 +771,8 @@ mod tests { | |||
760 | [ | 771 | [ |
761 | CompletionItem { | 772 | CompletionItem { |
762 | label: "foo(…)", | 773 | label: "foo(…)", |
763 | source_range: [171; 172), | 774 | source_range: 171..172, |
764 | delete: [171; 172), | 775 | delete: 171..172, |
765 | insert: "foo(${1:x})$0", | 776 | insert: "foo(${1:x})$0", |
766 | kind: Method, | 777 | kind: Method, |
767 | lookup: "foo", | 778 | lookup: "foo", |
@@ -795,8 +806,8 @@ mod tests { | |||
795 | [ | 806 | [ |
796 | CompletionItem { | 807 | CompletionItem { |
797 | label: "foo(…)", | 808 | label: "foo(…)", |
798 | source_range: [171; 172), | 809 | source_range: 171..172, |
799 | delete: [171; 172), | 810 | delete: 171..172, |
800 | insert: "foo($0)", | 811 | insert: "foo($0)", |
801 | kind: Method, | 812 | kind: Method, |
802 | lookup: "foo", | 813 | lookup: "foo", |
@@ -822,8 +833,8 @@ mod tests { | |||
822 | [ | 833 | [ |
823 | CompletionItem { | 834 | CompletionItem { |
824 | label: "foo", | 835 | label: "foo", |
825 | source_range: [40; 41), | 836 | source_range: 40..41, |
826 | delete: [40; 41), | 837 | delete: 40..41, |
827 | insert: "foo", | 838 | insert: "foo", |
828 | kind: Function, | 839 | kind: Function, |
829 | detail: "pub fn foo()", | 840 | detail: "pub fn foo()", |
@@ -849,16 +860,16 @@ mod tests { | |||
849 | [ | 860 | [ |
850 | CompletionItem { | 861 | CompletionItem { |
851 | label: "frobnicate", | 862 | label: "frobnicate", |
852 | source_range: [35; 39), | 863 | source_range: 35..39, |
853 | delete: [35; 39), | 864 | delete: 35..39, |
854 | insert: "frobnicate", | 865 | insert: "frobnicate", |
855 | kind: Function, | 866 | kind: Function, |
856 | detail: "fn frobnicate()", | 867 | detail: "fn frobnicate()", |
857 | }, | 868 | }, |
858 | CompletionItem { | 869 | CompletionItem { |
859 | label: "main", | 870 | label: "main", |
860 | source_range: [35; 39), | 871 | source_range: 35..39, |
861 | delete: [35; 39), | 872 | delete: 35..39, |
862 | insert: "main", | 873 | insert: "main", |
863 | kind: Function, | 874 | kind: Function, |
864 | detail: "fn main()", | 875 | detail: "fn main()", |
@@ -881,8 +892,8 @@ mod tests { | |||
881 | [ | 892 | [ |
882 | CompletionItem { | 893 | CompletionItem { |
883 | label: "new", | 894 | label: "new", |
884 | source_range: [67; 69), | 895 | source_range: 67..69, |
885 | delete: [67; 69), | 896 | delete: 67..69, |
886 | insert: "new", | 897 | insert: "new", |
887 | kind: Function, | 898 | kind: Function, |
888 | detail: "fn new() -> Foo", | 899 | detail: "fn new() -> Foo", |
@@ -906,16 +917,16 @@ mod tests { | |||
906 | [ | 917 | [ |
907 | CompletionItem { | 918 | CompletionItem { |
908 | label: "Vec<…>", | 919 | label: "Vec<…>", |
909 | source_range: [61; 63), | 920 | source_range: 61..63, |
910 | delete: [61; 63), | 921 | delete: 61..63, |
911 | insert: "Vec<$0>", | 922 | insert: "Vec<$0>", |
912 | kind: Struct, | 923 | kind: Struct, |
913 | lookup: "Vec", | 924 | lookup: "Vec", |
914 | }, | 925 | }, |
915 | CompletionItem { | 926 | CompletionItem { |
916 | label: "foo(…)", | 927 | label: "foo(…)", |
917 | source_range: [61; 63), | 928 | source_range: 61..63, |
918 | delete: [61; 63), | 929 | delete: 61..63, |
919 | insert: "foo(${1:xs})$0", | 930 | insert: "foo(${1:xs})$0", |
920 | kind: Function, | 931 | kind: Function, |
921 | lookup: "foo", | 932 | lookup: "foo", |
@@ -936,16 +947,16 @@ mod tests { | |||
936 | [ | 947 | [ |
937 | CompletionItem { | 948 | CompletionItem { |
938 | label: "Vec<…>", | 949 | label: "Vec<…>", |
939 | source_range: [64; 66), | 950 | source_range: 64..66, |
940 | delete: [64; 66), | 951 | delete: 64..66, |
941 | insert: "Vec<$0>", | 952 | insert: "Vec<$0>", |
942 | kind: TypeAlias, | 953 | kind: TypeAlias, |
943 | lookup: "Vec", | 954 | lookup: "Vec", |
944 | }, | 955 | }, |
945 | CompletionItem { | 956 | CompletionItem { |
946 | label: "foo(…)", | 957 | label: "foo(…)", |
947 | source_range: [64; 66), | 958 | source_range: 64..66, |
948 | delete: [64; 66), | 959 | delete: 64..66, |
949 | insert: "foo(${1:xs})$0", | 960 | insert: "foo(${1:xs})$0", |
950 | kind: Function, | 961 | kind: Function, |
951 | lookup: "foo", | 962 | lookup: "foo", |
@@ -966,15 +977,15 @@ mod tests { | |||
966 | [ | 977 | [ |
967 | CompletionItem { | 978 | CompletionItem { |
968 | label: "Vec", | 979 | label: "Vec", |
969 | source_range: [68; 70), | 980 | source_range: 68..70, |
970 | delete: [68; 70), | 981 | delete: 68..70, |
971 | insert: "Vec", | 982 | insert: "Vec", |
972 | kind: Struct, | 983 | kind: Struct, |
973 | }, | 984 | }, |
974 | CompletionItem { | 985 | CompletionItem { |
975 | label: "foo(…)", | 986 | label: "foo(…)", |
976 | source_range: [68; 70), | 987 | source_range: 68..70, |
977 | delete: [68; 70), | 988 | delete: 68..70, |
978 | insert: "foo(${1:xs})$0", | 989 | insert: "foo(${1:xs})$0", |
979 | kind: Function, | 990 | kind: Function, |
980 | lookup: "foo", | 991 | lookup: "foo", |
@@ -995,15 +1006,15 @@ mod tests { | |||
995 | [ | 1006 | [ |
996 | CompletionItem { | 1007 | CompletionItem { |
997 | label: "Vec", | 1008 | label: "Vec", |
998 | source_range: [61; 63), | 1009 | source_range: 61..63, |
999 | delete: [61; 63), | 1010 | delete: 61..63, |
1000 | insert: "Vec", | 1011 | insert: "Vec", |
1001 | kind: Struct, | 1012 | kind: Struct, |
1002 | }, | 1013 | }, |
1003 | CompletionItem { | 1014 | CompletionItem { |
1004 | label: "foo(…)", | 1015 | label: "foo(…)", |
1005 | source_range: [61; 63), | 1016 | source_range: 61..63, |
1006 | delete: [61; 63), | 1017 | delete: 61..63, |
1007 | insert: "foo(${1:xs})$0", | 1018 | insert: "foo(${1:xs})$0", |
1008 | kind: Function, | 1019 | kind: Function, |
1009 | lookup: "foo", | 1020 | lookup: "foo", |
@@ -1035,8 +1046,8 @@ mod tests { | |||
1035 | [ | 1046 | [ |
1036 | CompletionItem { | 1047 | CompletionItem { |
1037 | label: "frobnicate!", | 1048 | label: "frobnicate!", |
1038 | source_range: [9; 9), | 1049 | source_range: 9..9, |
1039 | delete: [9; 9), | 1050 | delete: 9..9, |
1040 | insert: "frobnicate", | 1051 | insert: "frobnicate", |
1041 | kind: Macro, | 1052 | kind: Macro, |
1042 | detail: "#[macro_export]\nmacro_rules! frobnicate", | 1053 | detail: "#[macro_export]\nmacro_rules! frobnicate", |
@@ -1061,16 +1072,16 @@ mod tests { | |||
1061 | [ | 1072 | [ |
1062 | CompletionItem { | 1073 | CompletionItem { |
1063 | label: "frobnicate!", | 1074 | label: "frobnicate!", |
1064 | source_range: [56; 60), | 1075 | source_range: 56..60, |
1065 | delete: [56; 60), | 1076 | delete: 56..60, |
1066 | insert: "frobnicate", | 1077 | insert: "frobnicate", |
1067 | kind: Macro, | 1078 | kind: Macro, |
1068 | detail: "macro_rules! frobnicate", | 1079 | detail: "macro_rules! frobnicate", |
1069 | }, | 1080 | }, |
1070 | CompletionItem { | 1081 | CompletionItem { |
1071 | label: "main()", | 1082 | label: "main()", |
1072 | source_range: [56; 60), | 1083 | source_range: 56..60, |
1073 | delete: [56; 60), | 1084 | delete: 56..60, |
1074 | insert: "main()$0", | 1085 | insert: "main()$0", |
1075 | kind: Function, | 1086 | kind: Function, |
1076 | lookup: "main", | 1087 | lookup: "main", |
@@ -1098,24 +1109,24 @@ mod tests { | |||
1098 | [ | 1109 | [ |
1099 | CompletionItem { | 1110 | CompletionItem { |
1100 | label: "another_field", | 1111 | label: "another_field", |
1101 | source_range: [201; 201), | 1112 | source_range: 201..201, |
1102 | delete: [201; 201), | 1113 | delete: 201..201, |
1103 | insert: "another_field", | 1114 | insert: "another_field", |
1104 | kind: Field, | 1115 | kind: Field, |
1105 | detail: "i64", | 1116 | detail: "i64", |
1106 | }, | 1117 | }, |
1107 | CompletionItem { | 1118 | CompletionItem { |
1108 | label: "my_string", | 1119 | label: "my_string", |
1109 | source_range: [201; 201), | 1120 | source_range: 201..201, |
1110 | delete: [201; 201), | 1121 | delete: 201..201, |
1111 | insert: "my_string", | 1122 | insert: "my_string", |
1112 | kind: Field, | 1123 | kind: Field, |
1113 | detail: "{unknown}", | 1124 | detail: "{unknown}", |
1114 | }, | 1125 | }, |
1115 | CompletionItem { | 1126 | CompletionItem { |
1116 | label: "the_field", | 1127 | label: "the_field", |
1117 | source_range: [201; 201), | 1128 | source_range: 201..201, |
1118 | delete: [201; 201), | 1129 | delete: 201..201, |
1119 | insert: "the_field", | 1130 | insert: "the_field", |
1120 | kind: Field, | 1131 | kind: Field, |
1121 | detail: "u32", | 1132 | detail: "u32", |
@@ -1142,16 +1153,16 @@ mod tests { | |||
1142 | [ | 1153 | [ |
1143 | CompletionItem { | 1154 | CompletionItem { |
1144 | label: "another_field", | 1155 | label: "another_field", |
1145 | source_range: [208; 208), | 1156 | source_range: 208..208, |
1146 | delete: [208; 208), | 1157 | delete: 208..208, |
1147 | insert: "another_field", | 1158 | insert: "another_field", |
1148 | kind: Field, | 1159 | kind: Field, |
1149 | detail: "i64", | 1160 | detail: "i64", |
1150 | }, | 1161 | }, |
1151 | CompletionItem { | 1162 | CompletionItem { |
1152 | label: "another_good_type", | 1163 | label: "another_good_type", |
1153 | source_range: [208; 208), | 1164 | source_range: 208..208, |
1154 | delete: [208; 208), | 1165 | delete: 208..208, |
1155 | insert: "another_good_type", | 1166 | insert: "another_good_type", |
1156 | kind: Field, | 1167 | kind: Field, |
1157 | detail: "u32", | 1168 | detail: "u32", |
@@ -1159,8 +1170,8 @@ mod tests { | |||
1159 | }, | 1170 | }, |
1160 | CompletionItem { | 1171 | CompletionItem { |
1161 | label: "the_field", | 1172 | label: "the_field", |
1162 | source_range: [208; 208), | 1173 | source_range: 208..208, |
1163 | delete: [208; 208), | 1174 | delete: 208..208, |
1164 | insert: "the_field", | 1175 | insert: "the_field", |
1165 | kind: Field, | 1176 | kind: Field, |
1166 | detail: "u32", | 1177 | detail: "u32", |
@@ -1190,16 +1201,16 @@ mod tests { | |||
1190 | [ | 1201 | [ |
1191 | CompletionItem { | 1202 | CompletionItem { |
1192 | label: "another_field", | 1203 | label: "another_field", |
1193 | source_range: [270; 270), | 1204 | source_range: 270..270, |
1194 | delete: [270; 270), | 1205 | delete: 270..270, |
1195 | insert: "another_field", | 1206 | insert: "another_field", |
1196 | kind: Field, | 1207 | kind: Field, |
1197 | detail: "i64", | 1208 | detail: "i64", |
1198 | }, | 1209 | }, |
1199 | CompletionItem { | 1210 | CompletionItem { |
1200 | label: "another_good_type", | 1211 | label: "another_good_type", |
1201 | source_range: [270; 270), | 1212 | source_range: 270..270, |
1202 | delete: [270; 270), | 1213 | delete: 270..270, |
1203 | insert: "another_good_type", | 1214 | insert: "another_good_type", |
1204 | kind: Field, | 1215 | kind: Field, |
1205 | detail: "u32", | 1216 | detail: "u32", |
@@ -1207,8 +1218,8 @@ mod tests { | |||
1207 | }, | 1218 | }, |
1208 | CompletionItem { | 1219 | CompletionItem { |
1209 | label: "the_field", | 1220 | label: "the_field", |
1210 | source_range: [270; 270), | 1221 | source_range: 270..270, |
1211 | delete: [270; 270), | 1222 | delete: 270..270, |
1212 | insert: "the_field", | 1223 | insert: "the_field", |
1213 | kind: Field, | 1224 | kind: Field, |
1214 | detail: "u32", | 1225 | detail: "u32", |
@@ -1238,8 +1249,8 @@ mod tests { | |||
1238 | [ | 1249 | [ |
1239 | CompletionItem { | 1250 | CompletionItem { |
1240 | label: "another_field", | 1251 | label: "another_field", |
1241 | source_range: [336; 336), | 1252 | source_range: 336..336, |
1242 | delete: [336; 336), | 1253 | delete: 336..336, |
1243 | insert: "another_field", | 1254 | insert: "another_field", |
1244 | kind: Field, | 1255 | kind: Field, |
1245 | detail: "i64", | 1256 | detail: "i64", |
@@ -1247,16 +1258,16 @@ mod tests { | |||
1247 | }, | 1258 | }, |
1248 | CompletionItem { | 1259 | CompletionItem { |
1249 | label: "another_good_type", | 1260 | label: "another_good_type", |
1250 | source_range: [336; 336), | 1261 | source_range: 336..336, |
1251 | delete: [336; 336), | 1262 | delete: 336..336, |
1252 | insert: "another_good_type", | 1263 | insert: "another_good_type", |
1253 | kind: Field, | 1264 | kind: Field, |
1254 | detail: "u32", | 1265 | detail: "u32", |
1255 | }, | 1266 | }, |
1256 | CompletionItem { | 1267 | CompletionItem { |
1257 | label: "the_field", | 1268 | label: "the_field", |
1258 | source_range: [336; 336), | 1269 | source_range: 336..336, |
1259 | delete: [336; 336), | 1270 | delete: 336..336, |
1260 | insert: "the_field", | 1271 | insert: "the_field", |
1261 | kind: Field, | 1272 | kind: Field, |
1262 | detail: "u32", | 1273 | detail: "u32", |
@@ -1285,16 +1296,16 @@ mod tests { | |||
1285 | [ | 1296 | [ |
1286 | CompletionItem { | 1297 | CompletionItem { |
1287 | label: "another_field", | 1298 | label: "another_field", |
1288 | source_range: [328; 328), | 1299 | source_range: 328..328, |
1289 | delete: [328; 328), | 1300 | delete: 328..328, |
1290 | insert: "another_field", | 1301 | insert: "another_field", |
1291 | kind: Field, | 1302 | kind: Field, |
1292 | detail: "i64", | 1303 | detail: "i64", |
1293 | }, | 1304 | }, |
1294 | CompletionItem { | 1305 | CompletionItem { |
1295 | label: "another_good_type", | 1306 | label: "another_good_type", |
1296 | source_range: [328; 328), | 1307 | source_range: 328..328, |
1297 | delete: [328; 328), | 1308 | delete: 328..328, |
1298 | insert: "another_good_type", | 1309 | insert: "another_good_type", |
1299 | kind: Field, | 1310 | kind: Field, |
1300 | detail: "u32", | 1311 | detail: "u32", |
@@ -1302,8 +1313,8 @@ mod tests { | |||
1302 | }, | 1313 | }, |
1303 | CompletionItem { | 1314 | CompletionItem { |
1304 | label: "the_field", | 1315 | label: "the_field", |
1305 | source_range: [328; 328), | 1316 | source_range: 328..328, |
1306 | delete: [328; 328), | 1317 | delete: 328..328, |
1307 | insert: "the_field", | 1318 | insert: "the_field", |
1308 | kind: Field, | 1319 | kind: Field, |
1309 | detail: "u32", | 1320 | detail: "u32", |