Skip to content

Commit

Permalink
Change filter order of prescedence
Browse files Browse the repository at this point in the history
  • Loading branch information
Luis Moreno authored and morenol committed Sep 6, 2020
1 parent b2f1060 commit a339d01
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 17 deletions.
34 changes: 18 additions & 16 deletions src/expression_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,28 @@ impl ExpressionParser {
mut lexer: &mut PeekableLexer<'a, Token<'a>>,
) -> Result<Expression<'a>> {
let left = ExpressionParser::parse_logical_and(&mut lexer)?;
if let Some(Token::LogicalOr) = lexer.peek() {
let result = if let Some(Token::LogicalOr) = lexer.peek() {
lexer.next();
let right = ExpressionParser::parse_logical_or(lexer)?;
return Ok(Expression::BinaryExpression(
Expression::BinaryExpression(
BinaryOperation::LogicalOr,
Box::new(left),
Box::new(right),
));
)
} else {
left
};

if let Some(Token::Pipe) = lexer.peek() {
lexer.next();
let filter_expression = ExpressionParser::parse_filter_expression(&mut lexer)?;
Ok(Expression::FilteredExpression(FilteredExpression::new(
Box::new(result),
filter_expression,
)))
} else {
Ok(result)
}
Ok(left)
}

fn parse_logical_and<'a>(
Expand Down Expand Up @@ -168,7 +180,7 @@ impl ExpressionParser {
}

fn parse_unary_plus_min<'a>(
mut lexer: &mut PeekableLexer<'a, Token<'a>>,
lexer: &mut PeekableLexer<'a, Token<'a>>,
) -> Result<Expression<'a>> {
let unary_op = match lexer.peek() {
Some(Token::Plus) => Some(UnaryOperation::Plus),
Expand All @@ -186,17 +198,7 @@ impl ExpressionParser {
Some(op) => Expression::UnaryExpression(op, Box::new(sub_expr)),
None => sub_expr,
};

if let Some(Token::Pipe) = lexer.peek() {
lexer.next();
let filter_expression = ExpressionParser::parse_filter_expression(&mut lexer)?;
Ok(Expression::FilteredExpression(FilteredExpression::new(
Box::new(result),
filter_expression,
)))
} else {
Ok(result)
}
Ok(result)
}
fn parse_filter_expression<'a>(
lexer: &mut PeekableLexer<'a, Token<'a>>,
Expand Down
5 changes: 4 additions & 1 deletion tests/filters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,10 @@ fn filter_escape() -> Result<()> {
assert_render_template_eq("{{ ampersand | escape }}", "&amp;", Some(context.clone()))?;
assert_render_template_eq("{{ quotes | escape }}", "&#34;&#39;", Some(context.clone()))
}

#[test]
fn filter_order() -> Result<()> {
assert_render_template_eq("{{ -5 * 4 | abs}}", "20", None)
}
#[test]
fn default_filter() -> Result<()> {
let mut context = ValuesMap::default();
Expand Down

0 comments on commit a339d01

Please sign in to comment.