tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,553 lines (1,552 loc) • 40.5 kB
JSON
{
"displayName": "Vue",
"name": "vue",
"patterns": [
{
"include": "#vue-comments"
},
{
"include": "#self-closing-tag"
},
{
"begin": "(<)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
}
},
"end": "(>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.html.vue"
}
},
"patterns": [
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)md\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "text.html.markdown",
"patterns": [
{
"include": "text.html.markdown"
}
]
}
]
},
{
"begin": "(?!template(?![-0-:A-Za-z]))([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)html\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"contentName": "text.html.derivative",
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"include": "#html-stuff"
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)pug\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "text.pug",
"patterns": [
{
"include": "text.pug"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)stylus\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.stylus",
"patterns": [
{
"include": "source.stylus"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)postcss\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.postcss",
"patterns": [
{
"include": "source.postcss"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)sass\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.sass",
"patterns": [
{
"include": "source.sass"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)css\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.css",
"patterns": [
{
"include": "source.css"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)scss\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.css.scss",
"patterns": [
{
"include": "source.css.scss"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)less\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.css.less",
"patterns": [
{
"include": "source.css.less"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)js\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.js",
"patterns": [
{
"include": "source.js"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)ts\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)(?=[^\\n]*</script[>\\s])",
"end": "(?=</script[>\\s])",
"name": "source.ts",
"patterns": [
{
"include": "source.ts"
}
]
},
{
"begin": "(?<=>)",
"name": "source.ts",
"patterns": [
{
"include": "source.ts"
}
],
"while": "^(?!\\s*</script[>\\s])"
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)jsx\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.js.jsx",
"patterns": [
{
"include": "source.js.jsx"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)tsx\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)(?=[^\\n]*</script[>\\s])",
"end": "(?=</script[>\\s])",
"name": "source.tsx",
"patterns": [
{
"include": "source.tsx"
}
]
},
{
"begin": "(?<=>)",
"name": "source.tsx",
"patterns": [
{
"include": "source.tsx"
}
],
"while": "^(?!\\s*</script[>\\s])"
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)coffee\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.coffee",
"patterns": [
{
"include": "source.coffee"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)json\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.json",
"patterns": [
{
"include": "source.json"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)jsonc\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.json.comments",
"patterns": [
{
"include": "source.json.comments"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)json5\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.json5",
"patterns": [
{
"include": "source.json5"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)yaml\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.yaml",
"patterns": [
{
"include": "source.yaml"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)toml\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.toml",
"patterns": [
{
"include": "source.toml"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)(g(?:ql|raphql))\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "source.graphql",
"patterns": [
{
"include": "source.graphql"
}
]
}
]
},
{
"begin": "([-0-:A-Za-z]+)\\b(?=[^>]*\\blang\\s*=\\s*([\"']?)vue\\b\\2)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "text.html.vue",
"patterns": [
{
"include": "text.html.vue"
}
]
}
]
},
{
"begin": "(template)(?=\\s|/?>)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</template[>\\s])",
"name": "text.html.derivative",
"patterns": [
{
"include": "#html-stuff"
}
]
}
]
},
{
"begin": "(script)(?=\\s|/?>)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#multi-line-script-tag-stuff"
}
]
},
{
"begin": "(style)(?=\\s|/?>)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#multi-line-style-tag-stuff"
}
]
},
{
"begin": "([-0-:A-Za-z]+)",
"beginCaptures": {
"1": {
"name": "entity.name.tag.$1.html.vue"
}
},
"end": "(</)(\\1)\\s*(?=>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</)",
"name": "text"
}
]
}
]
}
],
"repository": {
"html-stuff": {
"patterns": [
{
"include": "#template-tag"
},
{
"include": "text.html.derivative"
},
{
"include": "text.html.basic"
}
]
},
"multi-line-script-tag-stuff": {
"begin": "\\G",
"end": "(?=</script[>\\s])",
"patterns": [
{
"begin": "\\G(?!\\blang\\s*=\\s*[\"']?(?:tsx??|jsx|coffee)\\b)",
"end": "(?=\\blang\\s*=\\s*[\"']?(?:tsx??|jsx|coffee)\\b)|(>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.html.vue"
}
},
"name": "meta.tag-stuff",
"patterns": [
{
"include": "#vue-directives"
},
{
"include": "text.html.basic#attribute"
}
]
},
{
"begin": "(?=\\blang\\s*=\\s*[\"']?ts\\b)",
"end": "(?=</script[>\\s])",
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)(?=[^\\n]*</script[>\\s])",
"end": "(?=</script[>\\s])",
"name": "source.ts",
"patterns": [
{
"include": "source.ts"
}
]
},
{
"begin": "(?<=>)",
"name": "source.ts",
"patterns": [
{
"include": "source.ts"
}
],
"while": "^(?!\\s*</script[>\\s])"
}
]
},
{
"begin": "(?=\\blang\\s*=\\s*[\"']?tsx\\b)",
"end": "(?=</script[>\\s])",
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)(?=[^\\n]*</script[>\\s])",
"end": "(?=</script[>\\s])",
"name": "source.tsx",
"patterns": [
{
"include": "source.tsx"
}
]
},
{
"begin": "(?<=>)",
"name": "source.tsx",
"patterns": [
{
"include": "source.tsx"
}
],
"while": "^(?!\\s*</script[>\\s])"
}
]
},
{
"begin": "(?=\\blang\\s*=\\s*[\"']?jsx\\b)",
"end": "(?=</script[>\\s])",
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</script[>\\s])",
"name": "source.js.jsx",
"patterns": [
{
"include": "source.js.jsx"
}
]
}
]
},
{
"begin": "(?=\\blang\\s*=\\s*[\"']?coffee\\b)",
"end": "(?=</script[>\\s])",
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</script[>\\s])",
"name": "source.coffee",
"patterns": [
{
"include": "source.coffee"
}
]
}
]
},
{
"begin": "(?<=>)",
"end": "(?=</script[>\\s])",
"name": "source.js",
"patterns": [
{
"include": "source.js"
}
]
}
]
},
"multi-line-style-tag-stuff": {
"begin": "\\G",
"end": "(?=</style[>\\s])",
"patterns": [
{
"begin": "\\G(?!\\blang\\s*=\\s*[\"']?(?:scss|stylus|less|postcss)\\b)",
"end": "(?=\\blang\\s*=\\s*[\"']?(?:scss|stylus|less|postcss)\\b)|(>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.html.vue"
}
},
"name": "meta.tag-stuff",
"patterns": [
{
"include": "#vue-directives"
},
{
"include": "text.html.basic#attribute"
}
]
},
{
"begin": "(?=\\blang\\s*=\\s*[\"']?scss\\b)",
"end": "(?=</style[>\\s])",
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</style[>\\s])",
"name": "source.css.scss",
"patterns": [
{
"include": "source.css.scss"
}
]
}
]
},
{
"begin": "(?=\\blang\\s*=\\s*[\"']?stylus\\b)",
"end": "(?=</style[>\\s])",
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</style[>\\s])",
"name": "source.stylus",
"patterns": [
{
"include": "source.stylus"
}
]
}
]
},
{
"begin": "(?=\\blang\\s*=\\s*[\"']?less\\b)",
"end": "(?=</style[>\\s])",
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</style[>\\s])",
"name": "source.css.less",
"patterns": [
{
"include": "source.css.less"
}
]
}
]
},
{
"begin": "(?=\\blang\\s*=\\s*[\"']?postcss\\b)",
"end": "(?=</style[>\\s])",
"patterns": [
{
"include": "#tag-stuff"
},
{
"begin": "(?<=>)",
"end": "(?=</style[>\\s])",
"name": "source.postcss",
"patterns": [
{
"include": "source.postcss"
}
]
}
]
},
{
"begin": "(?<=>)",
"end": "(?=</style[>\\s])",
"name": "source.css",
"patterns": [
{
"include": "source.css"
}
]
}
]
},
"self-closing-tag": {
"begin": "(<)([-0-:A-Za-z]+)(?=([^>]+/>))",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"end": "(/>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.html.vue"
}
},
"name": "self-closing-tag",
"patterns": [
{
"include": "#tag-stuff"
}
]
},
"tag-stuff": {
"begin": "\\G",
"end": "(?=/>)|(>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.html.vue"
}
},
"name": "meta.tag-stuff",
"patterns": [
{
"include": "#vue-directives"
},
{
"include": "text.html.basic#attribute"
}
]
},
"template-tag": {
"patterns": [
{
"include": "#template-tag-1"
},
{
"include": "#template-tag-2"
}
]
},
"template-tag-1": {
"begin": "(<)(template)\\b(>)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
},
"3": {
"name": "punctuation.definition.tag.end.html.vue"
}
},
"end": "(/?>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.html.vue"
}
},
"name": "meta.template-tag.start",
"patterns": [
{
"begin": "\\G",
"end": "(?=/>)|((</)(template)(?=[>\\s]))",
"endCaptures": {
"2": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"3": {
"name": "entity.name.tag.$3.html.vue"
}
},
"name": "meta.template-tag.end",
"patterns": [
{
"include": "#html-stuff"
}
]
}
]
},
"template-tag-2": {
"begin": "(<)(template)(?=\\s|/?>)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"2": {
"name": "entity.name.tag.$2.html.vue"
}
},
"end": "(/?>)",
"endCaptures": {
"1": {
"name": "punctuation.definition.tag.end.html.vue"
}
},
"name": "meta.template-tag.start",
"patterns": [
{
"begin": "\\G",
"end": "(?=/>)|((</)(template)(?=[>\\s]))",
"endCaptures": {
"2": {
"name": "punctuation.definition.tag.begin.html.vue"
},
"3": {
"name": "entity.name.tag.$3.html.vue"
}
},
"name": "meta.template-tag.end",
"patterns": [
{
"include": "#tag-stuff"
},
{
"include": "#html-stuff"
}
]
}
]
},
"vue-comments": {
"patterns": [
{
"include": "#vue-comments-key-value"
},
{
"begin": "<!--",
"captures": {
"0": {
"name": "punctuation.definition.comment.vue"
}
},
"end": "-->",
"name": "comment.block.vue"
}
]
},
"vue-comments-key-value": {
"begin": "(<!--)\\s*(@)([$\\w]+)(?=\\s)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.comment.vue"
},
"2": {
"name": "punctuation.definition.block.tag.comment.vue"
},
"3": {
"name": "storage.type.class.comment.vue"
}
},
"end": "(-->)",
"endCaptures": {
"1": {
"name": "punctuation.definition.comment.vue"
}
},
"name": "comment.block.vue",
"patterns": [
{
"include": "source.json#value"
}
]
},
"vue-directives": {
"patterns": [
{
"include": "#vue-directives-control"
},
{
"include": "#vue-directives-generic-attr"
},
{
"include": "#vue-directives-style-attr"
},
{
"include": "#vue-directives-original"
}
]
},
"vue-directives-control": {
"begin": "(?:(v-for)|(v-(?:if|else-if|else)))(?=[)/=>\\s])",
"beginCaptures": {
"1": {
"name": "keyword.control.loop.vue"
},
"2": {
"name": "keyword.control.conditional.vue"
}
},
"end": "(?=\\s*[^=\\s])",
"name": "meta.attribute.directive.control.vue",
"patterns": [
{
"include": "#vue-directives-expression"
}
]
},
"vue-directives-expression": {
"patterns": [
{
"begin": "(=)\\s*([\"'`])",
"beginCaptures": {
"1": {
"name": "punctuation.separator.key-value.html.vue"
},
"2": {
"name": "punctuation.definition.string.begin.html.vue"
}
},
"end": "(\\2)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.html.vue"
}
},
"patterns": [
{
"begin": "(?<=([\"'`]))",
"end": "(?=\\1)",
"name": "source.ts.embedded.html.vue",
"patterns": [
{
"include": "source.ts#expression"
}
]
}
]
},
{
"begin": "(=)\\s*(?=[^\"'`])",
"beginCaptures": {
"1": {
"name": "punctuation.separator.key-value.html.vue"
}
},
"end": "(?=([>\\s]|/>))",
"patterns": [
{
"begin": "(?=[^\"'`])",
"end": "(?=([>\\s]|/>))",
"name": "source.ts.embedded.html.vue",
"patterns": [
{
"include": "source.ts#expression"
}
]
}
]
}
]
},
"vue-directives-generic-attr": {
"begin": "\\b(generic)\\s*(=)",
"beginCaptures": {
"1": {
"name": "entity.other.attribute-name.html.vue"
},
"2": {
"name": "punctuation.separator.key-value.html.vue"
}
},
"end": "(?<=[\"'])",
"name": "meta.attribute.generic.vue",
"patterns": [
{
"begin": "([\"'])",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.html.vue"
}
},
"end": "(\\1)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.html.vue"
}
},
"name": "meta.type.parameters.vue",
"patterns": [
{
"include": "source.ts#comment"
},
{
"match": "(?<![$_[:alnum:]])(?:(?<=\\.\\.\\.)|(?<!\\.))(extends|in|out)(?![$_[:alnum:]])(?:(?=\\.\\.\\.)|(?!\\.))",
"name": "storage.modifier.ts"
},
{
"include": "source.ts#type"
},
{
"include": "source.ts#punctuation-comma"
},
{
"match": "(=)(?!>)",
"name": "keyword.operator.assignment.ts"
}
]
}
]
},
"vue-directives-original": {
"begin": "(?:(v-[-\\w]+)(:)?|([.:])|(@)|(#))(?:(\\[)([^]]*)(])|([-\\w]+))?",
"beginCaptures": {
"1": {
"name": "entity.other.attribute-name.html.vue"
},
"2": {
"name": "punctuation.separator.key-value.html.vue"
},
"3": {
"name": "punctuation.attribute-shorthand.bind.html.vue"
},
"4": {
"name": "punctuation.attribute-shorthand.event.html.vue"
},
"5": {
"name": "punctuation.attribute-shorthand.slot.html.vue"
},
"6": {
"name": "punctuation.separator.key-value.html.vue"
},
"7": {
"name": "source.ts.embedded.html.vue",
"patterns": [
{
"include": "source.ts#expression"
}
]
},
"8": {
"name": "punctuation.separator.key-value.html.vue"
},
"9": {
"name": "entity.other.attribute-name.html.vue"
}
},
"end": "(?=\\s*[^=\\s])",
"name": "meta.attribute.directive.vue",
"patterns": [
{
"1": {
"name": "punctuation.separator.key-value.html.vue"
},
"2": {
"name": "entity.other.attribute-name.html.vue"
},
"match": "(\\.)([-\\w]*)"
},
{
"include": "#vue-directives-expression"
}
]
},
"vue-directives-style-attr": {
"begin": "\\b(style)\\s*(=)",
"beginCaptures": {
"1": {
"name": "entity.other.attribute-name.html.vue"
},
"2": {
"name": "punctuation.separator.key-value.html.vue"
}
},
"end": "(?<=[\"'])",
"name": "meta.attribute.style.vue",
"patterns": [
{
"begin": "([\"'])",
"beginCaptures": {
"1": {
"name": "punctuation.definition.string.begin.html.vue"
}
},
"end": "(\\1)",
"endCaptures": {
"1": {
"name": "punctuation.definition.string.end.html.vue"
}
},
"name": "source.css.embedded.html.vue",
"patterns": [
{
"include": "source.css#comment-block"
},
{
"include": "source.css#escapes"
},
{
"include": "source.css#font-features"
},
{
"match": "(?<![-\\w])--[-A-Z_a-z[^\\x00-\\x7F]](?:[-0-9A-Z_a-z[^\\x00-\\x7F]]|\\\\(?:\\h{1,6}|.))*",
"name": "variable.css"
},
{
"begin": "(?<![-A-Za-z])(?=[-A-Za-z])",
"end": "$|(?![-A-Za-z])",
"name": "meta.property-name.css",
"patterns": [
{
"include": "source.css#property-names"
}
]
},
{
"begin": "(:)\\s*",
"beginCaptures": {
"1": {
"name": "punctuation.separator.key-value.css"
}
},
"contentName": "meta.property-value.css",
"end": "\\s*(;)|\\s*(?=[\"'])",
"endCaptures": {
"1": {
"name": "punctuation.terminator.rule.css"
}
},
"patterns": [
{
"include": "source.css#comment-block"
},
{
"include": "source.css#property-values"
}
]
},
{
"match": ";",
"name": "punctuation.terminator.rule.css"
}
]
}
]
},
"vue-interpolations": {
"patterns": [
{
"begin": "(\\{\\{)",
"beginCaptures": {
"1": {
"name": "punctuation.definition.interpolation.begin.html.vue"
}
},
"end": "(}})",
"endCaptures": {
"1": {
"name": "punctuation.definition.interpolation.end.html.vue"
}
},
"name": "expression.embedded.vue",
"patterns": [
{
"begin": "\\G",
"end": "(?=}})",
"name": "source.ts.embedded.html.vue",
"patterns": [
{
"include": "source.ts#expression"
}
]
}
]
}
]
}
},
"scopeName": "text.html.vue"
}