From a7300f376171013c0fd86d25bcd50a9d73cb519e Mon Sep 17 00:00:00 2001 From: so1ve Date: Tue, 27 Jun 2023 16:24:09 +0800 Subject: [PATCH 01/10] test --- .../non-strict-template/#1886/main.vue | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue new file mode 100644 index 000000000..409657a66 --- /dev/null +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue @@ -0,0 +1,22 @@ + + \ No newline at end of file From 48bbdc1b36c9733e9cc341021a21c58af9b143df Mon Sep 17 00:00:00 2001 From: so1ve Date: Tue, 27 Jun 2023 16:32:19 +0800 Subject: [PATCH 02/10] fix --- packages/vue-language-core/src/generators/template.ts | 2 +- .../vue-language-core/src/utils/directorySharedTypes.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/vue-language-core/src/generators/template.ts b/packages/vue-language-core/src/generators/template.ts index d83fcad3d..c26b23dc5 100644 --- a/packages/vue-language-core/src/generators/template.ts +++ b/packages/vue-language-core/src/generators/template.ts @@ -670,7 +670,7 @@ export function generate( ); } else if (componentVars[tag]) { - codes.push(`const ${var_originalComponent} = __VLS_templateComponents['${componentVars[tag]}'];\n`); + codes.push(`const ${var_originalComponent} = {} as __VLS_AccessComponent;\n`); } else { codes.push(`const ${var_originalComponent} = {} as any;\n`); diff --git a/packages/vue-language-core/src/utils/directorySharedTypes.ts b/packages/vue-language-core/src/utils/directorySharedTypes.ts index f6bcd9156..d2229d3b3 100644 --- a/packages/vue-language-core/src/utils/directorySharedTypes.ts +++ b/packages/vue-language-core/src/utils/directorySharedTypes.ts @@ -29,6 +29,12 @@ type __VLS_GlobalComponents = | 'Teleport' >; +type __VLS_AccessComponent = + K extends keyof L ? L[K] : + K extends keyof G ? G[K] : + K extends keyof T ? T[K] : + any; + // v-for declare function __VLS_getVForSourceType(source: number): [number, number, number][]; declare function __VLS_getVForSourceType(source: string): [string, number, number][]; From 33fc9f70079af6a8fecc6cfd501c3e7087f04cf4 Mon Sep 17 00:00:00 2001 From: so1ve Date: Tue, 27 Jun 2023 16:32:31 +0800 Subject: [PATCH 03/10] test: test #2157 --- .../vue-tsc/non-strict-template/#2157/main.vue | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue new file mode 100644 index 000000000..eb61874dd --- /dev/null +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue @@ -0,0 +1,11 @@ + + + From b34add132f44f4850bd96cae2aa919e0bbb440f0 Mon Sep 17 00:00:00 2001 From: so1ve Date: Tue, 27 Jun 2023 16:33:29 +0800 Subject: [PATCH 04/10] chore: rename --- packages/vue-language-core/src/generators/template.ts | 2 +- packages/vue-language-core/src/utils/directorySharedTypes.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vue-language-core/src/generators/template.ts b/packages/vue-language-core/src/generators/template.ts index c26b23dc5..6f0e19eb9 100644 --- a/packages/vue-language-core/src/generators/template.ts +++ b/packages/vue-language-core/src/generators/template.ts @@ -670,7 +670,7 @@ export function generate( ); } else if (componentVars[tag]) { - codes.push(`const ${var_originalComponent} = {} as __VLS_AccessComponent;\n`); + codes.push(`const ${var_originalComponent} = {} as __VLS_GetComponent;\n`); } else { codes.push(`const ${var_originalComponent} = {} as any;\n`); diff --git a/packages/vue-language-core/src/utils/directorySharedTypes.ts b/packages/vue-language-core/src/utils/directorySharedTypes.ts index d2229d3b3..c224a421d 100644 --- a/packages/vue-language-core/src/utils/directorySharedTypes.ts +++ b/packages/vue-language-core/src/utils/directorySharedTypes.ts @@ -29,7 +29,7 @@ type __VLS_GlobalComponents = | 'Teleport' >; -type __VLS_AccessComponent = +type __VLS_GetComponent = K extends keyof L ? L[K] : K extends keyof G ? G[K] : K extends keyof T ? T[K] : From 6e7137ff480732cf0cd5eb82f65291f49d0310ae Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 2 Jul 2023 23:31:56 +0800 Subject: [PATCH 05/10] chore: apply suggestions --- .../vue-tsc/non-strict-template/#2157/main.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue index eb61874dd..05cfbaa60 100644 --- a/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue @@ -1,11 +1,11 @@ From d9e9a9fb9f18165a631e70e46a5d49431005b3b4 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Wed, 5 Jul 2023 08:56:17 +0800 Subject: [PATCH 06/10] resolve components type in advance --- .../vue-language-core/src/generators/script.ts | 6 +++--- .../src/generators/template.ts | 4 ++-- .../src/utils/directorySharedTypes.ts | 17 +++++++---------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/packages/vue-language-core/src/generators/script.ts b/packages/vue-language-core/src/generators/script.ts index efe582937..4ded64483 100644 --- a/packages/vue-language-core/src/generators/script.ts +++ b/packages/vue-language-core/src/generators/script.ts @@ -827,10 +827,10 @@ declare function defineProp(value?: T | (() => T), required?: boolean, rest?: /* Components */ codes.push('/* Components */\n'); - codes.push(`let __VLS_localComponents!: NonNullable & typeof __VLS_componentsOption & typeof __VLS_ctx;\n`); - codes.push(`let __VLS_otherComponents!: typeof __VLS_localComponents & __VLS_GlobalComponents;\n`); + codes.push(`let __VLS_otherComponents!: NonNullable & typeof __VLS_componentsOption & typeof __VLS_ctx;\n`); codes.push(`let __VLS_own!: __VLS_SelfComponent { ${getSlotsPropertyName(vueCompilerOptions.target)}: typeof __VLS_slots })>;\n`); - codes.push(`let __VLS_components!: typeof __VLS_otherComponents & Omit;\n`); + codes.push(`let __VLS_localComponents!: typeof __VLS_otherComponents & Omit;\n`); + codes.push(`let __VLS_components!: typeof __VLS_localComponents & __VLS_GlobalComponents;\n`); // for html completion, TS references... /* Style Scoped */ codes.push('/* Style Scoped */\n'); diff --git a/packages/vue-language-core/src/generators/template.ts b/packages/vue-language-core/src/generators/template.ts index 6f0e19eb9..681116c13 100644 --- a/packages/vue-language-core/src/generators/template.ts +++ b/packages/vue-language-core/src/generators/template.ts @@ -194,7 +194,7 @@ export function generate( const validName = validTsVar.test(tagName) ? tagName : capitalize(camelize(tagName.replace(/:/g, '-'))); codes.push( - `& __VLS_WithComponent<'${validName}', typeof __VLS_components, `, + `& __VLS_WithComponent<'${validName}', typeof __VLS_localComponents, `, // order is important: https://github.com/vuejs/language-tools/issues/2010 `"${capitalize(camelize(tagName))}", `, `"${camelize(tagName)}", `, @@ -670,7 +670,7 @@ export function generate( ); } else if (componentVars[tag]) { - codes.push(`const ${var_originalComponent} = {} as __VLS_GetComponent;\n`); + codes.push(`const ${var_originalComponent} = __VLS_templateComponents['${componentVars[tag]}'];\n`); } else { codes.push(`const ${var_originalComponent} = {} as any;\n`); diff --git a/packages/vue-language-core/src/utils/directorySharedTypes.ts b/packages/vue-language-core/src/utils/directorySharedTypes.ts index c224a421d..b7588edbe 100644 --- a/packages/vue-language-core/src/utils/directorySharedTypes.ts +++ b/packages/vue-language-core/src/utils/directorySharedTypes.ts @@ -29,12 +29,6 @@ type __VLS_GlobalComponents = | 'Teleport' >; -type __VLS_GetComponent = - K extends keyof L ? L[K] : - K extends keyof G ? G[K] : - K extends keyof T ? T[K] : - any; - // v-for declare function __VLS_getVForSourceType(source: number): [number, number, number][]; declare function __VLS_getVForSourceType(source: string): [string, number, number][]; @@ -63,10 +57,13 @@ declare function __VLS_withScope(ctx: T, scope: K): ctx is T & K; declare function __VLS_makeOptional(t: T): { [K in keyof T]?: T[K] }; type __VLS_SelfComponent = string extends N ? {} : N extends string ? { [P in N]: C } : {}; -type __VLS_WithComponent = - N1 extends keyof Components ? N1 extends N0 ? Pick : { [K in N0]: Components[N1] } : - N2 extends keyof Components ? N2 extends N0 ? Pick : { [K in N0]: Components[N2] } : - N3 extends keyof Components ? N3 extends N0 ? Pick : { [K in N0]: Components[N3] } : +type __VLS_WithComponent = + N1 extends keyof LocalComponents ? N1 extends N0 ? Pick : { [K in N0]: LocalComponents[N1] } : + N1 extends keyof __VLS_GlobalComponents ? N1 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N1] } : + N2 extends keyof LocalComponents ? N2 extends N0 ? Pick : { [K in N0]: LocalComponents[N2] } : + N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N2] } : + N3 extends keyof LocalComponents ? N3 extends N0 ? Pick : { [K in N0]: LocalComponents[N3] } : + N3 extends keyof __VLS_GlobalComponents ? N3 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N3] } : ${vueCompilerOptions.strictTemplates ? '{}' : '{ [K in N0]: unknown }'} type __VLS_FillingEventArg_ParametersLength any> = __VLS_IsAny> extends true ? -1 : Parameters['length']; From f3fb210314f16df83785204232a05ec5a711d009 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Wed, 5 Jul 2023 08:57:46 +0800 Subject: [PATCH 07/10] rename directorySharedTypes.ts to globalTypes.ts --- packages/vue-language-core/src/generators/script.ts | 2 +- packages/vue-language-core/src/index.ts | 2 +- packages/vue-language-core/src/languageModule.ts | 2 +- .../src/utils/{directorySharedTypes.ts => globalTypes.ts} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename packages/vue-language-core/src/utils/{directorySharedTypes.ts => globalTypes.ts} (100%) diff --git a/packages/vue-language-core/src/generators/script.ts b/packages/vue-language-core/src/generators/script.ts index 4ded64483..ee8d0339a 100644 --- a/packages/vue-language-core/src/generators/script.ts +++ b/packages/vue-language-core/src/generators/script.ts @@ -12,7 +12,7 @@ import { Sfc } from '../types'; import type { VueCompilerOptions } from '../types'; import { getSlotsPropertyName } from '../utils/shared'; import { walkInterpolationFragment } from '../utils/transform'; -import * as sharedTypes from '../utils/directorySharedTypes'; +import * as sharedTypes from '../utils/globalTypes'; import * as muggle from 'muggle-string'; export function generate( diff --git a/packages/vue-language-core/src/index.ts b/packages/vue-language-core/src/index.ts index c21311a42..c9ca00d58 100644 --- a/packages/vue-language-core/src/index.ts +++ b/packages/vue-language-core/src/index.ts @@ -8,7 +8,7 @@ export * from './utils/ts'; export * from './utils/parseSfc'; export * as scriptRanges from './parsers/scriptRanges'; -export * as sharedTypes from './utils/directorySharedTypes'; +export * as sharedTypes from './utils/globalTypes'; export * from '@volar/language-core'; export * from '@volar/source-map'; diff --git a/packages/vue-language-core/src/languageModule.ts b/packages/vue-language-core/src/languageModule.ts index 45d03759f..1d5ac30ef 100644 --- a/packages/vue-language-core/src/languageModule.ts +++ b/packages/vue-language-core/src/languageModule.ts @@ -3,7 +3,7 @@ import { posix as path } from 'path'; import { getDefaultVueLanguagePlugins } from './plugins'; import { VueFile } from './sourceFile'; import { VueCompilerOptions } from './types'; -import * as sharedTypes from './utils/directorySharedTypes'; +import * as sharedTypes from './utils/globalTypes'; import type * as ts from 'typescript/lib/tsserverlibrary'; import { resolveVueCompilerOptions } from './utils/ts'; diff --git a/packages/vue-language-core/src/utils/directorySharedTypes.ts b/packages/vue-language-core/src/utils/globalTypes.ts similarity index 100% rename from packages/vue-language-core/src/utils/directorySharedTypes.ts rename to packages/vue-language-core/src/utils/globalTypes.ts From d4ef70401c511c5874de3f9565edd1c26153a3f5 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Wed, 5 Jul 2023 09:02:08 +0800 Subject: [PATCH 08/10] format --- .../vue-tsc/non-strict-template/#1886/main.vue | 15 ++++++++------- .../vue-tsc/non-strict-template/#2157/main.vue | 8 ++++---- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue index 409657a66..5e3311d3e 100644 --- a/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue @@ -3,20 +3,21 @@ import { exactType } from 'vue-tsc/shared'; declare module 'vue' { export interface GlobalComponents { - FunctionalComponent: any; + ComponentWithinTestIssue1886: any; } } -declare const FunctionalComponent: new () => { - $slots: { +declare const ComponentWithinTestIssue1886: new () => { + $slots: { foo: (props: { bar: string }) => any; } }; + \ No newline at end of file + + diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue index 05cfbaa60..22f04e72b 100644 --- a/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue @@ -1,11 +1,11 @@ From ed2b8f4d7fae396e53705941bbd212df812f1153 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Wed, 5 Jul 2023 09:04:20 +0800 Subject: [PATCH 09/10] test component name --- .../vue-tsc/non-strict-template/#1886/main.vue | 8 ++++---- .../vue-tsc/non-strict-template/#2157/main.vue | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue index 5e3311d3e..497953d76 100644 --- a/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue @@ -3,11 +3,11 @@ import { exactType } from 'vue-tsc/shared'; declare module 'vue' { export interface GlobalComponents { - ComponentWithinTestIssue1886: any; + ComponentForIssue1886: any; } } -declare const ComponentWithinTestIssue1886: new () => { +declare const ComponentForIssue1886: new () => { $slots: { foo: (props: { bar: string }) => any; } @@ -15,9 +15,9 @@ declare const ComponentWithinTestIssue1886: new () => { diff --git a/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue b/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue index 22f04e72b..cd332dae3 100644 --- a/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue @@ -1,11 +1,11 @@ From 50298fdd568d9115b97f2fc8aac858affdcd5ac2 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Wed, 5 Jul 2023 09:07:13 +0800 Subject: [PATCH 10/10] sort resolving order --- packages/vue-language-core/src/utils/globalTypes.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vue-language-core/src/utils/globalTypes.ts b/packages/vue-language-core/src/utils/globalTypes.ts index b7588edbe..e0f1d079e 100644 --- a/packages/vue-language-core/src/utils/globalTypes.ts +++ b/packages/vue-language-core/src/utils/globalTypes.ts @@ -59,10 +59,10 @@ declare function __VLS_makeOptional(t: T): { [K in keyof T]?: T[K] }; type __VLS_SelfComponent = string extends N ? {} : N extends string ? { [P in N]: C } : {}; type __VLS_WithComponent = N1 extends keyof LocalComponents ? N1 extends N0 ? Pick : { [K in N0]: LocalComponents[N1] } : - N1 extends keyof __VLS_GlobalComponents ? N1 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N1] } : N2 extends keyof LocalComponents ? N2 extends N0 ? Pick : { [K in N0]: LocalComponents[N2] } : - N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N2] } : N3 extends keyof LocalComponents ? N3 extends N0 ? Pick : { [K in N0]: LocalComponents[N3] } : + N1 extends keyof __VLS_GlobalComponents ? N1 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N1] } : + N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N2] } : N3 extends keyof __VLS_GlobalComponents ? N3 extends N0 ? Pick<__VLS_GlobalComponents, N0> : { [K in N0]: __VLS_GlobalComponents[N3] } : ${vueCompilerOptions.strictTemplates ? '{}' : '{ [K in N0]: unknown }'}