From cb10a13431e73f46e53187e4dce115955db96afe Mon Sep 17 00:00:00 2001 From: shulaoda <165626830+shulaoda@users.noreply.github.com> Date: Sun, 2 Aug 2026 04:25:30 +0800 Subject: [PATCH] Fix idempotency issue with raw strings --- src/comment.rs | 15 ++++++++++++++- tests/source/issue-6161.rs | 8 ++++++++ tests/target/issue-6161.rs | 8 ++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/source/issue-6161.rs create mode 100644 tests/target/issue-6161.rs diff --git a/src/comment.rs b/src/comment.rs index 05d7310122a..14ed0654ac4 100644 --- a/src/comment.rs +++ b/src/comment.rs @@ -1368,7 +1368,6 @@ where match chr { '"' => { if sharps == 0 { - char_kind = FullCodeCharKind::Normal; CharClassesStatus::Normal } else if is_raw_string_suffix(&mut self.base, sharps) { CharClassesStatus::RawStringSuffix(sharps) @@ -1862,6 +1861,20 @@ mod test { assert_eq!(None, iter.next()); } + #[test] + fn char_classes_hashless_raw_string() { + let mut iter = CharClasses::new("r\"a\nb\",".chars()); + + assert_eq!((FullCodeCharKind::InString, 'r'), iter.next().unwrap()); + assert_eq!((FullCodeCharKind::InString, '"'), iter.next().unwrap()); + assert_eq!((FullCodeCharKind::InString, 'a'), iter.next().unwrap()); + assert_eq!((FullCodeCharKind::InString, '\n'), iter.next().unwrap()); + assert_eq!((FullCodeCharKind::InString, 'b'), iter.next().unwrap()); + assert_eq!((FullCodeCharKind::InString, '"'), iter.next().unwrap()); + assert_eq!((FullCodeCharKind::Normal, ','), iter.next().unwrap()); + assert_eq!(None, iter.next()); + } + #[test] fn comment_code_slices() { let input = "code(); /* test */ 1 + 1"; diff --git a/tests/source/issue-6161.rs b/tests/source/issue-6161.rs new file mode 100644 index 00000000000..7bf46dd11d4 --- /dev/null +++ b/tests/source/issue-6161.rs @@ -0,0 +1,8 @@ +fn f() { +my_macro! { + m => + "a": r"bb + ccc +", +}; +} diff --git a/tests/target/issue-6161.rs b/tests/target/issue-6161.rs new file mode 100644 index 00000000000..2ba75c73871 --- /dev/null +++ b/tests/target/issue-6161.rs @@ -0,0 +1,8 @@ +fn f() { + my_macro! { + m => + "a": r"bb + ccc +", + }; +}