Add parsing of more logical combinators

Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
Marcel Müller 2026-03-12 17:36:36 +01:00
parent d222573a3a
commit 437584c844
3 changed files with 54 additions and 6 deletions

View file

@ -230,6 +230,12 @@ pub enum TokenOperator {
Divide,
And,
Or,
Equal,
NotEqual,
Greater,
GreaterOrEqual,
Lesser,
LesserOrEqual,
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
@ -522,6 +528,22 @@ fn parse_operator<'input>(input: &mut Input<'input>) -> PResult<'input, Template
"|".value(TokenOperator::Or),
cut_err(fail),
)),
'<' => alt((
"=".value(TokenOperator::LesserOrEqual),
empty.value(TokenOperator::Lesser),
)),
'>' => alt((
"=".value(TokenOperator::GreaterOrEqual),
empty.value(TokenOperator::Greater),
)),
'!' => alt((
"=".value(TokenOperator::NotEqual),
cut_err(fail),
)),
'=' => alt((
"=".value(TokenOperator::Equal),
cut_err(fail),
)),
_ => fail,
},
)
@ -747,7 +769,7 @@ mod tests {
#[test]
fn parse_operations() {
let input = "{{= 5 * 14 + 3 / 2 - 1 }}{{ if foo && bar || baz }}{{ end }}";
let input = "{{= 5 * 14 + 3 / 2 - 1 }}{{ if foo && bar || baz && 2 != 3 || 4 > 2 || 43 <= 5 }}{{ end }}";
let output = parse(input.into());
insta::assert_debug_snapshot!(output, @r#"
@ -790,12 +812,36 @@ mod tests {
[Whitespace]" " (44..45),
[Ident]"baz" (45..48),
[Whitespace]" " (48..49),
[RightDelim]"}}" (49..51),
[LeftDelim]"{{" (51..53),
[Operator(And)]"&&" (49..51),
[Whitespace]" " (51..52),
[Literal(Integer(2))]"2" (52..53),
[Whitespace]" " (53..54),
[End]"end" (54..57),
[Whitespace]" " (57..58),
[RightDelim]"}}" (58..60),
[Operator(NotEqual)]"!=" (54..56),
[Whitespace]" " (56..57),
[Literal(Integer(3))]"3" (57..58),
[Whitespace]" " (58..59),
[Operator(Or)]"||" (59..61),
[Whitespace]" " (61..62),
[Literal(Integer(4))]"4" (62..63),
[Whitespace]" " (63..64),
[Operator(Greater)]">" (64..65),
[Whitespace]" " (65..66),
[Literal(Integer(2))]"2" (66..67),
[Whitespace]" " (67..68),
[Operator(Or)]"||" (68..70),
[Whitespace]" " (70..71),
[Literal(Integer(43))]"43" (71..73),
[Whitespace]" " (73..74),
[Operator(LesserOrEqual)]"<=" (74..76),
[Whitespace]" " (76..77),
[Literal(Integer(5))]"5" (77..78),
[Whitespace]" " (78..79),
[RightDelim]"}}" (79..81),
[LeftDelim]"{{" (81..83),
[Whitespace]" " (83..84),
[End]"end" (84..87),
[Whitespace]" " (87..88),
[RightDelim]"}}" (88..90),
],
},
)