about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-04-27 12:41:29 +0000
committerbors <bors@rust-lang.org>2022-04-27 12:41:29 +0000
commit9f69d024edb3b8acaa3edeb6730d1800c1185da8 (patch)
treef88e33cb757695d79e08b0172b0ae24242d69ccd
parent9e6ca0dacfabbe5e55a3014f79c982def0af399f (diff)
parent0060d5977d08c6d7867374598581fd847a66e078 (diff)
downloadrust-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.rs39
-rw-r--r--crates/ide_completion/src/tests/expression.rs10
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
         "#]],
     );