From fc1301de00b1d32ebdb441e4cc39ffcc9ba910dd Mon Sep 17 00:00:00 2001 From: Alexander Glusker Date: Wed, 17 Jan 2024 21:04:29 +0300 Subject: [PATCH] In macro definitions new name can start from $ without spaces before it. --- src/macros.rs | 7 +++++++ tests/source/issue-5905/test.rs | 8 ++++++++ tests/target/issue-5905/test.rs | 7 +++++++ 3 files changed, 22 insertions(+) create mode 100644 tests/source/issue-5905/test.rs create mode 100644 tests/target/issue-5905/test.rs diff --git a/src/macros.rs b/src/macros.rs index 6e114c76f26..3acfb1b89f0 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -520,6 +520,13 @@ fn replace_names(input: &str) -> Option<(String, HashMap)> { if kind != FullCodeCharKind::Normal { result.push(c); } else if c == '$' { + // the name can end by starting new name with $ + if !cur_name.is_empty() { + dbg!(&cur_name); + register_metavariable(&mut substs, &mut result, &cur_name, dollar_count); + dollar_count = 0; + cur_name.clear(); + } dollar_count += 1; } else if dollar_count == 0 { result.push(c); diff --git a/tests/source/issue-5905/test.rs b/tests/source/issue-5905/test.rs new file mode 100644 index 00000000000..5ba5a6d12e7 --- /dev/null +++ b/tests/source/issue-5905/test.rs @@ -0,0 +1,8 @@ +macro_rules! test_macro { + ($member:ident $($rest:tt)*) => { + paste::paste! {fn test(&self) { + (self.$member$($rest)* ) + }} + }; +} + diff --git a/tests/target/issue-5905/test.rs b/tests/target/issue-5905/test.rs new file mode 100644 index 00000000000..90c514c73ff --- /dev/null +++ b/tests/target/issue-5905/test.rs @@ -0,0 +1,7 @@ +macro_rules! test_macro { + ($member:ident $($rest:tt)*) => { + paste::paste! {fn test(&self) { + (self.$member$($rest)* ) + }} + }; +}