From 86271d32c2d91e5fbf172a625eda8902f1b6ff12 Mon Sep 17 00:00:00 2001 From: so1ve Date: Mon, 4 Dec 2023 19:09:36 +0800 Subject: [PATCH 1/6] tests --- test-workspace/tsc/vue3/#3765/main.vue | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 test-workspace/tsc/vue3/#3765/main.vue diff --git a/test-workspace/tsc/vue3/#3765/main.vue b/test-workspace/tsc/vue3/#3765/main.vue new file mode 100644 index 0000000000..1afc0b5cd1 --- /dev/null +++ b/test-workspace/tsc/vue3/#3765/main.vue @@ -0,0 +1,15 @@ + + + From 84f623fba30edede861d5f6111ed7bb7ead69dfb Mon Sep 17 00:00:00 2001 From: so1ve Date: Mon, 4 Dec 2023 19:23:07 +0800 Subject: [PATCH 2/6] fix: camelize props for `` --- packages/language-core/src/generators/template.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/language-core/src/generators/template.ts b/packages/language-core/src/generators/template.ts index 187cce04ca..eaf80769ee 100644 --- a/packages/language-core/src/generators/template.ts +++ b/packages/language-core/src/generators/template.ts @@ -1224,6 +1224,7 @@ export function generate( codes.push(`}, `); for (const prop of props) { + const shouldCamelize = !nativeTags.has(node.tag) || node.tag === 'component' || node.tag === 'Component'; if ( prop.type === CompilerDOM.NodeTypes.DIRECTIVE && (prop.name === 'bind' || prop.name === 'model') @@ -1260,7 +1261,7 @@ export function generate( if ( (!prop.arg || (prop.arg.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && prop.arg.isStatic)) // isStatic && hyphenateAttr(attrNameText) === attrNameText - && !nativeTags.has(node.tag) + && shouldCamelize && !vueCompilerOptions.htmlAttributes.some(pattern => minimatch(attrNameText!, pattern)) ) { attrNameText = camelize(attrNameText); @@ -1367,7 +1368,7 @@ export function generate( if ( hyphenateAttr(prop.name) === prop.name - && !nativeTags.has(node.tag) + && shouldCamelize && !vueCompilerOptions.htmlAttributes.some(pattern => minimatch(attrNameText!, pattern)) ) { attrNameText = camelize(prop.name); From 0ab0dfb1f3e4d13495e573a551fe784c49a77cc7 Mon Sep 17 00:00:00 2001 From: so1ve Date: Mon, 4 Dec 2023 19:43:09 +0800 Subject: [PATCH 3/6] move tests --- test-workspace/tsc/vue3/#3765/main.vue | 15 --------------- .../vue3_strictTemplate/dataAttributes/main.vue | 1 + 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 test-workspace/tsc/vue3/#3765/main.vue diff --git a/test-workspace/tsc/vue3/#3765/main.vue b/test-workspace/tsc/vue3/#3765/main.vue deleted file mode 100644 index 1afc0b5cd1..0000000000 --- a/test-workspace/tsc/vue3/#3765/main.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/test-workspace/tsc/vue3_strictTemplate/dataAttributes/main.vue b/test-workspace/tsc/vue3_strictTemplate/dataAttributes/main.vue index d0e07ec94a..3a380f8485 100644 --- a/test-workspace/tsc/vue3_strictTemplate/dataAttributes/main.vue +++ b/test-workspace/tsc/vue3_strictTemplate/dataAttributes/main.vue @@ -5,6 +5,7 @@ + From b6eda8246f177533c07c9b8a79e7f554b49f504f Mon Sep 17 00:00:00 2001 From: so1ve Date: Mon, 4 Dec 2023 19:54:22 +0800 Subject: [PATCH 4/6] refactor: use `node.tagType` --- packages/language-core/src/generators/template.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/language-core/src/generators/template.ts b/packages/language-core/src/generators/template.ts index eaf80769ee..82ec0de0e8 100644 --- a/packages/language-core/src/generators/template.ts +++ b/packages/language-core/src/generators/template.ts @@ -1224,7 +1224,7 @@ export function generate( codes.push(`}, `); for (const prop of props) { - const shouldCamelize = !nativeTags.has(node.tag) || node.tag === 'component' || node.tag === 'Component'; + const shouldCamelize = !nativeTags.has(node.tag) || node.tagType === CompilerDOM.ElementTypes.COMPONENT; if ( prop.type === CompilerDOM.NodeTypes.DIRECTIVE && (prop.name === 'bind' || prop.name === 'model') From f777f309484c226f0fa989b0887c7b1f804bc032 Mon Sep 17 00:00:00 2001 From: so1ve Date: Mon, 4 Dec 2023 20:31:53 +0800 Subject: [PATCH 5/6] minor refactor --- packages/language-core/src/generators/template.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/language-core/src/generators/template.ts b/packages/language-core/src/generators/template.ts index 82ec0de0e8..c193f12b2d 100644 --- a/packages/language-core/src/generators/template.ts +++ b/packages/language-core/src/generators/template.ts @@ -1223,8 +1223,9 @@ export function generate( } codes.push(`}, `); + const canCamelize = !nativeTags.has(node.tag) || node.tagType === CompilerDOM.ElementTypes.COMPONENT; + for (const prop of props) { - const shouldCamelize = !nativeTags.has(node.tag) || node.tagType === CompilerDOM.ElementTypes.COMPONENT; if ( prop.type === CompilerDOM.NodeTypes.DIRECTIVE && (prop.name === 'bind' || prop.name === 'model') @@ -1261,7 +1262,7 @@ export function generate( if ( (!prop.arg || (prop.arg.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && prop.arg.isStatic)) // isStatic && hyphenateAttr(attrNameText) === attrNameText - && shouldCamelize + && canCamelize && !vueCompilerOptions.htmlAttributes.some(pattern => minimatch(attrNameText!, pattern)) ) { attrNameText = camelize(attrNameText); @@ -1368,7 +1369,7 @@ export function generate( if ( hyphenateAttr(prop.name) === prop.name - && shouldCamelize + && canCamelize && !vueCompilerOptions.htmlAttributes.some(pattern => minimatch(attrNameText!, pattern)) ) { attrNameText = camelize(prop.name); From e3995da064c2d3c1a91c6fbf10cb0a3f7d01c87a Mon Sep 17 00:00:00 2001 From: so1ve Date: Mon, 4 Dec 2023 20:33:18 +0800 Subject: [PATCH 6/6] move condition --- packages/language-core/src/generators/template.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/language-core/src/generators/template.ts b/packages/language-core/src/generators/template.ts index c193f12b2d..f95543da24 100644 --- a/packages/language-core/src/generators/template.ts +++ b/packages/language-core/src/generators/template.ts @@ -1260,9 +1260,9 @@ export function generate( let camelized = false; if ( - (!prop.arg || (prop.arg.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && prop.arg.isStatic)) // isStatic + canCamelize + && (!prop.arg || (prop.arg.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION && prop.arg.isStatic)) // isStatic && hyphenateAttr(attrNameText) === attrNameText - && canCamelize && !vueCompilerOptions.htmlAttributes.some(pattern => minimatch(attrNameText!, pattern)) ) { attrNameText = camelize(attrNameText); @@ -1368,8 +1368,8 @@ export function generate( let camelized = false; if ( - hyphenateAttr(prop.name) === prop.name - && canCamelize + canCamelize + && hyphenateAttr(prop.name) === prop.name && !vueCompilerOptions.htmlAttributes.some(pattern => minimatch(attrNameText!, pattern)) ) { attrNameText = camelize(prop.name);