From 002019843fd2cc70952552b9240b300c45ee8960 Mon Sep 17 00:00:00 2001 From: deathaxe Date: Sun, 23 Feb 2025 17:39:42 +0100 Subject: [PATCH] Improve multi-line expressions Resolves #12 This commit attempts to improve support for multi-line expressions. If certain keywords/operators are detected at beginning of a line, treat them as expression continuation rather than custom function call statement. --- Syntaxes/Liquid.sublime-syntax | 28 ++++++++++++++++++++++++++++ tests/syntax_test_liquid.liquid.html | 17 +++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/Syntaxes/Liquid.sublime-syntax b/Syntaxes/Liquid.sublime-syntax index 7359aff..64c410f 100644 --- a/Syntaxes/Liquid.sublime-syntax +++ b/Syntaxes/Liquid.sublime-syntax @@ -167,6 +167,8 @@ contexts: - include: liquid-conditionals - include: liquid-iterations - include: liquid-functions + - include: liquid-filters + - include: liquid-expression-continuation - include: liquid-other liquid-expression: @@ -441,6 +443,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 0dbdc17..a1f8414 100644 --- a/tests/syntax_test_liquid.liquid.html +++ b/tests/syntax_test_liquid.liquid.html @@ -77,6 +77,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