Fix parsing of interpolated expressions

This commit is contained in:
Aleksey Kladov 2019-12-19 14:43:19 +01:00
parent 8dd0e0086f
commit 5c3c2b8690
2 changed files with 19 additions and 0 deletions

View File

@ -1450,6 +1450,24 @@ macro_rules! delegate_impl {
);
}
#[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 =

View File

@ -43,6 +43,7 @@ pub(super) const ATOM_EXPR_FIRST: TokenSet =
T!['('],
T!['{'],
T!['['],
L_DOLLAR,
T![|],
T![move],
T![box],