From 8f220226168ae7153c6b0d0a6dbc6b1738b24655 Mon Sep 17 00:00:00 2001 From: Nikita Ourazbaev <41582891+nikitaourazbaev@users.noreply.github.com> Date: Wed, 28 May 2025 15:40:26 -0400 Subject: [PATCH 1/6] Add support for LiquidDoc Fix syntax --- Syntaxes/Liquid.sublime-syntax | 21 +++++++++++++++++++ Syntaxes/LiquidDoc.sublime-syntax | 31 ++++++++++++++++++++++++++++ tests/syntax_test_liquid.md | 34 +++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 Syntaxes/LiquidDoc.sublime-syntax diff --git a/Syntaxes/Liquid.sublime-syntax b/Syntaxes/Liquid.sublime-syntax index d52555f..583dfce 100644 --- a/Syntaxes/Liquid.sublime-syntax +++ b/Syntaxes/Liquid.sublime-syntax @@ -26,6 +26,7 @@ contexts: liquid-tags: - include: jekyll-highlight-tags + - include: liquid-doc-tags - include: liquid-comment-tags - include: liquid-schema-tags - include: liquid-javascript-tags @@ -69,6 +70,26 @@ contexts: 3: punctuation.section.embedded.end.liquid pop: 1 +###[ LIQUID DOC TAGS ]#################################################### + + liquid-doc-tags: + # https://shopify.dev/docs/api/liquid/tags/theme-tags#doc + - match: ({%-?)\s*(doc)\s*(-?%}) + scope: meta.embedded.liquid source.liquid meta.statement.liquid + captures: + 1: punctuation.section.embedded.begin.liquid + 2: keyword.declaration.raw.liquid + 3: punctuation.section.embedded.end.liquid + embed: scope:source.liquiddoc + embed_scope: source.embedded.liquiddoc + escape: ({%-?)\s*(enddoc)\s*(-?%}) + escape_captures: + 0: meta.embedded.liquid source.liquid meta.statement.liquid + 1: punctuation.section.embedded.begin.liquid + 2: keyword.declaration.raw.liquid + 3: punctuation.section.embedded.end.liquid + pop: 1 + ###[ LIQUID JAVASCRIPT TAGS ]################################################## liquid-javascript-tags: diff --git a/Syntaxes/LiquidDoc.sublime-syntax b/Syntaxes/LiquidDoc.sublime-syntax new file mode 100644 index 0000000..a6d50bb --- /dev/null +++ b/Syntaxes/LiquidDoc.sublime-syntax @@ -0,0 +1,31 @@ +%YAML 1.2 +--- +# https://shopify.github.io/liquid +# https://shopify.dev/api/liquid +# https://shopify.dev/docs/storefronts/themes/tools/liquid-doc +# http://www.sublimetext.com/docs/syntax.html +name: LiquidDoc +scope: source.liquiddoc +version: 2 +hidden: true + +variables: + liquid_variables: \b[a-zA-Z_][0-9a-zA-Z_]*\b + + +contexts: + main: + - match: '@description' + scope: keyword.liquiddoc + + - match: '(@param)\s+({[a-z]+})\s+(\[?{{liquid_variables}}\]?)' + captures: + 1: keyword.liquiddoc + 2: storage.type.liquiddoc + 3: variable.liquiddoc + + - match: '@example' + scope: keyword.liquiddoc + + - match: '.' + scope: comment.liquiddoc diff --git a/tests/syntax_test_liquid.md b/tests/syntax_test_liquid.md index 794569c..b7d0128 100644 --- a/tests/syntax_test_liquid.md +++ b/tests/syntax_test_liquid.md @@ -559,6 +559,40 @@ div { | ^^ punctuation.section.embedded.end.liquid +{% doc %} +| <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +|^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid +|^ punctuation.section.embedded.begin.liquid +| ^^^ keyword.declaration.raw.liquid +| ^^ punctuation.section.embedded.end.liquid + Displays a product title +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +|^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc + + @description This will display a product title +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc + + @param {product} product The product to display the title for +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc +| ^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc storage.type.liquiddoc +| ^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc variable.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc + + @example +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc + {% render 'product-title', product: product %} +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +{% enddoc %} +| <- text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +|^ text.html.liquid meta.template.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +| ^^^^^^ text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid keyword.declaration.raw.liquid +| ^^ text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.end.liquid + From 99ff62ac067e33c0598f886dc6e2d21d7b44e005 Mon Sep 17 00:00:00 2001 From: Nikita Ourazbaev <41582891+nikitaourazbaev@users.noreply.github.com> Date: Wed, 28 May 2025 15:46:59 -0400 Subject: [PATCH 2/6] Move test to correct file --- tests/syntax_test_liquid.liquid.html | 34 +++++++++++++++++++++++++++ tests/syntax_test_liquid.md | 35 ---------------------------- 2 files changed, 34 insertions(+), 35 deletions(-) diff --git a/tests/syntax_test_liquid.liquid.html b/tests/syntax_test_liquid.liquid.html index e931f97..0cd757b 100644 --- a/tests/syntax_test_liquid.liquid.html +++ b/tests/syntax_test_liquid.liquid.html @@ -438,6 +438,40 @@ | ^^^^^^^^^^ keyword.declaration.comment.liquid | ^^ punctuation.section.embedded.end.liquid +{% doc %} +| <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +|^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid +|^ punctuation.section.embedded.begin.liquid +| ^^^ keyword.declaration.raw.liquid +| ^^ punctuation.section.embedded.end.liquid + Displays a product title +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +|^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc + + @description This will display a product title +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc + + @param {product} product The product to display the title for +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc +| ^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc storage.type.liquiddoc +| ^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc variable.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc + + @example +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc + {% render 'product-title', product: product %} +| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +{% enddoc %} +| <- text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +|^ text.html.liquid meta.template.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +| ^^^^^^ text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid keyword.declaration.raw.liquid +| ^^ text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.end.liquid + {% javascript %} | <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid |^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid diff --git a/tests/syntax_test_liquid.md b/tests/syntax_test_liquid.md index b7d0128..98cd79d 100644 --- a/tests/syntax_test_liquid.md +++ b/tests/syntax_test_liquid.md @@ -558,41 +558,6 @@ div { | ^^^^^ meta.string.liquid string.quoted.double.liquid | ^^ punctuation.section.embedded.end.liquid - -{% doc %} -| <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid -|^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid -|^ punctuation.section.embedded.begin.liquid -| ^^^ keyword.declaration.raw.liquid -| ^^ punctuation.section.embedded.end.liquid - Displays a product title -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -|^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc - - @description This will display a product title -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc - - @param {product} product The product to display the title for -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc -| ^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc storage.type.liquiddoc -| ^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc variable.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc - - @example -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc - {% render 'product-title', product: product %} -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -{% enddoc %} -| <- text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid -|^ text.html.liquid meta.template.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid -| ^^^^^^ text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid keyword.declaration.raw.liquid -| ^^ text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.end.liquid - From e27b44316a4dcea654a4dc1dd72293bea5c79cc1 Mon Sep 17 00:00:00 2001 From: Nikita Ourazbaev <41582891+nikitaourazbaev@users.noreply.github.com> Date: Wed, 28 May 2025 15:48:12 -0400 Subject: [PATCH 3/6] Undo change to markdown syntax test file --- tests/syntax_test_liquid.md | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/syntax_test_liquid.md b/tests/syntax_test_liquid.md index 98cd79d..794569c 100644 --- a/tests/syntax_test_liquid.md +++ b/tests/syntax_test_liquid.md @@ -558,6 +558,7 @@ div { | ^^^^^ meta.string.liquid string.quoted.double.liquid | ^^ punctuation.section.embedded.end.liquid + From 0562fc87562e2197800d8cbc1fee7ac8b3c760a4 Mon Sep 17 00:00:00 2001 From: Nikita Ourazbaev <41582891+nikitaourazbaev@users.noreply.github.com> Date: Wed, 28 May 2025 15:55:14 -0400 Subject: [PATCH 4/6] Remove `text.html.liquid` scope in attempt to fix tests --- Syntaxes/LiquidDoc.sublime-syntax | 1 - tests/syntax_test_liquid.liquid.html | 34 ++++++++++++++-------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/Syntaxes/LiquidDoc.sublime-syntax b/Syntaxes/LiquidDoc.sublime-syntax index a6d50bb..9216f50 100644 --- a/Syntaxes/LiquidDoc.sublime-syntax +++ b/Syntaxes/LiquidDoc.sublime-syntax @@ -12,7 +12,6 @@ hidden: true variables: liquid_variables: \b[a-zA-Z_][0-9a-zA-Z_]*\b - contexts: main: - match: '@description' diff --git a/tests/syntax_test_liquid.liquid.html b/tests/syntax_test_liquid.liquid.html index 0cd757b..bef92dc 100644 --- a/tests/syntax_test_liquid.liquid.html +++ b/tests/syntax_test_liquid.liquid.html @@ -446,31 +446,31 @@ | ^^ punctuation.section.embedded.end.liquid Displays a product title | <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -|^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +|^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc comment.liquiddoc @description This will display a product title -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| <- meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc comment.liquiddoc @param {product} product The product to display the title for -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc -| ^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc storage.type.liquiddoc -| ^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc variable.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| <- meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^ meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc +| ^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc storage.type.liquiddoc +| ^^^^^^^ meta.template.liquid source.embedded.liquiddoc variable.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc comment.liquiddoc @example -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc +| <- meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^ meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc {% render 'product-title', product: product %} -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| <- meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc comment.liquiddoc {% enddoc %} -| <- text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid -|^ text.html.liquid meta.template.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid -| ^^^^^^ text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid keyword.declaration.raw.liquid -| ^^ text.html.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.end.liquid +| <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +|^ meta.template.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +| ^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid keyword.declaration.raw.liquid +| ^^ meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.end.liquid {% javascript %} | <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid From b4ab3795154221529608c43fc8d2ed8f9f77a3e0 Mon Sep 17 00:00:00 2001 From: Nikita Ourazbaev <41582891+nikitaourazbaev@users.noreply.github.com> Date: Wed, 28 May 2025 15:57:54 -0400 Subject: [PATCH 5/6] Remove `meta.template.liquid` scope in attempt to fix tests --- tests/syntax_test_liquid.liquid.html | 30 ++++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/syntax_test_liquid.liquid.html b/tests/syntax_test_liquid.liquid.html index bef92dc..42d6b40 100644 --- a/tests/syntax_test_liquid.liquid.html +++ b/tests/syntax_test_liquid.liquid.html @@ -445,30 +445,30 @@ | ^^^ keyword.declaration.raw.liquid | ^^ punctuation.section.embedded.end.liquid Displays a product title -| <- text.html.liquid meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -|^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| <- source.embedded.liquiddoc comment.liquiddoc +|^^^^^^^^^^^^^^^^^^^^^^^^^ source.embedded.liquiddoc comment.liquiddoc @description This will display a product title -| <- meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| <- source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^^^^^ source.embedded.liquiddoc keyword.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.embedded.liquiddoc comment.liquiddoc @param {product} product The product to display the title for -| <- meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^ meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc -| ^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc storage.type.liquiddoc -| ^^^^^^^ meta.template.liquid source.embedded.liquiddoc variable.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| <- source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^ source.embedded.liquiddoc keyword.liquiddoc +| ^^^^^^^^^ source.embedded.liquiddoc storage.type.liquiddoc +| ^^^^^^^ source.embedded.liquiddoc variable.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.embedded.liquiddoc comment.liquiddoc @example -| <- meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^ meta.template.liquid source.embedded.liquiddoc keyword.liquiddoc +| <- source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^ source.embedded.liquiddoc keyword.liquiddoc {% render 'product-title', product: product %} -| <- meta.template.liquid source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.template.liquid source.embedded.liquiddoc comment.liquiddoc +| <- source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.embedded.liquiddoc comment.liquiddoc {% enddoc %} | <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid -|^ meta.template.liquid meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +|^ meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid | ^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid keyword.declaration.raw.liquid | ^^ meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.end.liquid From a10c46486f99e0698c0d1250145d196fa4a0ff94 Mon Sep 17 00:00:00 2001 From: deathaxe Date: Thu, 29 May 2025 14:35:23 +0200 Subject: [PATCH 6/6] Directly implement LiquidDoc --- Syntaxes/Liquid.sublime-syntax | 32 +++++++++---- Syntaxes/LiquidDoc.sublime-syntax | 30 ------------ tests/syntax_test_liquid.liquid.html | 68 +++++++++++++++++++--------- tests/syntax_test_liquid.md | 60 ++++++++++++++++++++++++ 4 files changed, 131 insertions(+), 59 deletions(-) delete mode 100644 Syntaxes/LiquidDoc.sublime-syntax diff --git a/Syntaxes/Liquid.sublime-syntax b/Syntaxes/Liquid.sublime-syntax index 3fe2b2a..7fa6f07 100644 --- a/Syntaxes/Liquid.sublime-syntax +++ b/Syntaxes/Liquid.sublime-syntax @@ -76,20 +76,36 @@ contexts: liquid-doc-tags: # https://shopify.dev/docs/api/liquid/tags/theme-tags#doc - match: ({%-?)\s*(doc)\s*(-?%}) - scope: meta.embedded.liquid source.liquid meta.statement.liquid + scope: meta.statement.liquid captures: 1: punctuation.section.embedded.begin.liquid - 2: keyword.declaration.raw.liquid + 2: keyword.declaration.comment.liquid 3: punctuation.section.embedded.end.liquid - embed: scope:source.liquiddoc - embed_scope: source.embedded.liquiddoc - escape: ({%-?)\s*(enddoc)\s*(-?%}) - escape_captures: - 0: meta.embedded.liquid source.liquid meta.statement.liquid + push: liquid-doc-tag-body + + liquid-doc-tag-body: + - meta_scope: meta.embedded.liquid source.liquid + - meta_content_scope: comment.block.documentation.liquid + - match: ({%-?)\s*(enddoc)\s*(-?%}) + scope: meta.statement.liquid + captures: 1: punctuation.section.embedded.begin.liquid - 2: keyword.declaration.raw.liquid + 2: keyword.declaration.comment.liquid 3: punctuation.section.embedded.end.liquid pop: 1 + - match: '@description\b' + scope: entity.name.tag.documentation.liquid + - match: '(@param)\s+(({){{liquid_variables}}(}))\s+(\[?{{liquid_variables}}\]?)' + captures: + 1: entity.name.tag.documentation.liquid + 2: storage.type.liquid + 3: punctuation.definition.type.begin.liquid + 4: punctuation.definition.type.end.liquid + 5: variable.other.liquid + - match: '@example\b' + scope: entity.name.tag.documentation.liquid + embed: scope:text.html.liquid + escape: (?=@example\b|{%-?\s*enddoc\s*-?%}) ###[ LIQUID JAVASCRIPT TAGS ]################################################## diff --git a/Syntaxes/LiquidDoc.sublime-syntax b/Syntaxes/LiquidDoc.sublime-syntax deleted file mode 100644 index 9216f50..0000000 --- a/Syntaxes/LiquidDoc.sublime-syntax +++ /dev/null @@ -1,30 +0,0 @@ -%YAML 1.2 ---- -# https://shopify.github.io/liquid -# https://shopify.dev/api/liquid -# https://shopify.dev/docs/storefronts/themes/tools/liquid-doc -# http://www.sublimetext.com/docs/syntax.html -name: LiquidDoc -scope: source.liquiddoc -version: 2 -hidden: true - -variables: - liquid_variables: \b[a-zA-Z_][0-9a-zA-Z_]*\b - -contexts: - main: - - match: '@description' - scope: keyword.liquiddoc - - - match: '(@param)\s+({[a-z]+})\s+(\[?{{liquid_variables}}\]?)' - captures: - 1: keyword.liquiddoc - 2: storage.type.liquiddoc - 3: variable.liquiddoc - - - match: '@example' - scope: keyword.liquiddoc - - - match: '.' - scope: comment.liquiddoc diff --git a/tests/syntax_test_liquid.liquid.html b/tests/syntax_test_liquid.liquid.html index 0063d67..e4de74a 100644 --- a/tests/syntax_test_liquid.liquid.html +++ b/tests/syntax_test_liquid.liquid.html @@ -442,35 +442,61 @@ | <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid |^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid |^ punctuation.section.embedded.begin.liquid -| ^^^ keyword.declaration.raw.liquid +| ^^^ keyword.declaration.comment.liquid | ^^ punctuation.section.embedded.end.liquid - Displays a product title -| <- source.embedded.liquiddoc comment.liquiddoc -|^^^^^^^^^^^^^^^^^^^^^^^^^ source.embedded.liquiddoc comment.liquiddoc @description This will display a product title -| <- source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^^^^^ source.embedded.liquiddoc keyword.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.embedded.liquiddoc comment.liquiddoc +|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^^^^^^^^^^^ entity.name.tag.documentation.liquid @param {product} product The product to display the title for -| <- source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^ source.embedded.liquiddoc keyword.liquiddoc -| ^^^^^^^^^ source.embedded.liquiddoc storage.type.liquiddoc -| ^^^^^^^ source.embedded.liquiddoc variable.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.embedded.liquiddoc comment.liquiddoc +|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^^^^^ entity.name.tag.documentation.liquid +| ^^^^^^^^^ storage.type.liquid +| ^ punctuation.definition.type.begin.liquid +| ^ punctuation.definition.type.end.liquid +| ^^^^^^^ variable.other.liquid + + @example +|^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^^^^^^^ entity.name.tag.documentation.liquid +
+|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.tag.block +| ^ punctuation.definition.tag.begin.html +| ^^^ entity.name.tag +| ^^^^^^^^^^^^^^^^^^^^^^^^ meta.attribute-with-value.class.html +| ^^^^^ entity.other.attribute-name.class.html +| ^ punctuation.separator.key-value.html +| ^^^^^^^^^^^^^^^^^^ meta.class-name.html meta.string.html meta.interpolation.liquid +| ^^ punctuation.section.interpolation.begin.liquid +| ^^^^^^^^^^^^^^ source.liquid +| ^^^ variable.other.liquid +| ^^^^^^^^ meta.filter.liquid +| ^ keyword.operator.logical.pipe.liquid +| ^^^^^^ support.function.filter.liquid +| ^^ punctuation.section.interpolation.end.liquid +| ^ punctuation.definition.tag.end.html +| ^^ punctuation.definition.tag.begin.html +| ^^^ entity.name.tag +| ^ punctuation.definition.tag.end.html @example -| <- source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^ source.embedded.liquiddoc keyword.liquiddoc - {% render 'product-title', product: product %} -| <- source.embedded.liquiddoc comment.liquiddoc -| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.embedded.liquiddoc comment.liquiddoc +| ^^^^^^^^ entity.name.tag.documentation.liquid + {% render 'price' %} +|^^^^^^^^^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^ punctuation.section.embedded.begin.liquid +| ^^^^^^ support.function.liquid +| ^^^^^^^ meta.string.liquid string.quoted.single.liquid +| ^ punctuation.definition.string.begin.liquid +| ^ punctuation.definition.string.end.liquid +| ^^ punctuation.section.embedded.end.liquid + {% enddoc %} -| <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid -|^ meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid -| ^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid keyword.declaration.raw.liquid -| ^^ meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.end.liquid +|^^^^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid +|^ punctuation.section.embedded.begin.liquid +| ^^^^^^ keyword.declaration.comment.liquid +| ^^ punctuation.section.embedded.end.liquid {% javascript %} | <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid diff --git a/tests/syntax_test_liquid.md b/tests/syntax_test_liquid.md index 81025cc..afd096f 100644 --- a/tests/syntax_test_liquid.md +++ b/tests/syntax_test_liquid.md @@ -394,6 +394,66 @@ I am {{ age }} and my favorite food is {{ favorite_food }}. | ^^^^^^^^^^ keyword.declaration.comment.liquid | ^^ punctuation.section.embedded.end.liquid +{% doc %} +| <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid +|^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid +|^ punctuation.section.embedded.begin.liquid +| ^^^ keyword.declaration.comment.liquid +| ^^ punctuation.section.embedded.end.liquid + + @description This will display a product title +|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^^^^^^^^^^^ entity.name.tag.documentation.liquid + + @param {product} product The product to display the title for +|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^^^^^ entity.name.tag.documentation.liquid +| ^^^^^^^^^ storage.type.liquid +| ^ punctuation.definition.type.begin.liquid +| ^ punctuation.definition.type.end.liquid +| ^^^^^^^ variable.other.liquid + + @example +|^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^^^^^^^ entity.name.tag.documentation.liquid +
+|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.tag.block +| ^ punctuation.definition.tag.begin.html +| ^^^ entity.name.tag +| ^^^^^^^^^^^^^^^^^^^^^^^^ meta.attribute-with-value.class.html +| ^^^^^ entity.other.attribute-name.class.html +| ^ punctuation.separator.key-value.html +| ^^^^^^^^^^^^^^^^^^ meta.class-name.html meta.string.html meta.interpolation.liquid +| ^^ punctuation.section.interpolation.begin.liquid +| ^^^^^^^^^^^^^^ source.liquid +| ^^^ variable.other.liquid +| ^^^^^^^^ meta.filter.liquid +| ^ keyword.operator.logical.pipe.liquid +| ^^^^^^ support.function.filter.liquid +| ^^ punctuation.section.interpolation.end.liquid +| ^ punctuation.definition.tag.end.html +| ^^ punctuation.definition.tag.begin.html +| ^^^ entity.name.tag +| ^ punctuation.definition.tag.end.html + + @example +| ^^^^^^^^ entity.name.tag.documentation.liquid + {% render 'price' %} +|^^^^^^^^^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid comment.block.documentation.liquid +| ^^ punctuation.section.embedded.begin.liquid +| ^^^^^^ support.function.liquid +| ^^^^^^^ meta.string.liquid string.quoted.single.liquid +| ^ punctuation.definition.string.begin.liquid +| ^ punctuation.definition.string.end.liquid +| ^^ punctuation.section.embedded.end.liquid + +{% enddoc %} +|^^^^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid +|^ punctuation.section.embedded.begin.liquid +| ^^^^^^ keyword.declaration.comment.liquid +| ^^ punctuation.section.embedded.end.liquid + {% javascript %} | <- meta.embedded.liquid source.liquid meta.statement.liquid punctuation.section.embedded.begin.liquid |^^^^^^^^^^^^^^^ meta.embedded.liquid source.liquid meta.statement.liquid