From c82b7404c7975dc5a0076ff57ea8ded3eda086d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=90=B9=E8=89=B2=E5=BE=A1=E5=AE=88?= <85992002+KazariEX@users.noreply.github.com> Date: Fri, 18 Jul 2025 01:09:10 +0800 Subject: [PATCH] revert: type support of slot children (#5137) --- .../vscode/schemas/vue-tsconfig.schema.json | 5 ---- .../language-core/lib/codegen/globalTypes.ts | 8 ------ .../lib/codegen/template/context.ts | 1 - .../lib/codegen/template/element.ts | 4 --- .../lib/codegen/template/vSlot.ts | 13 --------- packages/language-core/lib/types.ts | 1 - packages/language-core/lib/utils/ts.ts | 1 - .../slot-children/child.vue | 5 ---- .../slot-children/main.vue | 28 ------------------- .../slot-children/parent.vue | 10 ------- 10 files changed, 76 deletions(-) delete mode 100644 test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/child.vue delete mode 100644 test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/main.vue delete mode 100644 test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/parent.vue diff --git a/extensions/vscode/schemas/vue-tsconfig.schema.json b/extensions/vscode/schemas/vue-tsconfig.schema.json index 58e0d998bf..e368f7f872 100644 --- a/extensions/vscode/schemas/vue-tsconfig.schema.json +++ b/extensions/vscode/schemas/vue-tsconfig.schema.json @@ -49,11 +49,6 @@ "default": false, "markdownDescription": "Enables strict templates. When set to `true`, all `checkUnknown*` options will be enabled." }, - "strictSlotChildren": { - "type": "boolean", - "default": false, - "markdownDescription": "Strict type constraints of slot children. If not set, uses the 'strictTemplates' value." - }, "strictVModel": { "type": "boolean", "default": false, diff --git a/packages/language-core/lib/codegen/globalTypes.ts b/packages/language-core/lib/codegen/globalTypes.ts index 88c7822830..c03bd3bf49 100644 --- a/packages/language-core/lib/codegen/globalTypes.ts +++ b/packages/language-core/lib/codegen/globalTypes.ts @@ -87,14 +87,6 @@ export function generateGlobalTypes({ expose?: (exposed: T) => void, } }; - type __VLS_NormalizeSlotReturns extends (...args: any) => infer K ? K : any> = R extends any[] ? { - [K in keyof R]: R[K] extends infer V - ? V extends Element ? V - : V extends new (...args: any) => infer R ? ReturnType<__VLS_FunctionalComponent> - : V extends (...args: any) => infer R ? R - : any - : never - } : R; type __VLS_IsFunction = K extends keyof T ? __VLS_IsAny extends false ? unknown extends T[K] diff --git a/packages/language-core/lib/codegen/template/context.ts b/packages/language-core/lib/codegen/template/context.ts index 4f8793252f..1e2c0beae4 100644 --- a/packages/language-core/lib/codegen/template/context.ts +++ b/packages/language-core/lib/codegen/template/context.ts @@ -213,7 +213,6 @@ export function createTemplateCodegenContext( templateRefs, currentComponent: undefined as { ctxVar: string; - childTypes: string[]; used: boolean; } | undefined, singleRootElTypes: [] as string[], diff --git a/packages/language-core/lib/codegen/template/element.ts b/packages/language-core/lib/codegen/template/element.ts index b38dead393..f5254adbe2 100644 --- a/packages/language-core/lib/codegen/template/element.ts +++ b/packages/language-core/lib/codegen/template/element.ts @@ -41,10 +41,8 @@ export function* generateComponent( const componentCtxVar = ctx.getInternalVariable(); const isComponentTag = node.tag.toLowerCase() === 'component'; - ctx.currentComponent?.childTypes.push(`typeof ${componentVNodeVar}`); ctx.currentComponent = { ctxVar: componentCtxVar, - childTypes: [], used: false, }; @@ -305,8 +303,6 @@ export function* generateElement( : undefined; const failedPropExps: FailedPropExpression[] = []; - ctx.currentComponent?.childTypes.push(`__VLS_NativeElements['${node.tag}']`); - yield `__VLS_asFunctionalElement(__VLS_elements`; yield* generatePropertyAccess( options, diff --git a/packages/language-core/lib/codegen/template/vSlot.ts b/packages/language-core/lib/codegen/template/vSlot.ts index e1e5377294..7651ed0190 100644 --- a/packages/language-core/lib/codegen/template/vSlot.ts +++ b/packages/language-core/lib/codegen/template/vSlot.ts @@ -78,19 +78,6 @@ export function* generateVSlot( ctx.removeLocalVariable(varName); } - if (options.vueCompilerOptions.strictSlotChildren && node.children.length) { - yield `(): __VLS_NormalizeSlotReturns => (`; - yield* wrapWith( - node.loc.start.offset, - node.loc.end.offset, - ctx.codeFeatures.verification, - `{} as [`, - ...ctx.currentComponent.childTypes.map(name => `${name}, `), - `]`, - ); - yield `)${endOfLine}`; - } - if (slotDir) { let isStatic = true; if (slotDir.arg?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { diff --git a/packages/language-core/lib/types.ts b/packages/language-core/lib/types.ts index 1fa66323ed..9e7a3444f9 100644 --- a/packages/language-core/lib/types.ts +++ b/packages/language-core/lib/types.ts @@ -30,7 +30,6 @@ export interface VueCompilerOptions { vitePressExtensions: string[]; petiteVueExtensions: string[]; jsxSlots: boolean; - strictSlotChildren: boolean; strictVModel: boolean; strictCssModules: boolean; checkUnknownProps: boolean; diff --git a/packages/language-core/lib/utils/ts.ts b/packages/language-core/lib/utils/ts.ts index 40de52010b..e70e5fe31a 100644 --- a/packages/language-core/lib/utils/ts.ts +++ b/packages/language-core/lib/utils/ts.ts @@ -293,7 +293,6 @@ export function getDefaultCompilerOptions(target = 99, lib = 'vue', strictTempla vitePressExtensions: [], petiteVueExtensions: [], jsxSlots: false, - strictSlotChildren: strictTemplates, strictVModel: strictTemplates, strictCssModules: false, checkUnknownProps: strictTemplates, diff --git a/test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/child.vue b/test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/child.vue deleted file mode 100644 index 12c7c9ff29..0000000000 --- a/test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/child.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/main.vue b/test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/main.vue deleted file mode 100644 index 7f0143cce5..0000000000 --- a/test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/main.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - diff --git a/test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/parent.vue b/test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/parent.vue deleted file mode 100644 index 9a56b1a73c..0000000000 --- a/test-workspace/tsc/passedFixtures/vue3_strictTemplate/slot-children/parent.vue +++ /dev/null @@ -1,10 +0,0 @@ -