From fe29f5e3c9df56da143d1b37dd02569adb0fc4b4 Mon Sep 17 00:00:00 2001 From: so1ve <i@mk1.io> 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 9a0f859ea1..078ef123d6 100644 --- a/packages/language-core/src/generators/script.ts +++ b/packages/language-core/src/generators/script.ts @@ -849,7 +849,7 @@ declare function defineProp<T>(value?: T | (() => T), required?: boolean, rest?: codes.push(`let __VLS_otherComponents!: NonNullable<typeof __VLS_internalComponent extends { components: infer C } ? C : {}> & typeof __VLS_componentsOption;\n`); codes.push(`let __VLS_own!: __VLS_SelfComponent<typeof __VLS_name, typeof __VLS_internalComponent & (new () => { ${getSlotsPropertyName(vueCompilerOptions.target)}: typeof ${scriptSetupRanges?.slots?.name ?? '__VLS_slots'} })>;\n`); codes.push(`let __VLS_localComponents!: typeof __VLS_otherComponents & Omit<typeof __VLS_own, keyof typeof __VLS_otherComponents>;\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<typeof __VLS_ctx, keyof typeof __VLS_localComponents>;\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 6a069f79a3..85b8c33f4d 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 0000000000..ae022dbe8a --- /dev/null +++ b/test-workspace/tsc/vue3/#3411/Comp.vue @@ -0,0 +1,5 @@ +<script setup lang="ts"> +defineEmits<{ + (e: 'foo', arg: number): void +}>(); +</script> diff --git a/test-workspace/tsc/vue3/#3411/main.vue b/test-workspace/tsc/vue3/#3411/main.vue new file mode 100644 index 0000000000..02747981d6 --- /dev/null +++ b/test-workspace/tsc/vue3/#3411/main.vue @@ -0,0 +1,24 @@ +<script lang="ts"> +import { defineComponent } from 'vue'; +import Comp from './Comp.vue'; +import { exactType } from '../../shared'; + +export default defineComponent({ + components: { + Comp, + }, + computed: { + Comp() { + return 123; + }, + }, + methods: { + exactType, + }, +}); +</script> + +<template> + <Comp @foo="e => exactType(e, 1 as number)" /> + {{ exactType(Comp, 123) }} +</template> From e21160b7157f659b46b931e1247efc12313ff590 Mon Sep 17 00:00:00 2001 From: so1ve <i@mk1.io> 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 f95543da24..00af39dc08 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),