From 3648c2332086bef16d44731d69ba5e9b4889a498 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Tue, 30 Nov 2021 15:04:20 -0800 Subject: [PATCH] Support single line liquid tags --- Fluid.Tests/ParserTests.cs | 10 ++++++++++ .../BinaryExpressions/EndsWithBinaryExpression.cs | 15 ++++++--------- Fluid/Ast/MemberExpression.cs | 2 +- Fluid/Ast/RangeExpression.cs | 12 ++---------- Fluid/FluidParserExtensions.cs | 1 - Fluid/Parser/TagParsers.cs | 1 + 6 files changed, 20 insertions(+), 21 deletions(-) diff --git a/Fluid.Tests/ParserTests.cs b/Fluid.Tests/ParserTests.cs index 93373b87..da09c18f 100644 --- a/Fluid.Tests/ParserTests.cs +++ b/Fluid.Tests/ParserTests.cs @@ -964,5 +964,15 @@ public void ShouldParseLiquidTagWithBlocks() var rendered = template.Render(); Assert.Contains("WELCOME TO THE LIQUID TAG", rendered); } + + [Fact] + public void ShouldParseLiquidTagInline() + { + var source = @"{% liquid if cool echo 'cool' else echo 'not cool' endif %}"; + + Assert.True(_parser.TryParse(source, out var template, out var errors), errors); + var rendered = template.Render(); + Assert.Contains("not cool", rendered); + } } } diff --git a/Fluid/Ast/BinaryExpressions/EndsWithBinaryExpression.cs b/Fluid/Ast/BinaryExpressions/EndsWithBinaryExpression.cs index 6ae44c21..bbb66c01 100644 --- a/Fluid/Ast/BinaryExpressions/EndsWithBinaryExpression.cs +++ b/Fluid/Ast/BinaryExpressions/EndsWithBinaryExpression.cs @@ -1,5 +1,4 @@ using Fluid.Values; -using System.Threading.Tasks; namespace Fluid.Ast.BinaryExpressions { @@ -9,21 +8,19 @@ public EndsWithBinaryExpression(Expression left, Expression right) : base(left, { } - public override async ValueTask EvaluateAsync(TemplateContext context) + internal override FluidValue Evaluate(FluidValue left, FluidValue right) { - var leftValue = await Left.EvaluateAsync(context); - var rightValue = await Right.EvaluateAsync(context); - - if (leftValue is ArrayValue) + if (left is ArrayValue arrayValue) { - var first = await leftValue.GetValueAsync("last", context); - return first.Equals(rightValue) + var values = arrayValue.Values; + var last = values.Length > 0 ? values[values.Length - 1] : NilValue.Instance; + return last.Equals(right) ? BooleanValue.True : BooleanValue.False; } else { - return leftValue.ToStringValue().EndsWith(rightValue.ToStringValue()) + return left.ToStringValue().EndsWith(right.ToStringValue()) ? BooleanValue.True : BooleanValue.False; } diff --git a/Fluid/Ast/MemberExpression.cs b/Fluid/Ast/MemberExpression.cs index becb91d6..a85d4d5c 100644 --- a/Fluid/Ast/MemberExpression.cs +++ b/Fluid/Ast/MemberExpression.cs @@ -27,7 +27,7 @@ public override ValueTask EvaluateAsync(TemplateContext context) // Search the initial segment in the local scope first - FluidValue value = context.LocalScope.GetValue(initial.Identifier); + var value = context.LocalScope.GetValue(initial.Identifier); // If it was not successful, try again with a member of the model diff --git a/Fluid/Ast/RangeExpression.cs b/Fluid/Ast/RangeExpression.cs index 4b05db6a..de8d8c14 100644 --- a/Fluid/Ast/RangeExpression.cs +++ b/Fluid/Ast/RangeExpression.cs @@ -1,9 +1,6 @@ -using Fluid.Values; -using System.Threading.Tasks; - -namespace Fluid.Ast +namespace Fluid.Ast { - public class RangeExpression : Expression + public class RangeExpression { public RangeExpression(Expression from, Expression to) { @@ -14,10 +11,5 @@ public RangeExpression(Expression from, Expression to) public Expression From { get; } public Expression To { get; } - - public override ValueTask EvaluateAsync(TemplateContext context) - { - throw new System.NotImplementedException(); - } } } diff --git a/Fluid/FluidParserExtensions.cs b/Fluid/FluidParserExtensions.cs index fd356f7b..2efc41aa 100644 --- a/Fluid/FluidParserExtensions.cs +++ b/Fluid/FluidParserExtensions.cs @@ -1,6 +1,5 @@ using Fluid.Ast; using Fluid.Parser; -using Parlot.Fluent; using System; using System.Collections.Generic; using System.IO; diff --git a/Fluid/Parser/TagParsers.cs b/Fluid/Parser/TagParsers.cs index 5a79a09d..9545d916 100644 --- a/Fluid/Parser/TagParsers.cs +++ b/Fluid/Parser/TagParsers.cs @@ -113,6 +113,7 @@ public override bool Parse(ParseContext context, ref ParseResult resu while (Character.IsWhiteSpace(cursor.Current)) { + newLineIsPresent = true; cursor.Advance(); }