From fe29f5e3c9df56da143d1b37dd02569adb0fc4b4 Mon Sep 17 00:00:00 2001 From: so1ve Date: Tue, 21 Nov 2023 16:21:06 +0800 Subject: [PATCH 1/2] fix: allow data with the same name as components --- .../language-core/src/generators/script.ts | 2 +- .../language-core/src/generators/template.ts | 2 +- test-workspace/tsc/vue3/#3411/Comp.vue | 5 ++++ test-workspace/tsc/vue3/#3411/main.vue | 24 +++++++++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 test-workspace/tsc/vue3/#3411/Comp.vue create mode 100644 test-workspace/tsc/vue3/#3411/main.vue diff --git a/packages/language-core/src/generators/script.ts b/packages/language-core/src/generators/script.ts index 9a0f859ea..078ef123d 100644 --- a/packages/language-core/src/generators/script.ts +++ b/packages/language-core/src/generators/script.ts @@ -849,7 +849,7 @@ declare function defineProp(value?: T | (() => T), required?: boolean, rest?: codes.push(`let __VLS_otherComponents!: NonNullable & typeof __VLS_componentsOption;\n`); codes.push(`let __VLS_own!: __VLS_SelfComponent { ${getSlotsPropertyName(vueCompilerOptions.target)}: typeof ${scriptSetupRanges?.slots?.name ?? '__VLS_slots'} })>;\n`); codes.push(`let __VLS_localComponents!: typeof __VLS_otherComponents & Omit;\n`); - codes.push(`let __VLS_components!: typeof __VLS_localComponents & __VLS_GlobalComponents & typeof __VLS_ctx;\n`); // for html completion, TS references... + codes.push(`let __VLS_components!: typeof __VLS_localComponents & Omit<__VLS_GlobalComponents, keyof typeof __VLS_ctx> & Omit;\n`); // for html completion, TS references... /* Style Scoped */ codes.push('/* Style Scoped */\n'); diff --git a/packages/language-core/src/generators/template.ts b/packages/language-core/src/generators/template.ts index 6a069f79a..85b8c33f4 100644 --- a/packages/language-core/src/generators/template.ts +++ b/packages/language-core/src/generators/template.ts @@ -685,7 +685,7 @@ export function generate( else { codes.push(`let ${var_originalComponent}!: `); for (const componentName of getPossibleOriginalComponentName(tag)) { - codes.push(`'${componentName}' extends keyof typeof __VLS_ctx ? typeof __VLS_ctx${validTsVarReg.test(componentName) ? `.${componentName}` : `['${componentName}']`} : `); + codes.push(`'${componentName}' extends keyof typeof __VLS_components ? typeof __VLS_components${validTsVarReg.test(componentName) ? `.${componentName}` : `['${componentName}']`} : `); } codes.push(`typeof __VLS_resolvedLocalAndGlobalComponents['${toCanonicalComponentName(tag)}'];\n`); } diff --git a/test-workspace/tsc/vue3/#3411/Comp.vue b/test-workspace/tsc/vue3/#3411/Comp.vue new file mode 100644 index 000000000..ae022dbe8 --- /dev/null +++ b/test-workspace/tsc/vue3/#3411/Comp.vue @@ -0,0 +1,5 @@ + diff --git a/test-workspace/tsc/vue3/#3411/main.vue b/test-workspace/tsc/vue3/#3411/main.vue new file mode 100644 index 000000000..02747981d --- /dev/null +++ b/test-workspace/tsc/vue3/#3411/main.vue @@ -0,0 +1,24 @@ + + + From e21160b7157f659b46b931e1247efc12313ff590 Mon Sep 17 00:00:00 2001 From: so1ve Date: Wed, 6 Dec 2023 19:48:57 +0800 Subject: [PATCH 2/2] re-fix --- packages/language-core/src/generators/template.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/language-core/src/generators/template.ts b/packages/language-core/src/generators/template.ts index f95543da2..00af39dc0 100644 --- a/packages/language-core/src/generators/template.ts +++ b/packages/language-core/src/generators/template.ts @@ -505,7 +505,7 @@ export function generate( let addedBlockCondition = false; if (branch.condition?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { - codes.push(` `); + codes.push(` (`); const beforeCodeLength = codes.length; codes.push( ...createInterpolationCode( @@ -518,6 +518,11 @@ export function generate( ), ); const afterCodeLength = codes.length; + codes.push( + ` && __VLS_components`, + ...createPropertyAccessCode(branch.condition.content), + ) + codes.push(')'); formatCodes.push( ...createFormatCode( @@ -688,14 +693,14 @@ export function generate( ); for (const componentName of getPossibleOriginalComponentName(tag)) { codes.push( - `'${componentName}' extends keyof typeof __VLS_ctx ? `, - `{ '${toCanonicalComponentName(tag)}': typeof __VLS_ctx`, + `'${componentName}' extends keyof typeof __VLS_components ? `, + `{ '${toCanonicalComponentName(tag)}': typeof __VLS_components`, ...createPropertyAccessCode(componentName), ` }: `, ); } codes.push( - `typeof __VLS_resolvedLocalAndGlobalComponents)`, + `typeof __VLS_ctx)`, ...(tagOffsets.length ? createPropertyAccessCode([ toCanonicalComponentName(tag),