(&mut self, expr: Expr)
| 601 | |
| 602 | impl RqFold for Normalizer { |
| 603 | fn fold_expr(&mut self, expr: Expr) -> Result<Expr> { |
| 604 | let expr = Expr { |
| 605 | kind: rq::fold_expr_kind(self, expr.kind)?, |
| 606 | ..expr |
| 607 | }; |
| 608 | |
| 609 | if let ExprKind::Operator { name, args } = &expr.kind { |
| 610 | if name == "std.eq" && args.len() == 2 { |
| 611 | let (left, right) = (&args[0], &args[1]); |
| 612 | let span = expr.span; |
| 613 | let new_args = if let ExprKind::Literal(Literal::Null) = &left.kind { |
| 614 | vec![right.clone(), left.clone()] |
| 615 | } else { |
| 616 | vec![left.clone(), right.clone()] |
| 617 | }; |
| 618 | let new_kind = ExprKind::Operator { |
| 619 | name: name.clone(), |
| 620 | args: new_args, |
| 621 | }; |
| 622 | return Ok(Expr { |
| 623 | kind: new_kind, |
| 624 | span, |
| 625 | }); |
| 626 | } |
| 627 | } |
| 628 | |
| 629 | Ok(expr) |
| 630 | } |
| 631 | } |
no test coverage detected