diff --git a/packages/vue-language-core/src/generators/script.ts b/packages/vue-language-core/src/generators/script.ts index efe582937..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( @@ -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 d83fcad3d..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)}", `, 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 87% rename from packages/vue-language-core/src/utils/directorySharedTypes.ts rename to packages/vue-language-core/src/utils/globalTypes.ts index f6bcd9156..e0f1d079e 100644 --- a/packages/vue-language-core/src/utils/directorySharedTypes.ts +++ b/packages/vue-language-core/src/utils/globalTypes.ts @@ -57,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] } : + N2 extends keyof LocalComponents ? N2 extends N0 ? Pick : { [K in N0]: LocalComponents[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 }'} type __VLS_FillingEventArg_ParametersLength any> = __VLS_IsAny> extends true ? -1 : Parameters['length']; 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..497953d76 --- /dev/null +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/#1886/main.vue @@ -0,0 +1,23 @@ + + + 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..cd332dae3 --- /dev/null +++ b/packages/vue-test-workspace/vue-tsc/non-strict-template/#2157/main.vue @@ -0,0 +1,11 @@ + + +