diff options
-rw-r--r-- | crates/ra_analysis/src/completion.rs | 2 | ||||
-rw-r--r-- | crates/ra_analysis/src/completion/complete_keyword.rs | 64 | ||||
-rw-r--r-- | crates/ra_analysis/src/completion/complete_use_tree.rs | 75 |
3 files changed, 77 insertions, 64 deletions
diff --git a/crates/ra_analysis/src/completion.rs b/crates/ra_analysis/src/completion.rs index fe580700f..a795dd767 100644 --- a/crates/ra_analysis/src/completion.rs +++ b/crates/ra_analysis/src/completion.rs | |||
@@ -7,6 +7,7 @@ mod complete_keyword; | |||
7 | mod complete_snippet; | 7 | mod complete_snippet; |
8 | mod complete_path; | 8 | mod complete_path; |
9 | mod complete_scope; | 9 | mod complete_scope; |
10 | mod complete_use_tree; | ||
10 | 11 | ||
11 | use ra_db::SyntaxDatabase; | 12 | use ra_db::SyntaxDatabase; |
12 | 13 | ||
@@ -45,6 +46,7 @@ pub(crate) fn completions( | |||
45 | complete_path::complete_path(&mut acc, &ctx)?; | 46 | complete_path::complete_path(&mut acc, &ctx)?; |
46 | complete_scope::complete_scope(&mut acc, &ctx)?; | 47 | complete_scope::complete_scope(&mut acc, &ctx)?; |
47 | complete_dot::complete_dot(&mut acc, &ctx)?; | 48 | complete_dot::complete_dot(&mut acc, &ctx)?; |
49 | complete_use_tree::complete_use_tree_keyword(&mut acc, &ctx); | ||
48 | 50 | ||
49 | Ok(Some(acc)) | 51 | Ok(Some(acc)) |
50 | } | 52 | } |
diff --git a/crates/ra_analysis/src/completion/complete_keyword.rs b/crates/ra_analysis/src/completion/complete_keyword.rs index dd81fc008..a381046e9 100644 --- a/crates/ra_analysis/src/completion/complete_keyword.rs +++ b/crates/ra_analysis/src/completion/complete_keyword.rs | |||
@@ -15,36 +15,6 @@ fn keyword(kw: &str, snippet: &str) -> CompletionItem { | |||
15 | } | 15 | } |
16 | 16 | ||
17 | pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionContext) { | 17 | pub(super) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionContext) { |
18 | // complete keyword "crate" in use stmt | ||
19 | match (ctx.use_item_syntax.as_ref(), ctx.path_prefix.as_ref()) { | ||
20 | (Some(_), None) => { | ||
21 | CompletionItem::new(CompletionKind::Keyword, "crate") | ||
22 | .kind(CompletionItemKind::Keyword) | ||
23 | .lookup_by("crate") | ||
24 | .snippet("crate::") | ||
25 | .add_to(acc); | ||
26 | CompletionItem::new(CompletionKind::Keyword, "self") | ||
27 | .kind(CompletionItemKind::Keyword) | ||
28 | .lookup_by("self") | ||
29 | .add_to(acc); | ||
30 | CompletionItem::new(CompletionKind::Keyword, "super") | ||
31 | .kind(CompletionItemKind::Keyword) | ||
32 | .lookup_by("super") | ||
33 | .add_to(acc); | ||
34 | } | ||
35 | (Some(_), Some(_)) => { | ||
36 | CompletionItem::new(CompletionKind::Keyword, "self") | ||
37 | .kind(CompletionItemKind::Keyword) | ||
38 | .lookup_by("self") | ||
39 | .add_to(acc); | ||
40 | CompletionItem::new(CompletionKind::Keyword, "super") | ||
41 | .kind(CompletionItemKind::Keyword) | ||
42 | .lookup_by("super") | ||
43 | .add_to(acc); | ||
44 | } | ||
45 | _ => {} | ||
46 | } | ||
47 | |||
48 | if !ctx.is_trivial_path { | 18 | if !ctx.is_trivial_path { |
49 | return; | 19 | return; |
50 | } | 20 | } |
@@ -300,38 +270,4 @@ mod tests { | |||
300 | "#, | 270 | "#, |
301 | ) | 271 | ) |
302 | } | 272 | } |
303 | |||
304 | #[test] | ||
305 | fn completes_keywords_in_use_stmt() { | ||
306 | check_keyword_completion( | ||
307 | r" | ||
308 | use <|> | ||
309 | ", | ||
310 | r#" | ||
311 | crate "crate" "crate::" | ||
312 | self "self" | ||
313 | super "super" | ||
314 | "#, | ||
315 | ); | ||
316 | |||
317 | check_keyword_completion( | ||
318 | r" | ||
319 | use a::<|> | ||
320 | ", | ||
321 | r#" | ||
322 | self "self" | ||
323 | super "super" | ||
324 | "#, | ||
325 | ); | ||
326 | |||
327 | check_keyword_completion( | ||
328 | r" | ||
329 | use a::{b, <|>} | ||
330 | ", | ||
331 | r#" | ||
332 | self "self" | ||
333 | super "super" | ||
334 | "#, | ||
335 | ); | ||
336 | } | ||
337 | } | 273 | } |
diff --git a/crates/ra_analysis/src/completion/complete_use_tree.rs b/crates/ra_analysis/src/completion/complete_use_tree.rs new file mode 100644 index 000000000..5f2f6e449 --- /dev/null +++ b/crates/ra_analysis/src/completion/complete_use_tree.rs | |||
@@ -0,0 +1,75 @@ | |||
1 | use crate::completion::{CompletionContext, CompletionItem, Completions, CompletionKind, CompletionItemKind}; | ||
2 | |||
3 | pub(super) fn complete_use_tree_keyword(acc: &mut Completions, ctx: &CompletionContext) { | ||
4 | // complete keyword "crate" in use stmt | ||
5 | match (ctx.use_item_syntax.as_ref(), ctx.path_prefix.as_ref()) { | ||
6 | (Some(_), None) => { | ||
7 | CompletionItem::new(CompletionKind::Keyword, "crate") | ||
8 | .kind(CompletionItemKind::Keyword) | ||
9 | .lookup_by("crate") | ||
10 | .snippet("crate::") | ||
11 | .add_to(acc); | ||
12 | CompletionItem::new(CompletionKind::Keyword, "self") | ||
13 | .kind(CompletionItemKind::Keyword) | ||
14 | .lookup_by("self") | ||
15 | .add_to(acc); | ||
16 | CompletionItem::new(CompletionKind::Keyword, "super") | ||
17 | .kind(CompletionItemKind::Keyword) | ||
18 | .lookup_by("super") | ||
19 | .add_to(acc); | ||
20 | } | ||
21 | (Some(_), Some(_)) => { | ||
22 | CompletionItem::new(CompletionKind::Keyword, "self") | ||
23 | .kind(CompletionItemKind::Keyword) | ||
24 | .lookup_by("self") | ||
25 | .add_to(acc); | ||
26 | CompletionItem::new(CompletionKind::Keyword, "super") | ||
27 | .kind(CompletionItemKind::Keyword) | ||
28 | .lookup_by("super") | ||
29 | .add_to(acc); | ||
30 | } | ||
31 | _ => {} | ||
32 | } | ||
33 | } | ||
34 | |||
35 | #[cfg(test)] | ||
36 | mod tests { | ||
37 | use crate::completion::{CompletionKind, check_completion}; | ||
38 | fn check_keyword_completion(code: &str, expected_completions: &str) { | ||
39 | check_completion(code, expected_completions, CompletionKind::Keyword); | ||
40 | } | ||
41 | |||
42 | #[test] | ||
43 | fn completes_keywords_in_use_stmt() { | ||
44 | check_keyword_completion( | ||
45 | r" | ||
46 | use <|> | ||
47 | ", | ||
48 | r#" | ||
49 | crate "crate" "crate::" | ||
50 | self "self" | ||
51 | super "super" | ||
52 | "#, | ||
53 | ); | ||
54 | |||
55 | check_keyword_completion( | ||
56 | r" | ||
57 | use a::<|> | ||
58 | ", | ||
59 | r#" | ||
60 | self "self" | ||
61 | super "super" | ||
62 | "#, | ||
63 | ); | ||
64 | |||
65 | check_keyword_completion( | ||
66 | r" | ||
67 | use a::{b, <|>} | ||
68 | ", | ||
69 | r#" | ||
70 | self "self" | ||
71 | super "super" | ||
72 | "#, | ||
73 | ); | ||
74 | } | ||
75 | } | ||