diff options
Diffstat (limited to 'crates/ide_completion/src/completions/snippet.rs')
-rw-r--r-- | crates/ide_completion/src/completions/snippet.rs | 28 |
1 files changed, 8 insertions, 20 deletions
diff --git a/crates/ide_completion/src/completions/snippet.rs b/crates/ide_completion/src/completions/snippet.rs index b9862de67..81ddfa34f 100644 --- a/crates/ide_completion/src/completions/snippet.rs +++ b/crates/ide_completion/src/completions/snippet.rs | |||
@@ -1,6 +1,7 @@ | |||
1 | //! This file provides snippet completions, like `pd` => `eprintln!(...)`. | 1 | //! This file provides snippet completions, like `pd` => `eprintln!(...)`. |
2 | 2 | ||
3 | use ide_db::helpers::SnippetCap; | 3 | use ide_db::helpers::SnippetCap; |
4 | use syntax::T; | ||
4 | 5 | ||
5 | use crate::{ | 6 | use crate::{ |
6 | context::PathCompletionContext, item::Builder, CompletionContext, CompletionItem, | 7 | context::PathCompletionContext, item::Builder, CompletionContext, CompletionItem, |
@@ -35,9 +36,13 @@ pub(crate) fn complete_expr_snippet(acc: &mut Completions, ctx: &CompletionConte | |||
35 | } | 36 | } |
36 | 37 | ||
37 | pub(crate) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionContext) { | 38 | pub(crate) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionContext) { |
38 | if !ctx.expects_item() { | 39 | if !ctx.expects_item() || ctx.previous_token_is(T![unsafe]) || ctx.path_qual().is_some() { |
39 | return; | 40 | return; |
40 | } | 41 | } |
42 | if ctx.has_visibility_prev_sibling() { | ||
43 | return; // technically we could do some of these snippet completions if we were to put the | ||
44 | // attributes before the vis node. | ||
45 | } | ||
41 | let cap = match ctx.config.snippet_cap { | 46 | let cap = match ctx.config.snippet_cap { |
42 | Some(it) => it, | 47 | Some(it) => it, |
43 | None => return, | 48 | None => return, |
@@ -82,10 +87,10 @@ fn ${1:feature}() { | |||
82 | mod tests { | 87 | mod tests { |
83 | use expect_test::{expect, Expect}; | 88 | use expect_test::{expect, Expect}; |
84 | 89 | ||
85 | use crate::{test_utils::completion_list, CompletionKind}; | 90 | use crate::{tests::filtered_completion_list, CompletionKind}; |
86 | 91 | ||
87 | fn check(ra_fixture: &str, expect: Expect) { | 92 | fn check(ra_fixture: &str, expect: Expect) { |
88 | let actual = completion_list(ra_fixture, CompletionKind::Snippet); | 93 | let actual = filtered_completion_list(ra_fixture, CompletionKind::Snippet); |
89 | expect.assert_eq(&actual) | 94 | expect.assert_eq(&actual) |
90 | } | 95 | } |
91 | 96 | ||
@@ -105,21 +110,4 @@ mod tests { | |||
105 | check(r#"fn foo(x: i32) { ::foo$0 }"#, expect![[""]]); | 110 | check(r#"fn foo(x: i32) { ::foo$0 }"#, expect![[""]]); |
106 | check(r#"fn foo(x: i32) { ::$0 }"#, expect![[""]]); | 111 | check(r#"fn foo(x: i32) { ::$0 }"#, expect![[""]]); |
107 | } | 112 | } |
108 | |||
109 | #[test] | ||
110 | fn completes_snippets_in_items() { | ||
111 | check( | ||
112 | r#" | ||
113 | #[cfg(test)] | ||
114 | mod tests { | ||
115 | $0 | ||
116 | } | ||
117 | "#, | ||
118 | expect![[r#" | ||
119 | sn tmod (Test module) | ||
120 | sn tfn (Test function) | ||
121 | sn macro_rules | ||
122 | "#]], | ||
123 | ) | ||
124 | } | ||
125 | } | 113 | } |