diff options
Diffstat (limited to 'crates/ra_mbe/src/tests.rs')
-rw-r--r-- | crates/ra_mbe/src/tests.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/crates/ra_mbe/src/tests.rs b/crates/ra_mbe/src/tests.rs index e640d115b..e0d689704 100644 --- a/crates/ra_mbe/src/tests.rs +++ b/crates/ra_mbe/src/tests.rs | |||
@@ -1491,3 +1491,51 @@ fn debug_dump_ignore_spaces(node: &ra_syntax::SyntaxNode) -> String { | |||
1491 | 1491 | ||
1492 | buf | 1492 | buf |
1493 | } | 1493 | } |
1494 | |||
1495 | #[test] | ||
1496 | fn test_issue_2520() { | ||
1497 | let macro_fixture = parse_macro( | ||
1498 | r#" | ||
1499 | macro_rules! my_macro { | ||
1500 | { | ||
1501 | ( $( | ||
1502 | $( [] $sname:ident : $stype:ty )? | ||
1503 | $( [$expr:expr] $nname:ident : $ntype:ty )? | ||
1504 | ),* ) | ||
1505 | } => { | ||
1506 | Test { | ||
1507 | $( | ||
1508 | $( $sname, )? | ||
1509 | )* | ||
1510 | } | ||
1511 | }; | ||
1512 | } | ||
1513 | "#, | ||
1514 | ); | ||
1515 | |||
1516 | macro_fixture.assert_expand_items( | ||
1517 | r#"my_macro ! { | ||
1518 | ([] p1 : u32 , [|_| S0K0] s : S0K0 , [] k0 : i32) | ||
1519 | }"#, | ||
1520 | "Test {p1 , k0 ,}", | ||
1521 | ); | ||
1522 | } | ||
1523 | |||
1524 | #[test] | ||
1525 | fn test_repeat_bad_var() { | ||
1526 | // FIXME: the second rule of the macro should be removed and an error about | ||
1527 | // `$( $c )+` raised | ||
1528 | parse_macro( | ||
1529 | r#" | ||
1530 | macro_rules! foo { | ||
1531 | ($( $b:ident )+) => { | ||
1532 | $( $c )+ | ||
1533 | }; | ||
1534 | ($( $b:ident )+) => { | ||
1535 | $( $b )+ | ||
1536 | } | ||
1537 | } | ||
1538 | "#, | ||
1539 | ) | ||
1540 | .assert_expand_items("foo!(b0 b1);", "b0 b1"); | ||
1541 | } | ||