difftreelog
fix(parser) infix operator precedence
in: master
1 file changed
crates/jsonnet-parser/src/lib.rsdiffbeforeafterboth153 / var_expr()153 / var_expr()154 / local_expr()154 / local_expr()155 / if_then_else_expr()155 / if_then_else_expr()156 / "-" _ expr:boxed_expr() { Expr::UnaryOp(UnaryOpType::Minus, expr) }157 / "!" _ expr:boxed_expr() { Expr::UnaryOp(UnaryOpType::Not, expr) }158156159 / keyword("function") _ "(" _ params:params() _ ")" _ expr:boxed_expr() {Expr::Function(params, expr)}157 / keyword("function") _ "(" _ params:params() _ ")" _ expr:boxed_expr() {Expr::Function(params, expr)}160 / assertion:assertion() _ ";" _ expr:boxed_expr() { Expr::AssertExpr(assertion, expr) }158 / assertion:assertion() _ ";" _ expr:boxed_expr() { Expr::AssertExpr(assertion, expr) }223 a:(@) _ "%" _ b:@ {Expr::BinaryOp(Box::new(a), BinaryOpType::Mod, Box::new(b))}221 a:(@) _ "%" _ b:@ {Expr::BinaryOp(Box::new(a), BinaryOpType::Mod, Box::new(b))}224 --222 --225 e:expr_basic_with_suffix() {e}223 e:expr_basic_with_suffix() {e}224 "-" _ expr:expr_basic_with_suffix() { Expr::UnaryOp(UnaryOpType::Minus, box expr) }225 "!" _ expr:expr_basic_with_suffix() { Expr::UnaryOp(UnaryOpType::Not, box expr) }226 "(" _ e:boxed_expr() _ ")" {Expr::Parened(e)}226 "(" _ e:boxed_expr() _ ")" {Expr::Parened(e)}227 }227 }228 / e:expr_basic_with_suffix() {e}228 / e:expr_basic_with_suffix() {e}387 parse("a(b, null_fields)").unwrap();387 parse("a(b, null_fields)").unwrap();388 }388 }389390 #[test]391 fn infix_precedence() {392 use Expr::*;393 assert_eq!(parse("!a && !b").unwrap(), BinaryOp(394 box UnaryOp(UnaryOpType::Not, box Var("a".to_owned())),395 BinaryOpType::And,396 box UnaryOp(UnaryOpType::Not, box Var("b".to_owned()))397 ));398 }389399390 #[test]400 #[test]391 fn can_parse_stdlib() {401 fn can_parse_stdlib() {