]> git.lizzy.rs Git - rust.git/commitdiff
Fix parsing of interpolated expressions
authorAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 19 Dec 2019 13:43:19 +0000 (14:43 +0100)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 19 Dec 2019 13:43:19 +0000 (14:43 +0100)
crates/ra_mbe/src/tests.rs
crates/ra_parser/src/grammar/expressions/atom.rs

index ff225f0db21d8ba650bc25cb38b187927bcca1b8..b5a10a9d2ffa405a7bee2f1360e5d2111ee99580 100644 (file)
@@ -1450,6 +1450,24 @@ fn $method_name(self $(: $self_selftype)* $(,$marg: $marg_ty)*) -> $mret {
     );
 }
 
+#[test]
+fn expr_interpolation() {
+    let rules = create_rules(
+        r#"
+        macro_rules! id {
+            ($expr:expr) => {
+                map($expr)
+            }
+        }
+        "#,
+    );
+
+    let expanded = expand(&rules, "id!(x + foo);");
+    let expanded =
+        token_tree_to_syntax_node(&expanded, FragmentKind::Expr).unwrap().0.syntax_node();
+    assert_eq!(expanded.to_string(), "map(x+foo)");
+}
+
 pub(crate) fn create_rules(macro_definition: &str) -> MacroRules {
     let source_file = ast::SourceFile::parse(macro_definition).ok().unwrap();
     let macro_definition =
index 09f0a2d98a1e0ef537da297b16003c8ac90134a7..6f5545a83a6ac0521183778927abb064131043a7 100644 (file)
@@ -43,6 +43,7 @@ pub(crate) fn literal(p: &mut Parser) -> Option<CompletedMarker> {
         T!['('],
         T!['{'],
         T!['['],
+        L_DOLLAR,
         T![|],
         T![move],
         T![box],