diff --git a/Syntaxes/Liquid.sublime-syntax b/Syntaxes/Liquid.sublime-syntax index 43f7da6..0840129 100644 --- a/Syntaxes/Liquid.sublime-syntax +++ b/Syntaxes/Liquid.sublime-syntax @@ -168,6 +168,8 @@ contexts: - include: liquid-conditionals - include: liquid-iterations - include: liquid-functions + - include: liquid-filters + - include: liquid-expression-continuation - include: liquid-other liquid-expression: @@ -453,6 +455,32 @@ contexts: - match: \bby\b scope: keyword.operator.liquid + liquid-expression-continuation: + # hack to handle multi-line expressions + # If first token of a new line matches one of the following patterns + # it is most likely a continuation of an expression. + - match: ':' + scope: punctuation.separator.key-value.liquid + push: liquid-expression + - match: ',' + scope: punctuation.separator.sequence.liquid + push: liquid-expression + - match: = + scope: keyword.operator.assignment.liquid + push: liquid-expression + - match: (?:!=|==|<=|>=|<|>) + scope: keyword.operator.comparison.liquid + push: liquid-expression + - match: \bas\b + scope: keyword.operator.assignment.liquid + push: liquid-expression + - match: \b(?:and|or|not|contains)\b + scope: keyword.operator.logical.liquid + push: liquid-expression + - match: \bby\b + scope: keyword.operator.liquid + push: liquid-expression + ###[ LIQUID LITERALS ]######################################################## liquid-constants: diff --git a/tests/syntax_test_liquid.liquid.html b/tests/syntax_test_liquid.liquid.html index 9ec5c7d..086817c 100644 --- a/tests/syntax_test_liquid.liquid.html +++ b/tests/syntax_test_liquid.liquid.html @@ -88,6 +88,23 @@ | ^^^^^^^ meta.string.liquid string.quoted.double.liquid | ^^ punctuation.section.embedded.end.liquid +{%- if foo != blank + and bar != '' +|^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid +| ^^^ keyword.operator.logical.liquid +| ^^^ variable.other.liquid +| ^^ keyword.operator.comparison.liquid +| ^^ meta.string.liquid string.quoted.single.liquid + or baz +|^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid +| ^^ keyword.operator.logical.liquid +| ^^^ variable.other.liquid + == true +|^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid +| ^^ keyword.operator.assignment.liquid +| ^^^^ constant.language.boolean.liquid +-%} + {% case handle %} |^^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid | ^^^^ keyword.control.conditional.case.liquid