From 024d2dcd52f9c0bce7ef3545a2f5f1e740bea03a Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 29 Jan 2023 12:24:23 -0800 Subject: [PATCH 1/3] Make angle bracket parsing test trickier Currently fails: error: argument must be a single string literal --> tests/test_writedoc.rs:51:38 | 51 | if ZERO < Pair:: (), ()>::ONE { &mut s } else { &mut s }, | ^^ --- tests/test_writedoc.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_writedoc.rs b/tests/test_writedoc.rs index 8d19468..b87f2f4 100644 --- a/tests/test_writedoc.rs +++ b/tests/test_writedoc.rs @@ -42,13 +42,13 @@ fn test_angle_bracket_parsing() { const ZERO: usize = 0; struct Pair(A, B); - impl Pair<(), ()> { + impl Pair { const ONE: usize = 1; } let mut s = String::new(); let _ = writedoc! { - if ZERO < Pair::<(), ()>::ONE { &mut s } else { &mut s }, + if ZERO < Pair:: (), ()>::ONE { &mut s } else { &mut s }, "writedoc", }; From 2dbd0aa418af29254ecf50ea1c8634815245428a Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 29 Jan 2023 12:34:17 -0800 Subject: [PATCH 2/3] Fix parsing of angle brackets in writedoc expr argument --- src/expr.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/expr.rs b/src/expr.rs index e802e20..4c98d25 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -11,6 +11,7 @@ pub fn parse(input: &mut TokenIter) -> Result { JointColon, DoubleColon, Other, + JointOther, } let mut expr = TokenStream::new(); @@ -31,11 +32,14 @@ pub fn parse(input: &mut TokenIter) -> Result { angle_bracket_depth += 1; Lookbehind::Other } - '>' if angle_bracket_depth > 0 => { + '>' if angle_bracket_depth > 0 && lookbehind != Lookbehind::JointOther => { angle_bracket_depth -= 1; Lookbehind::Other } - _ => Lookbehind::Other, + _ => match spacing { + Spacing::Joint => Lookbehind::JointOther, + Spacing::Alone => Lookbehind::Other, + }, }; } Some(token) => expr.extend(iter::once(token)), From f9e455ef883175d51d3c1f2b8832c187cf1eb8e8 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 29 Jan 2023 12:41:59 -0800 Subject: [PATCH 3/3] Recognize '->' token more specifically --- src/expr.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/expr.rs b/src/expr.rs index 4c98d25..bb0f6ba 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -10,8 +10,8 @@ pub fn parse(input: &mut TokenIter) -> Result { enum Lookbehind { JointColon, DoubleColon, + JointHyphen, Other, - JointOther, } let mut expr = TokenStream::new(); @@ -32,14 +32,12 @@ pub fn parse(input: &mut TokenIter) -> Result { angle_bracket_depth += 1; Lookbehind::Other } - '>' if angle_bracket_depth > 0 && lookbehind != Lookbehind::JointOther => { + '>' if angle_bracket_depth > 0 && lookbehind != Lookbehind::JointHyphen => { angle_bracket_depth -= 1; Lookbehind::Other } - _ => match spacing { - Spacing::Joint => Lookbehind::JointOther, - Spacing::Alone => Lookbehind::Other, - }, + '-' if spacing == Spacing::Joint => Lookbehind::JointHyphen, + _ => Lookbehind::Other, }; } Some(token) => expr.extend(iter::once(token)),