From f56a439f539e4d43aee958fa779bc2883e227994 Mon Sep 17 00:00:00 2001 From: SerKo Date: Sun, 16 Nov 2025 05:40:16 +0800 Subject: [PATCH 1/5] fix(vscode): improve handling of HTML tags starting with `template` --- .../vscode/syntaxes/vue.tmLanguage.json | 10 +++--- .../tests/__snapshots__/grammar.spec.ts.snap | 31 +++++++++++++++++++ .../tag-starts-with-template.vue | 11 +++++++ 3 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 extensions/vscode/tests/grammarFixtures/tag-starts-with-template.vue diff --git a/extensions/vscode/syntaxes/vue.tmLanguage.json b/extensions/vscode/syntaxes/vue.tmLanguage.json index e7e82a915d..7c7708911f 100644 --- a/extensions/vscode/syntaxes/vue.tmLanguage.json +++ b/extensions/vscode/syntaxes/vue.tmLanguage.json @@ -690,7 +690,7 @@ ] }, { - "begin": "(template)\\b", + "begin": "(template)(?=(?:\\s|\\/?>))", "beginCaptures": { "1": { "name": "entity.name.tag.$1.html.vue" @@ -711,7 +711,7 @@ }, { "begin": "(?<=>)", - "end": "(?=<\\/template\\b)", + "end": "(?=<\\/template(?=\\s|\\/?>))", "name": "text.html.derivative", "patterns": [ { @@ -872,7 +872,7 @@ "patterns": [ { "begin": "\\G", - "end": "(?=/>)|(()|(()))", "endCaptures": { "2": { "name": "punctuation.definition.tag.begin.html.vue" @@ -891,7 +891,7 @@ ] }, "template-tag-2": { - "begin": "(<)(template)\\b", + "begin": "(<)(template)(?=(?:\\s|\\/?>))", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html.vue" @@ -910,7 +910,7 @@ "patterns": [ { "begin": "\\G", - "end": "(?=/>)|(()|(()))", "endCaptures": { "2": { "name": "punctuation.definition.tag.begin.html.vue" diff --git a/extensions/vscode/tests/__snapshots__/grammar.spec.ts.snap b/extensions/vscode/tests/__snapshots__/grammar.spec.ts.snap index 5769077f2d..8afdfbe130 100644 --- a/extensions/vscode/tests/__snapshots__/grammar.spec.ts.snap +++ b/extensions/vscode/tests/__snapshots__/grammar.spec.ts.snap @@ -345,6 +345,37 @@ exports[`grammar > script-tag-in-script.vue 1`] = ` #^ source.vue" `; +exports[`grammar > tag-starts-with-template.vue 1`] = ` +"> +#^^ source.vue punctuation.definition.tag.begin.html.vue +# ^^^^^^^^ source.vue entity.name.tag.template.html.vue +# ^ source.vue punctuation.definition.tag.end.html.vue +> +#^ source.vue" +`; + exports[`grammar > template-expression.vue 1`] = ` "> #^^ source.vue punctuation.definition.tag.begin.html.vue # ^^^^^^^^ source.vue entity.name.tag.template.html.vue diff --git a/extensions/vscode/tests/grammarFixtures/tag-starts-with-template.vue b/extensions/vscode/tests/grammarFixtures/tag-starts-with-template.vue index a024243994..6ef436e833 100644 --- a/extensions/vscode/tests/grammarFixtures/tag-starts-with-template.vue +++ b/extensions/vscode/tests/grammarFixtures/tag-starts-with-template.vue @@ -1,11 +1,9 @@ From 0335831dc7c5b4dc590dcb06d717c8b3c0676a1b Mon Sep 17 00:00:00 2001 From: KazariEX Date: Sun, 16 Nov 2025 16:25:59 +0800 Subject: [PATCH 3/5] refactor: remove redundant non-capture groups --- 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 7c7708911f..6cd86a8f91 100644 --- a/extensions/vscode/syntaxes/vue.tmLanguage.json +++ b/extensions/vscode/syntaxes/vue.tmLanguage.json @@ -690,7 +690,7 @@ ] }, { - "begin": "(template)(?=(?:\\s|\\/?>))", + "begin": "(template)(?=\\s|\\/?>)", "beginCaptures": { "1": { "name": "entity.name.tag.$1.html.vue" @@ -872,7 +872,7 @@ "patterns": [ { "begin": "\\G", - "end": "(?=/>)|(()))", + "end": "(?=/>)|(())", "endCaptures": { "2": { "name": "punctuation.definition.tag.begin.html.vue" @@ -891,7 +891,7 @@ ] }, "template-tag-2": { - "begin": "(<)(template)(?=(?:\\s|\\/?>))", + "begin": "(<)(template)(?=\\s|\\/?>)", "beginCaptures": { "1": { "name": "punctuation.definition.tag.begin.html.vue" @@ -910,7 +910,7 @@ "patterns": [ { "begin": "\\G", - "end": "(?=/>)|(()))", + "end": "(?=/>)|(())", "endCaptures": { "2": { "name": "punctuation.definition.tag.begin.html.vue" From ae3d2ea0147f2eaea65e9ad5f2125eb63138367b Mon Sep 17 00:00:00 2001 From: KazariEX Date: Sun, 16 Nov 2025 16:31:20 +0800 Subject: [PATCH 4/5] fix: correct close tag pattern --- extensions/vscode/syntaxes/vue.tmLanguage.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/vscode/syntaxes/vue.tmLanguage.json b/extensions/vscode/syntaxes/vue.tmLanguage.json index 6cd86a8f91..abf43d223c 100644 --- a/extensions/vscode/syntaxes/vue.tmLanguage.json +++ b/extensions/vscode/syntaxes/vue.tmLanguage.json @@ -711,7 +711,7 @@ }, { "begin": "(?<=>)", - "end": "(?=<\\/template(?=\\s|\\/?>))", + "end": "(?=<\\/template[\\s>])", "name": "text.html.derivative", "patterns": [ { @@ -872,7 +872,7 @@ "patterns": [ { "begin": "\\G", - "end": "(?=/>)|(())", + "end": "(?=/>)|((]))", "endCaptures": { "2": { "name": "punctuation.definition.tag.begin.html.vue" @@ -910,7 +910,7 @@ "patterns": [ { "begin": "\\G", - "end": "(?=/>)|(())", + "end": "(?=/>)|((]))", "endCaptures": { "2": { "name": "punctuation.definition.tag.begin.html.vue" From 06e96b4e98647c613dad0ed26ebea23f3d1373ff Mon Sep 17 00:00:00 2001 From: KazariEX Date: Sun, 16 Nov 2025 16:38:27 +0800 Subject: [PATCH 5/5] fix: same change to `