Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir_def/src/macro_expansion_tests.rs1
-rw-r--r--crates/hir_def/src/macro_expansion_tests/mbe.rs26
-rw-r--r--crates/mbe/src/tests/expand.rs22
3 files changed, 27 insertions, 22 deletions
diff --git a/crates/hir_def/src/macro_expansion_tests.rs b/crates/hir_def/src/macro_expansion_tests.rs
index 83765bfb51..a899b2c1f3 100644
--- a/crates/hir_def/src/macro_expansion_tests.rs
+++ b/crates/hir_def/src/macro_expansion_tests.rs
@@ -102,6 +102,7 @@ fn pretty_print_macro_expansion(expn: SyntaxNode) -> String {
let space = match (prev_kind, curr_kind) {
_ if prev_kind.is_trivia() || curr_kind.is_trivia() => "",
(T![=], _) | (_, T![=]) => " ",
+ (_, T!['{']) => " ",
(T![;], _) => "\n",
(IDENT | LIFETIME_IDENT, IDENT | LIFETIME_IDENT) => " ",
(IDENT, _) if curr_kind.is_keyword() => " ",
diff --git a/crates/hir_def/src/macro_expansion_tests/mbe.rs b/crates/hir_def/src/macro_expansion_tests/mbe.rs
index cc6551f8aa..1e3d554b83 100644
--- a/crates/hir_def/src/macro_expansion_tests/mbe.rs
+++ b/crates/hir_def/src/macro_expansion_tests/mbe.rs
@@ -46,3 +46,29 @@ macro_rules! m {
"#]],
);
}
+
+#[test]
+fn tries_all_branches_matching_token_literally() {
+ check(
+ r#"
+macro_rules! m {
+ ($ i:ident) => ( mod $ i {} );
+ (= $ i:ident) => ( fn $ i() {} );
+ (+ $ i:ident) => ( struct $ i; )
+}
+m! { foo }
+m! { = bar }
+m! { + Baz }
+"#,
+ expect![[r#"
+macro_rules! m {
+ ($ i:ident) => ( mod $ i {} );
+ (= $ i:ident) => ( fn $ i() {} );
+ (+ $ i:ident) => ( struct $ i; )
+}
+mod foo {}
+fn bar() {}
+struct Baz;
+"#]],
+ )
+}
diff --git a/crates/mbe/src/tests/expand.rs b/crates/mbe/src/tests/expand.rs
index 360d24db57..48143f0a60 100644
--- a/crates/mbe/src/tests/expand.rs
+++ b/crates/mbe/src/tests/expand.rs
@@ -210,28 +210,6 @@ fn test_expr_order() {
}
#[test]
-fn test_fail_match_pattern_by_first_token() {
- parse_macro(
- r#"
- macro_rules! foo {
- ($ i:ident) => (
- mod $ i {}
- );
- (= $ i:ident) => (
- fn $ i() {}
- );
- (+ $ i:ident) => (
- struct $ i;
- )
- }
-"#,
- )
- .assert_expand_items("foo! { foo }", "mod foo {}")
- .assert_expand_items("foo! { = bar }", "fn bar () {}")
- .assert_expand_items("foo! { + Baz }", "struct Baz ;");
-}
-
-#[test]
fn test_fail_match_pattern_by_last_token() {
parse_macro(
r#"