From 3756687c0c44f088bf945c858a565c23eb9284b2 Mon Sep 17 00:00:00 2001 From: SerKo Date: Mon, 8 Dec 2025 05:17:38 +0800 Subject: [PATCH 1/6] wip --- .../vscode/syntaxes/vue.tmLanguage.json | 182 +++++++++++++++--- 1 file changed, 158 insertions(+), 24 deletions(-) diff --git a/extensions/vscode/syntaxes/vue.tmLanguage.json b/extensions/vscode/syntaxes/vue.tmLanguage.json index b0d1cab30e..932cd2e778 100644 --- a/extensions/vscode/syntaxes/vue.tmLanguage.json +++ b/extensions/vscode/syntaxes/vue.tmLanguage.json @@ -242,7 +242,7 @@ ] }, { - "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)scss\\b\\2)", + "begin": "([a-zA-Z0-9:-]+)\\b(?=[\\s\\S]*?\\blang\\s*=\\s*(?:['\"]?)scss\\b)", "beginCaptures": { "1": { "name": "entity.name.tag.$1.html.vue" @@ -338,7 +338,7 @@ ] }, { - "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)ts\\b\\2)", + "begin": "([a-zA-Z0-9:-]+)\\b(?=[\\s\\S]*?\\blang\\s*=\\s*(?:['\"]?)ts\\b)", "beginCaptures": { "1": { "name": "entity.name.tag.$1.html.vue" @@ -739,17 +739,7 @@ }, "patterns": [ { - "include": "#tag-stuff" - }, - { - "begin": "(?<=>)", - "end": "(?=<\\/script[\\s>])", - "name": "source.js", - "patterns": [ - { - "include": "source.js" - } - ] + "include": "#script-tag-stuff" } ] }, @@ -771,17 +761,7 @@ }, "patterns": [ { - "include": "#tag-stuff" - }, - { - "begin": "(?<=>)", - "end": "(?=<\\/style[\\s>])", - "name": "source.css", - "patterns": [ - { - "include": "source.css" - } - ] + "include": "#style-tag-stuff" } ] }, @@ -816,6 +796,160 @@ } ], "repository": { + "script-tag-stuff": { + "begin": "\\G", + "end": "(?=<\\/script[\\s>])", + "patterns": [ + { + "begin": "\\G", + "end": "(?=\\blang\\s*=)|(>)", + "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", + "beginCaptures": { + "0": { + "name": "entity.other.attribute-name.lang.html.vue" + } + }, + "end": "(?=<\\/script[\\s>])", + "patterns": [ + { + "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" + } + ] + }, + { + "begin": "(?<=>)", + "end": "(?=<\\/script[\\s>])", + "name": "source.ts", + "patterns": [ + { + "include": "source.ts" + } + ] + } + ] + }, + { + "begin": "(?<=>)", + "end": "(?=<\\/script[\\s>])", + "name": "source.js", + "patterns": [ + { + "include": "source.js" + } + ] + } + ] + }, + "style-tag-stuff": { + "begin": "\\G", + "end": "(?=<\\/style[\\s>])", + "patterns": [ + { + "begin": "\\G", + "end": "(?=\\blang\\s*=)|(>)", + "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", + "beginCaptures": { + "0": { + "name": "entity.other.attribute-name.lang.html.vue" + } + }, + "end": "()", + "endCaptures": { + "1": { + "name": "punctuation.definition.tag.begin.html.vue" + }, + "2": { + "name": "entity.name.tag.$2.html.vue" + } + }, + "patterns": [ + { + "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" + } + ] + }, + { + "begin": "(?<=>)", + "end": "(?=<\\/style[\\s>])", + "name": "source.css.scss", + "patterns": [ + { + "include": "source.css.scss" + } + ] + } + ] + }, + { + "begin": "(?<=>)", + "end": "(?=<\\/style[\\s>])", + "name": "source.css", + "patterns": [ + { + "include": "source.css" + } + ] + } + ] + }, "self-closing-tag": { "begin": "(<)([a-zA-Z0-9:-]+)(?=([^>]+/>))", "beginCaptures": { From c367428e7681d9801241db54a1994d21b2e66739 Mon Sep 17 00:00:00 2001 From: SerKo Date: Mon, 8 Dec 2025 05:21:57 +0800 Subject: [PATCH 2/6] fix: lang attr --- extensions/vscode/syntaxes/vue.tmLanguage.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/vscode/syntaxes/vue.tmLanguage.json b/extensions/vscode/syntaxes/vue.tmLanguage.json index 932cd2e778..baf3f1de40 100644 --- a/extensions/vscode/syntaxes/vue.tmLanguage.json +++ b/extensions/vscode/syntaxes/vue.tmLanguage.json @@ -819,7 +819,7 @@ ] }, { - "begin": "\\blang\\s*=\\s*(?:['\"]?)ts\\b", + "begin": "\\blang\\s*=\\s*(?:(['\"])ts\\1|ts\\b)", "beginCaptures": { "0": { "name": "entity.other.attribute-name.lang.html.vue" @@ -892,7 +892,7 @@ ] }, { - "begin": "\\blang\\s*=\\s*(?:['\"]?)scss\\b", + "begin": "\\blang\\s*=\\s*(?:(['\"])scss\\1|scss\\b)", "beginCaptures": { "0": { "name": "entity.other.attribute-name.lang.html.vue" From d0dc820686254546ac5c79750226919c687d8c34 Mon Sep 17 00:00:00 2001 From: SerKo Date: Tue, 9 Dec 2025 02:14:17 +0800 Subject: [PATCH 3/6] wip: lang attribute handling --- .../vscode/syntaxes/vue.tmLanguage.json | 70 +++---------------- 1 file changed, 11 insertions(+), 59 deletions(-) diff --git a/extensions/vscode/syntaxes/vue.tmLanguage.json b/extensions/vscode/syntaxes/vue.tmLanguage.json index baf3f1de40..f1669c1467 100644 --- a/extensions/vscode/syntaxes/vue.tmLanguage.json +++ b/extensions/vscode/syntaxes/vue.tmLanguage.json @@ -242,7 +242,7 @@ ] }, { - "begin": "([a-zA-Z0-9:-]+)\\b(?=[\\s\\S]*?\\blang\\s*=\\s*(?:['\"]?)scss\\b)", + "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)scss\\b\\2)", "beginCaptures": { "1": { "name": "entity.name.tag.$1.html.vue" @@ -338,7 +338,7 @@ ] }, { - "begin": "([a-zA-Z0-9:-]+)\\b(?=[\\s\\S]*?\\blang\\s*=\\s*(?:['\"]?)ts\\b)", + "begin": "([a-zA-Z0-9:-]+)\\b(?=[^>]*\\blang\\s*=\\s*(['\"]?)ts\\b\\2)", "beginCaptures": { "1": { "name": "entity.name.tag.$1.html.vue" @@ -801,8 +801,8 @@ "end": "(?=<\\/script[\\s>])", "patterns": [ { - "begin": "\\G", - "end": "(?=\\blang\\s*=)|(>)", + "begin": "\\G(?!\\blang\\s*=\\s*(?:['\"]?)ts\\b)", + "end": "(?=\\blang\\s*=\\s*(?:['\"]?)ts\\b)|(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html.vue" @@ -819,31 +819,11 @@ ] }, { - "begin": "\\blang\\s*=\\s*(?:(['\"])ts\\1|ts\\b)", - "beginCaptures": { - "0": { - "name": "entity.other.attribute-name.lang.html.vue" - } - }, + "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)ts\\b)", "end": "(?=<\\/script[\\s>])", "patterns": [ { - "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" - } - ] + "include": "#tag-stuff" }, { "begin": "(?<=>)", @@ -874,8 +854,8 @@ "end": "(?=<\\/style[\\s>])", "patterns": [ { - "begin": "\\G", - "end": "(?=\\blang\\s*=)|(>)", + "begin": "\\G(?!\\blang\\s*=\\s*(?:['\"]?)scss\\b)", + "end": "(?=\\blang\\s*=\\s*(?:['\"]?)scss\\b)|(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html.vue" @@ -892,39 +872,11 @@ ] }, { - "begin": "\\blang\\s*=\\s*(?:(['\"])scss\\1|scss\\b)", - "beginCaptures": { - "0": { - "name": "entity.other.attribute-name.lang.html.vue" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html.vue" - }, - "2": { - "name": "entity.name.tag.$2.html.vue" - } - }, + "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)scss\\b)", + "end": "(?=<\\/style[\\s>])", "patterns": [ { - "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" - } - ] + "include": "#tag-stuff" }, { "begin": "(?<=>)", From 2f00674f7348d8c81f91b54b9ccb1193f1bdece5 Mon Sep 17 00:00:00 2001 From: SerKo Date: Tue, 9 Dec 2025 02:52:32 +0800 Subject: [PATCH 4/6] wip: add script langs --- .../vscode/syntaxes/vue.tmLanguage.json | 61 ++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/extensions/vscode/syntaxes/vue.tmLanguage.json b/extensions/vscode/syntaxes/vue.tmLanguage.json index f1669c1467..4a579e76c6 100644 --- a/extensions/vscode/syntaxes/vue.tmLanguage.json +++ b/extensions/vscode/syntaxes/vue.tmLanguage.json @@ -801,8 +801,8 @@ "end": "(?=<\\/script[\\s>])", "patterns": [ { - "begin": "\\G(?!\\blang\\s*=\\s*(?:['\"]?)ts\\b)", - "end": "(?=\\blang\\s*=\\s*(?:['\"]?)ts\\b)|(>)", + "begin": "\\G(?!\\blang\\s*=\\s*(?:['\"]?)(?:ts|tsx|jsx|coffee)\\b)", + "end": "(?=\\blang\\s*=\\s*(?:['\"]?)(?:ts|tsx|jsx|coffee)\\b)|(>)", "endCaptures": { "1": { "name": "punctuation.definition.tag.end.html.vue" @@ -837,6 +837,63 @@ } ] }, + { + "begin": "(?=\\blang\\s*=\\s*(?:['\"]?)tsx\\b)", + "end": "(?=<\\/script[\\s>])", + "patterns": [ + { + "include": "#tag-stuff" + }, + { + "begin": "(?<=>)", + "end": "(?=<\\/script[\\s>])", + "name": "source.tsx", + "patterns": [ + { + "include": "source.tsx" + } + ] + } + ] + }, + { + "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>])", From 0d022ebdca120874fe86fbe842d3b22b908384a7 Mon Sep 17 00:00:00 2001 From: SerKo Date: Tue, 9 Dec 2025 02:55:45 +0800 Subject: [PATCH 5/6] wip: add style langs --- .../vscode/syntaxes/vue.tmLanguage.json | 61 ++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/extensions/vscode/syntaxes/vue.tmLanguage.json b/extensions/vscode/syntaxes/vue.tmLanguage.json index 4a579e76c6..24993ad409 100644 --- a/extensions/vscode/syntaxes/vue.tmLanguage.json +++ b/extensions/vscode/syntaxes/vue.tmLanguage.json @@ -911,8 +911,8 @@ "end": "(?=<\\/style[\\s>])", "patterns": [ { - "begin": "\\G(?!\\blang\\s*=\\s*(?:['\"]?)scss\\b)", - "end": "(?=\\blang\\s*=\\s*(?:['\"]?)scss\\b)|(>)", + "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" @@ -947,6 +947,63 @@ } ] }, + { + "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>])", From 3db477667b96ecf280ce495e81fedc381bfd76e4 Mon Sep 17 00:00:00 2001 From: SerKo Date: Tue, 9 Dec 2025 02:57:41 +0800 Subject: [PATCH 6/6] chore: rename --- extensions/vscode/syntaxes/vue.tmLanguage.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/extensions/vscode/syntaxes/vue.tmLanguage.json b/extensions/vscode/syntaxes/vue.tmLanguage.json index 24993ad409..0e1dbf8f3a 100644 --- a/extensions/vscode/syntaxes/vue.tmLanguage.json +++ b/extensions/vscode/syntaxes/vue.tmLanguage.json @@ -739,7 +739,7 @@ }, "patterns": [ { - "include": "#script-tag-stuff" + "include": "#multi-line-script-tag-stuff" } ] }, @@ -761,7 +761,7 @@ }, "patterns": [ { - "include": "#style-tag-stuff" + "include": "#multi-line-style-tag-stuff" } ] }, @@ -796,7 +796,7 @@ } ], "repository": { - "script-tag-stuff": { + "multi-line-script-tag-stuff": { "begin": "\\G", "end": "(?=<\\/script[\\s>])", "patterns": [ @@ -906,7 +906,7 @@ } ] }, - "style-tag-stuff": { + "multi-line-style-tag-stuff": { "begin": "\\G", "end": "(?=<\\/style[\\s>])", "patterns": [