diff --git a/Syntaxes/Liquid.sublime-syntax b/Syntaxes/Liquid.sublime-syntax index 657a2a3..7fa6f07 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 @@ -70,6 +71,42 @@ 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.statement.liquid + captures: + 1: punctuation.section.embedded.begin.liquid + 2: keyword.declaration.comment.liquid + 3: punctuation.section.embedded.end.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.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 ]################################################## liquid-javascript-tags: diff --git a/tests/syntax_test_liquid.liquid.html b/tests/syntax_test_liquid.liquid.html index 8b6e309..e4de74a 100644 --- a/tests/syntax_test_liquid.liquid.html +++ b/tests/syntax_test_liquid.liquid.html @@ -438,6 +438,66 @@ | ^^^^^^^^^^ 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 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