From 32c23b6c901a9bdc10e9da611a01ac71e7980f3d Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Fri, 23 Feb 2024 10:05:07 -0500 Subject: [PATCH] fix: wrap `||` comparison in parenthesis when `&&` is used --- cli/src/generate/render.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cli/src/generate/render.rs b/cli/src/generate/render.rs index b65e2ebe..33684e72 100644 --- a/cli/src/generate/render.rs +++ b/cli/src/generate/render.rs @@ -871,6 +871,9 @@ impl Generator { line_break.push_str(" "); } + // parenthesis needed if we add the `!eof` condition to explicitly avoid confusion with + // precedence of `&&` and `||` + let (mut need_open_paren, mut need_close_paren) = (false, false); for (i, range) in ranges.iter().enumerate() { if is_included { if i > 0 { @@ -878,10 +881,19 @@ impl Generator { } if range.start == '\0' { add!(self, "!eof && "); + (need_open_paren, need_close_paren) = (true, true); } if range.end == range.start { + if need_open_paren { + add!(self, "("); + need_open_paren = false; + } add!(self, "lookahead == "); self.add_character(range.start); + if need_close_paren && i == ranges.len() - 1 { + add!(self, ")"); + need_close_paren = false; + } } else if range.end as u32 == range.start as u32 + 1 { add!(self, "lookahead == "); self.add_character(range.start);