diff --git a/crates/ide_completion/src/completions/snippet.rs b/crates/ide_completion/src/completions/snippet.rs index 6a0e09dd64d..c00de6ff50f 100644 --- a/crates/ide_completion/src/completions/snippet.rs +++ b/crates/ide_completion/src/completions/snippet.rs @@ -43,7 +43,7 @@ pub(crate) fn complete_expr_snippet(acc: &mut Completions, ctx: &CompletionConte } pub(crate) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionContext) { - if !ctx.expects_item() + if !(ctx.expects_item() || ctx.has_block_expr_parent()) || ctx.previous_token_is(T![unsafe]) || ctx.path_qual().is_some() || ctx.has_impl_or_trait_prev_sibling() @@ -63,11 +63,13 @@ pub(crate) fn complete_item_snippet(acc: &mut Completions, ctx: &CompletionConte add_custom_completions(acc, ctx, cap, SnippetScope::Item); } - let mut item = snippet( - ctx, - cap, - "tmod (Test module)", - "\ + // Test-related snippets shouldn't be shown in blocks. + if !ctx.has_block_expr_parent() { + let mut item = snippet( + ctx, + cap, + "tmod (Test module)", + "\ #[cfg(test)] mod tests { use super::*; @@ -77,22 +79,23 @@ fn ${1:test_name}() { $0 } }", - ); - item.lookup_by("tmod"); - item.add_to(acc); + ); + item.lookup_by("tmod"); + item.add_to(acc); - let mut item = snippet( - ctx, - cap, - "tfn (Test function)", - "\ + let mut item = snippet( + ctx, + cap, + "tfn (Test function)", + "\ #[test] fn ${1:feature}() { $0 }", - ); - item.lookup_by("tfn"); - item.add_to(acc); + ); + item.lookup_by("tfn"); + item.add_to(acc); + } let item = snippet( ctx, diff --git a/crates/ide_completion/src/tests/expression.rs b/crates/ide_completion/src/tests/expression.rs index 650c68134dd..5984149046a 100644 --- a/crates/ide_completion/src/tests/expression.rs +++ b/crates/ide_completion/src/tests/expression.rs @@ -153,6 +153,7 @@ fn local_func() {} kw return sn pd sn ppd + sn macro_rules kw self kw super kw crate @@ -246,10 +247,11 @@ fn foo() { kw return sn pd sn ppd + sn macro_rules kw self kw super kw crate - fn foo() fn() + fn foo() fn() bt u32 "#]], ) @@ -293,10 +295,11 @@ fn foo() { kw return sn pd sn ppd + sn macro_rules kw self kw super kw crate - fn foo() fn() + fn foo() fn() bt u32 "#]], ) @@ -366,10 +369,11 @@ fn completes_in_loop_ctx() { kw return sn pd sn ppd + sn macro_rules kw self kw super kw crate - fn my() fn() + fn my() fn() bt u32 "#]], );