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
This commit is contained in:
bors 2022-04-27 12:41:29 +00:00
commit 9f69d024ed
2 changed files with 27 additions and 20 deletions

View file

@ -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);
);
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,

View file

@ -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
"#]],
);