diff options
| author | bors <bors@rust-lang.org> | 2022-04-27 12:41:29 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-04-27 12:41:29 +0000 |
| commit | 9f69d024edb3b8acaa3edeb6730d1800c1185da8 (patch) | |
| tree | f88e33cb757695d79e08b0172b0ae24242d69ccd | |
| parent | 9e6ca0dacfabbe5e55a3014f79c982def0af399f (diff) | |
| parent | 0060d5977d08c6d7867374598581fd847a66e078 (diff) | |
| download | rust-9f69d024edb3b8acaa3edeb6730d1800c1185da8.tar.gz rust-9f69d024edb3b8acaa3edeb6730d1800c1185da8.zip | |
Auto merge of #12098 - jonas-schievink:macro-rules-snippet, r=jonas-schievink
fix: show `macro_rules` snippet in blocks fixes https://github.com/rust-lang/rust-analyzer/issues/12092
| -rw-r--r-- | crates/ide_completion/src/completions/snippet.rs | 39 | ||||
| -rw-r--r-- | crates/ide_completion/src/tests/expression.rs | 10 |
2 files changed, 28 insertions, 21 deletions
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 @@ mod tests { $0 } }", - ); - item.lookup_by("tmod"); - item.add_to(acc); - - let mut item = snippet( - ctx, - cap, - "tfn (Test function)", - "\ + ); + item.lookup_by("tmod"); + item.add_to(acc); + + 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 @@ impl Unit { kw return sn pd sn ppd + sn macro_rules kw self kw super kw crate @@ -246,10 +247,11 @@ fn complete_in_block() { 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 complete_after_if_expr() { 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 "#]], ); |
