{
"name": "liquid",
"scopeName": "text.html.liquid",
"fileTypes": ["liquid"],
"foldingStartMarker": "(?x)\n{%\n -?\n \\s*\n (capture|case|comment|for|form|if|javascript|paginate|schema|style)\n [^(%})]+\n%}\n",
"foldingStopMarker": "(?x)\n{%\n \\s*\n (endcapture|endcase|endcomment|endfor|endform|endif|endjavascript|endpaginate|endschema|endstyle)\n [^(%})]+\n%}\n",
"injections": {
"L:meta.embedded.block.js, L:meta.embedded.block.css, L:meta.embedded.block.html, L:string.quoted": {
"patterns": [
{
"include": "#injection"
}
]
}
},
"patterns": [
{
"include": "#core"
}
],
"repository": {
"core": {
"patterns": [
{
"include": "#raw_tag"
},
{
"include": "#comment_block"
},
{
"include": "#style_codefence"
},
{
"include": "#stylesheet_codefence"
},
{
"include": "#json_codefence"
},
{
"include": "#javascript_codefence"
},
{
"include": "#object"
},
{
"include": "#tag"
},
{
"include": "text.html.basic"
}
]
},
"injection": {
"patterns": [
{
"include": "#raw_tag"
},
{
"include": "#comment_block"
},
{
"include": "#object"
},
{
"include": "#tag_injection"
}
]
},
"raw_tag": {
"begin": "{%-?\\s*(raw)\\s*-?%}",
"end": "{%-?\\s*(endraw)\\s*-?%}",
"beginCaptures": {
"1": {
"name": "entity.name.tag.liquid"
}
},
"endCaptures": {
"1": {
"name": "entity.name.tag.liquid"
}
},
"name": "meta.entity.tag.raw.liquid",
"contentName": "string.unquoted.liquid",
"patterns": [
{
"match": "(.(?!{%-?\\s*endraw\\s*-?%}))*."
}
]
},
"comment_block": {
"begin": "{%-?\\s*comment\\s*-?%}",
"end": "{%-?\\s*endcomment\\s*-?%}",
"name": "comment.block.liquid",
"patterns": [
{
"include": "#comment_block"
},
{
"match": "(.(?!{%-?\\s*(comment|endcomment)\\s*-?%}))*."
}
]
},
"style_codefence": {
"begin": "({%-?)\\s*(style)\\s*(-?%})",
"end": "({%-?)\\s*(endstyle)\\s*(-?%})",
"beginCaptures": {
"0": {
"name": "meta.tag.metadata.style.start.liquid"
},
"1": {
"name": "punctuation.definition.tag.begin.liquid"
},
"2": {
"name": "entity.name.tag.style.liquid"
},
"3": {
"name": "punctuation.definition.tag.begin.liquid"
}
},
"endCaptures": {
"0": {
"name": "meta.tag.metadata.style.end.liquid"
},
"1": {
"name": "punctuation.definition.tag.end.liquid"
},
"2": {
"name": "entity.name.tag.style.liquid"
},
"3": {
"name": "punctuation.definition.tag.end.liquid"
}
},
"name": "meta.block.style.liquid",
"contentName": "meta.embedded.block.css",
"patterns": [
{
"include": "source.css"
}
]
},
"stylesheet_codefence": {
"begin": "({%-?)\\s*(stylesheet)\\s*(-?%})",
"end": "({%-?)\\s*(endstylesheet)\\s*(-?%})",
"beginCaptures": {
"0": {
"name": "meta.tag.metadata.style.start.liquid"
},
"1": {
"name": "punctuation.definition.tag.begin.liquid"
},
"2": {
"name": "entity.name.tag.style.liquid"
},
"3": {
"name": "punctuation.definition.tag.begin.liquid"
}
},
"endCaptures": {
"0": {
"name": "meta.tag.metadata.style.end.liquid"
},
"1": {
"name": "punctuation.definition.tag.end.liquid"
},
"2": {
"name": "entity.name.tag.style.liquid"
},
"3": {
"name": "punctuation.definition.tag.end.liquid"
}
},
"name": "meta.block.style.liquid",
"contentName": "meta.embedded.block.css",
"patterns": [
{
"include": "source.css"
}
]
},
"json_codefence": {
"begin": "({%-?)\\s*(schema)\\s*(-?%})",
"end": "({%-?)\\s*(endschema)\\s*(-?%})",
"beginCaptures": {
"0": {
"name": "meta.tag.metadata.schema.start.liquid"
},
"1": {
"name": "punctuation.definition.tag.begin.liquid"
},
"2": {
"name": "entity.name.tag.schema.liquid"
},
"3": {
"name": "punctuation.definition.tag.begin.liquid"
}
},
"endCaptures": {
"0": {
"name": "meta.tag.metadata.schema.end.liquid"
},
"1": {
"name": "punctuation.definition.tag.end.liquid"
},
"2": {
"name": "entity.name.tag.schema.liquid"
},
"3": {
"name": "punctuation.definition.tag.end.liquid"
}
},
"name": "meta.block.schema.liquid",
"contentName": "meta.embedded.block.json",
"patterns": [
{
"include": "source.json"
}
]
},
"javascript_codefence": {
"begin": "({%-?)\\s*(javascript)\\s*(-?%})",
"end": "({%-?)\\s*(endjavascript)\\s*(-?%})",
"beginCaptures": {
"0": {
"name": "meta.tag.metadata.javascript.start.liquid"
},
"1": {
"name": "punctuation.definition.tag.begin.liquid"
},
"2": {
"name": "entity.name.tag.javascript.liquid"
},
"3": {
"name": "punctuation.definition.tag.begin.liquid"
}
},
"endCaptures": {
"0": {
"name": "meta.tag.metadata.javascript.end.liquid"
},
"1": {
"name": "punctuation.definition.tag.end.liquid"
},
"2": {
"name": "entity.name.tag.javascript.liquid"
},
"3": {
"name": "punctuation.definition.tag.end.liquid"
}
},
"name": "meta.block.javascript.liquid",
"contentName": "meta.embedded.block.js",
"patterns": [
{
"include": "source.js"
}
]
},
"tag": {
"begin": "(?|\\<|\\>\\=|\\<\\=|or|and|contains)(?:(?=\\s)|\\b)",
"captures": {
"1": {
"name": "keyword.operator.expression.liquid"
}
}
},
"language_constant": {
"match": "\\b(false|true|nil|blank)\\b|empty(?!\\?)",
"name": "constant.language.liquid"
},
"attribute": {
"begin": "\\w+:",
"end": "(?=,|%}|}}|\\|)",
"beginCaptures": {
"0": {
"name": "entity.other.attribute-name.liquid"
}
},
"patterns": [
{
"include": "#value_expression"
}
]
},
"attribute_liquid": {
"begin": "\\w+:",
"end": "(?=,|\\|)|$",
"beginCaptures": {
"0": {
"name": "entity.other.attribute-name.liquid"
}
},
"patterns": [
{
"include": "#value_expression"
}
]
},
"filter": {
"match": "\\|\\s*((?![\\.0-9])[a-zA-Z0-9_-]+\\:?)\\s*",
"captures": {
"1": {
"name": "support.function.liquid"
}
}
},
"value_expression": {
"patterns": [
{
"match": "(\\[)(\\|)(?=[^\\]]*)(?=\\])",
"captures": {
"2": {
"name": "invalid.illegal.filter.liquid"
},
"3": {
"name": "invalid.illegal.filter.liquid"
}
}
},
{
"match": "(?<=\\s)(\\+|\\-|\\/|\\*)(?=\\s)",
"name": "invalid.illegal.filter.liquid"
},
{
"include": "#language_constant"
},
{
"include": "#operator"
},
{
"include": "#invalid_range"
},
{
"include": "#range"
},
{
"include": "#number"
},
{
"include": "#string"
},
{
"include": "#variable_lookup"
}
]
},
"variable_lookup": {
"patterns": [
{
"match": "\\b(additional_checkout_buttons|address|all_country_option_tags|all_products|article|articles|block|blog|blogs|canonical_url|cart|checkout|collection|collections|comment|content_for_additional_checkout_buttons|content_for_header|content_for_index|content_for_layout|country_option_tags|currency|current_page|current_tags|customer|customer_address|discount_allocation|discount_application|external_video|font|forloop|form|fulfillment|gift_card|handle|image|images|line_item|link|linklist|linklists|location|localization|metafield|model|model_source|order|page|page_description|page_image|page_title|pages|paginate|part|policy|powered_by_link|predictive_search|product|product_option|product_variant|recommendations|request|routes|script|scripts|search|section|selling_plan|selling_plan_allocation|selling_plan_group|settings|shipping_method|shop|shop_locale|store_availability|tablerow|tax_line|template|theme|transaction|unit_price_measurement|variant|video|video_source)\\b",
"name": "variable.language.liquid"
},
{
"match": "((?<=\\w\\:\\s)\\w+)",
"name": "variable.parameter.liquid"
},
{
"begin": "(?<=\\w)\\[",
"beginCaptures": {
"0": {
"name": "punctuation.section.brackets.begin.liquid"
}
},
"end": "\\]",
"endCaptures": {
"0": {
"name": "punctuation.section.brackets.end.liquid"
}
},
"name": "meta.brackets.liquid",
"patterns": [
{
"include": "#string"
}
]
},
{
"match": "(?<=(\\w|\\])\\.)([-\\w]+\\??)",
"name": "variable.other.member.liquid"
},
{
"match": "(?<=\\w)\\.(?=\\w)",
"name": "punctuation.accessor.liquid"
},
{
"match": "(?i)[a-z_](\\w|(?:-(?!\\}\\})))*",
"name": "variable.other.liquid"
}
]
}
}
}