From 0b536800cfa39b3a63472d0b7129c032825acd71 Mon Sep 17 00:00:00 2001 From: KazariEX <1364035137@qq.com> Date: Fri, 16 May 2025 15:18:41 +0800 Subject: [PATCH 1/4] chore: remove comments in README.md --- extensions/vscode/README.md | 227 ------------------------------------ 1 file changed, 227 deletions(-) diff --git a/extensions/vscode/README.md b/extensions/vscode/README.md index c26404c94e..e8ac2ca338 100644 --- a/extensions/vscode/README.md +++ b/extensions/vscode/README.md @@ -11,233 +11,6 @@ This project is community-driven. If you would like to support this project, consider joining the [Insiders Program](https://github.com/vuejs/language-tools/wiki/Get-Insiders-Edition) to improve the sustainability of this project and unlock more features. - - -## Sponsors - - -

From 43826621d0f5f9b6b84ec2777ca9dbb2cd8ee0cd Mon Sep 17 00:00:00 2001 From: KazariEX <1364035137@qq.com> Date: Fri, 16 May 2025 15:29:43 +0800 Subject: [PATCH 2/4] refactor: drop Vue2 support --- packages/component-meta/lib/base.ts | 3 +- packages/component-type-helpers/vue2.ts | 17 --- .../language-core/lib/codegen/globalTypes.ts | 8 +- .../language-core/lib/codegen/localTypes.ts | 3 +- .../lib/codegen/script/scriptSetup.ts | 8 +- .../lib/codegen/template/element.ts | 6 +- .../lib/codegen/template/elementProps.ts | 12 +- .../lib/codegen/template/index.ts | 6 +- packages/language-core/lib/languagePlugin.ts | 8 +- packages/language-core/lib/types.ts | 2 +- packages/language-core/lib/utils/shared.ts | 4 - packages/language-core/lib/utils/ts.ts | 4 +- .../lib/utils/vue2TemplateCompiler.ts | 119 ------------------ packages/language-core/package.json | 1 - .../schemas/vue-tsconfig.schema.json | 4 +- .../lib/plugins/vue-missing-props-hints.ts | 3 +- pnpm-lock.yaml | 53 -------- test-workspace/package.json | 1 - .../tsc/passedFixtures/vue2/#4789/main.vue | 9 -- .../tsc/passedFixtures/vue2/env.d.ts | 3 - .../tsc/passedFixtures/vue2/tsconfig.json | 48 ------- .../vue2_strictTemplate/#3881/main.vue | 10 -- .../vue2_strictTemplate/tsconfig.json | 17 --- test-workspace/tsc/tsconfig.json | 2 - 24 files changed, 18 insertions(+), 333 deletions(-) delete mode 100644 packages/component-type-helpers/vue2.ts delete mode 100644 packages/language-core/lib/utils/vue2TemplateCompiler.ts delete mode 100644 test-workspace/tsc/passedFixtures/vue2/#4789/main.vue delete mode 100644 test-workspace/tsc/passedFixtures/vue2/env.d.ts delete mode 100644 test-workspace/tsc/passedFixtures/vue2/tsconfig.json delete mode 100644 test-workspace/tsc/passedFixtures/vue2_strictTemplate/#3881/main.vue delete mode 100644 test-workspace/tsc/passedFixtures/vue2_strictTemplate/tsconfig.json diff --git a/packages/component-meta/lib/base.ts b/packages/component-meta/lib/base.ts index c52f5cb140..a077e102eb 100644 --- a/packages/component-meta/lib/base.ts +++ b/packages/component-meta/lib/base.ts @@ -3,7 +3,6 @@ import * as vue from '@vue/language-core'; import { posix as path } from 'path-browserify'; import type * as ts from 'typescript'; import { code as typeHelpersCode } from 'vue-component-type-helpers'; -import { code as vue2TypeHelpersCode } from 'vue-component-type-helpers/vue2'; import type { ComponentMeta, @@ -236,7 +235,7 @@ interface ComponentMeta { exposed: ComponentExposed; }; -${commandLine.vueOptions.target < 3 ? vue2TypeHelpersCode : typeHelpersCode} +${typeHelpersCode} `.trim(); return code; } diff --git a/packages/component-type-helpers/vue2.ts b/packages/component-type-helpers/vue2.ts deleted file mode 100644 index 4939bdca2f..0000000000 --- a/packages/component-type-helpers/vue2.ts +++ /dev/null @@ -1,17 +0,0 @@ -export { - ComponentType, - ComponentProps, - ComponentEmit, - ComponentExposed, -} from './index'; - -export type ComponentSlots = - T extends new (...args: any) => { $scopedSlots: infer S; } ? NonNullable : - T extends (props: any, ctx: { slots: infer S; attrs: any; emit: any; }, ...args: any) => any ? NonNullable : - {}; - -import { code as _code } from './index'; - -export const code = _code.replace('$slots', '$scopedSlots'); - -export default code; diff --git a/packages/language-core/lib/codegen/globalTypes.ts b/packages/language-core/lib/codegen/globalTypes.ts index 1253cedfb9..884c096ef9 100644 --- a/packages/language-core/lib/codegen/globalTypes.ts +++ b/packages/language-core/lib/codegen/globalTypes.ts @@ -1,5 +1,4 @@ import type { VueCompilerOptions } from '../types'; -import { getSlotsPropertyName } from '../utils/shared'; export function getGlobalTypesFileName({ lib, @@ -79,7 +78,7 @@ export function generateGlobalTypes({ type __VLS_FunctionalComponent = (props: ${fnPropsType}, ctx?: any) => __VLS_Element & { __ctx?: { attrs?: any, - slots?: T extends { ${getSlotsPropertyName(target)}: infer Slots } ? Slots : Record, + slots?: T extends { $slots: infer Slots } ? Slots : Record, emit?: T extends { $emit: infer Emit } ? Emit : {}, props?: ${fnPropsType}, expose?: (exposed: T) => void, @@ -167,10 +166,7 @@ export function generateGlobalTypes({ function __VLS_makeOptional(t: T): { [K in keyof T]?: T[K] }; function __VLS_asFunctionalComponent any ? InstanceType : unknown>(t: T, instance?: K): T extends new (...args: any) => any ? __VLS_FunctionalComponent - : T extends () => any ? (props: {}, ctx?: any) => ReturnType${( - target === 2.7 - ? `: T extends import('${lib}').AsyncComponent ? (props: {}, ctx?: any) => any` - : ``)} + : T extends () => any ? (props: {}, ctx?: any) => ReturnType : T extends (...args: any) => any ? T : __VLS_FunctionalComponent<{}>; function __VLS_functionalComponentArgsRest any>(t: T): 2 extends Parameters['length'] ? [any] : []; diff --git a/packages/language-core/lib/codegen/localTypes.ts b/packages/language-core/lib/codegen/localTypes.ts index 9f0b0009f8..509f707898 100644 --- a/packages/language-core/lib/codegen/localTypes.ts +++ b/packages/language-core/lib/codegen/localTypes.ts @@ -1,5 +1,4 @@ import type { VueCompilerOptions } from '../types'; -import { getSlotsPropertyName } from '../utils/shared'; import { endOfLine } from './utils'; export function getLocalTypesGenerator(vueCompilerOptions: VueCompilerOptions) { @@ -32,7 +31,7 @@ type __VLS_WithDefaults = { () => ` type __VLS_WithSlots = T & { new(): { - ${getSlotsPropertyName(vueCompilerOptions.target)}: S; + $slots: S; ${vueCompilerOptions.jsxSlots ? `$props: ${PropsChildren.name};` : ''} } }; diff --git a/packages/language-core/lib/codegen/script/scriptSetup.ts b/packages/language-core/lib/codegen/script/scriptSetup.ts index d886f8ee5d..072cd70a02 100644 --- a/packages/language-core/lib/codegen/script/scriptSetup.ts +++ b/packages/language-core/lib/codegen/script/scriptSetup.ts @@ -433,11 +433,9 @@ function* generateComponentProps( yield `type __VLS_BuiltInPublicProps = ${options.vueCompilerOptions.target >= 3.4 ? `import('${options.vueCompilerOptions.lib}').PublicProps` - : options.vueCompilerOptions.target >= 3.0 - ? `import('${options.vueCompilerOptions.lib}').VNodeProps` - + ` & import('${options.vueCompilerOptions.lib}').AllowedComponentProps` - + ` & import('${options.vueCompilerOptions.lib}').ComponentCustomProps` - : `globalThis.JSX.IntrinsicAttributes` + : `import('${options.vueCompilerOptions.lib}').VNodeProps` + + ` & import('${options.vueCompilerOptions.lib}').AllowedComponentProps` + + ` & import('${options.vueCompilerOptions.lib}').ComponentCustomProps` }`; yield endOfLine; diff --git a/packages/language-core/lib/codegen/template/element.ts b/packages/language-core/lib/codegen/template/element.ts index 511a6a5f57..fe4d7670ab 100644 --- a/packages/language-core/lib/codegen/template/element.ts +++ b/packages/language-core/lib/codegen/template/element.ts @@ -1,7 +1,7 @@ import * as CompilerDOM from '@vue/compiler-dom'; import { camelize, capitalize } from '@vue/shared'; import type { Code, VueCodeInformation } from '../../types'; -import { getSlotsPropertyName, hyphenateTag } from '../../utils/shared'; +import { hyphenateTag } from '../../utils/shared'; import { codeFeatures } from '../codeFeatures'; import { createVBindShorthandInlayHintInfo } from '../inlayHints'; import { endOfLine, identifierRegex, newLine, normalizeAttributeValue } from '../utils'; @@ -143,9 +143,7 @@ export function* generateComponent( else if (!isComponentTag) { yield `const ${componentOriginalVar} = ({} as __VLS_WithComponent<'${getCanonicalComponentName(node.tag)}', __VLS_LocalComponents, `; if (options.selfComponentName && possibleOriginalNames.includes(options.selfComponentName)) { - yield `typeof __VLS_self & (new () => { ` - + getSlotsPropertyName(options.vueCompilerOptions.target) - + `: __VLS_Slots }), `; + yield `typeof __VLS_self & (new () => { $slots: __VLS_Slots }), `; } else { yield `void, `; diff --git a/packages/language-core/lib/codegen/template/elementProps.ts b/packages/language-core/lib/codegen/template/elementProps.ts index f02ff0f46a..8d9c559e2d 100644 --- a/packages/language-core/lib/codegen/template/elementProps.ts +++ b/packages/language-core/lib/codegen/template/elementProps.ts @@ -187,15 +187,7 @@ export function* generateElementProps( } } else if (prop.type === CompilerDOM.NodeTypes.ATTRIBUTE) { - if ( - options.vueCompilerOptions.dataAttributes.some(pattern => minimatch(prop.name, pattern)) - // Vue 2 Transition doesn't support "persisted" property but `@vue/compiler-dom` always adds it (#3881) - || ( - options.vueCompilerOptions.target < 3 - && prop.name === 'persisted' - && node.tag.toLowerCase() === 'transition' - ) - ) { + if (options.vueCompilerOptions.dataAttributes.some(pattern => minimatch(prop.name, pattern))) { continue; } @@ -436,5 +428,5 @@ function getModelPropName(node: CompilerDOM.ElementNode, vueCompilerOptions: Vue } } - return vueCompilerOptions.target < 3 ? 'value' : 'modelValue'; + return 'modelValue'; } diff --git a/packages/language-core/lib/codegen/template/index.ts b/packages/language-core/lib/codegen/template/index.ts index b0d674cf5c..138d2e6cc1 100644 --- a/packages/language-core/lib/codegen/template/index.ts +++ b/packages/language-core/lib/codegen/template/index.ts @@ -1,7 +1,6 @@ import * as CompilerDOM from '@vue/compiler-dom'; import type * as ts from 'typescript'; import type { Code, Sfc, VueCompilerOptions } from '../../types'; -import { getSlotsPropertyName } from '../../utils/shared'; import { endOfLine, newLine } from '../utils'; import { wrapWith } from '../utils/wrapWith'; import { createTemplateCodegenContext, type TemplateCodegenContext } from './context'; @@ -35,9 +34,8 @@ export function* generateTemplate(options: TemplateCodegenOptions): Generator( ): LanguagePlugin { const pluginContext: Parameters[0] = { modules: { - '@vue/compiler-dom': vueCompilerOptions.target < 3 - ? { - ...CompilerDOM, - compile: CompilerVue2.compile, - } - : CompilerDOM, + '@vue/compiler-dom': CompilerDOM, typescript: ts, }, compilerOptions, diff --git a/packages/language-core/lib/types.ts b/packages/language-core/lib/types.ts index dd9f0772a7..103c080db7 100644 --- a/packages/language-core/lib/types.ts +++ b/packages/language-core/lib/types.ts @@ -11,7 +11,7 @@ export { VueEmbeddedCode }; export type RawVueCompilerOptions = Partial> & { strictTemplates?: boolean; - target?: 'auto' | 2 | 2.7 | 3 | 3.3 | 3.5 | 3.6 | 99 | number; + target?: 'auto' | 3 | 3.3 | 3.5 | 3.6 | 99 | number; plugins?: string[]; }; diff --git a/packages/language-core/lib/utils/shared.ts b/packages/language-core/lib/utils/shared.ts index 1ced2a618c..0450c77126 100644 --- a/packages/language-core/lib/utils/shared.ts +++ b/packages/language-core/lib/utils/shared.ts @@ -13,10 +13,6 @@ export function hyphenateAttr(str: string) { return hyphencase; } -export function getSlotsPropertyName(vueVersion: number) { - return vueVersion < 3 ? '$scopedSlots' : '$slots'; -} - export function getStartEnd( ts: typeof import('typescript'), node: ts.Node, diff --git a/packages/language-core/lib/utils/ts.ts b/packages/language-core/lib/utils/ts.ts index 1b279fd26b..51bcb50420 100644 --- a/packages/language-core/lib/utils/ts.ts +++ b/packages/language-core/lib/utils/ts.ts @@ -289,9 +289,7 @@ export function getDefaultCompilerOptions(target = 99, lib = 'vue', strictTempla ], dataAttributes: [], htmlAttributes: ['aria-*'], - optionsWrapper: target >= 2.7 - ? [`(await import('${lib}')).defineComponent(`, `)`] - : [`(await import('${lib}')).default.extend(`, `)`], + optionsWrapper: [`(await import('${lib}')).defineComponent(`, `)`], macros: { defineProps: ['defineProps'], defineSlots: ['defineSlots'], diff --git a/packages/language-core/lib/utils/vue2TemplateCompiler.ts b/packages/language-core/lib/utils/vue2TemplateCompiler.ts deleted file mode 100644 index de91efce02..0000000000 --- a/packages/language-core/lib/utils/vue2TemplateCompiler.ts +++ /dev/null @@ -1,119 +0,0 @@ -import * as CompilerDOM from '@vue/compiler-dom'; - -const Vue2TemplateCompiler: typeof import('@vue/compiler-vue2') = require('@vue/compiler-vue2/build'); - -export const compile: typeof CompilerDOM.compile = (template, options = {}) => { - - if (typeof template !== 'string') { - throw new Error(`[@vue/language-core] compile() first argument must be string.`); - } - - const onError = options.onError; - const onWarn = options.onWarn; - - options.onError = error => { - if ( - error.code === 33 satisfies CompilerDOM.ErrorCodes.X_V_FOR_TEMPLATE_KEY_PLACEMENT // :key binding allowed in v-for template child in vue 2 - || error.code === 29 satisfies CompilerDOM.ErrorCodes.X_V_IF_SAME_KEY // fix https://github.com/vuejs/language-tools/issues/1638 - ) { - return; - } - if (onError) { - onError(error); - } - else { - throw error; - } - }; - - const vue2Result = Vue2TemplateCompiler.compile(template, { outputSourceRange: true }); - - for (const error of vue2Result.errors) { - onError?.({ - code: 'vue-template-compiler', - name: '', - message: error.msg, - loc: { - source: '', - start: { column: -1, line: -1, offset: error.start }, - end: { column: -1, line: -1, offset: error.end ?? error.start }, - }, - }); - } - for (const error of vue2Result.tips) { - onWarn?.({ - code: 'vue-template-compiler', - name: '', - message: error.msg, - loc: { - source: '', - start: { column: -1, line: -1, offset: error.start }, - end: { column: -1, line: -1, offset: error.end ?? error.start }, - }, - }); - } - - return baseCompile( - template, - Object.assign({}, CompilerDOM.parserOptions, options, { - nodeTransforms: [ - ...CompilerDOM.DOMNodeTransforms, - ...(options.nodeTransforms || []) - ], - directiveTransforms: Object.assign( - {}, - CompilerDOM.DOMDirectiveTransforms, - options.directiveTransforms || {} - ), - }) - ); -}; - -function baseCompile( - template: string, - options: CompilerDOM.CompilerOptions = {} -) { - - const onError = options.onError || (error => { throw error; }); - const isModuleMode = options.mode === 'module'; - - const prefixIdentifiers = options.prefixIdentifiers === true || isModuleMode; - if (!prefixIdentifiers && options.cacheHandlers) { - onError(CompilerDOM.createCompilerError(49 satisfies CompilerDOM.ErrorCodes.X_CACHE_HANDLER_NOT_SUPPORTED)); - } - if (options.scopeId && !isModuleMode) { - onError(CompilerDOM.createCompilerError(50 satisfies CompilerDOM.ErrorCodes.X_SCOPE_ID_NOT_SUPPORTED)); - } - - const ast = CompilerDOM.baseParse(template, options); - const [nodeTransforms, directiveTransforms] = CompilerDOM.getBaseTransformPreset(prefixIdentifiers); - - // v-for > v-if in vue 2 - const transformIf = nodeTransforms[1]; - const transformFor = nodeTransforms[3]; - nodeTransforms[1] = transformFor; - nodeTransforms[3] = transformIf; - - CompilerDOM.transform( - ast, - Object.assign({}, options, { - prefixIdentifiers, - nodeTransforms: [ - ...nodeTransforms, - ...(options.nodeTransforms || []) // user transforms - ], - directiveTransforms: Object.assign( - {}, - directiveTransforms, - options.directiveTransforms || {} // user transforms - ) - }) - ); - - return CompilerDOM.generate( - ast, - Object.assign({}, options, { - prefixIdentifiers - }) - ); -} diff --git a/packages/language-core/package.json b/packages/language-core/package.json index 3a44c87b70..cd12a7cccd 100644 --- a/packages/language-core/package.json +++ b/packages/language-core/package.json @@ -15,7 +15,6 @@ "dependencies": { "@volar/language-core": "2.4.13", "@vue/compiler-dom": "^3.5.0", - "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.5.0", "alien-signals": "^2.0.5", "minimatch": "^10.0.1", diff --git a/packages/language-core/schemas/vue-tsconfig.schema.json b/packages/language-core/schemas/vue-tsconfig.schema.json index 08e6c97288..85f50f8545 100644 --- a/packages/language-core/schemas/vue-tsconfig.schema.json +++ b/packages/language-core/schemas/vue-tsconfig.schema.json @@ -8,8 +8,6 @@ "default": "auto", "enum": [ "auto", - 2, - 2.7, 3, 3.3, 3.5, @@ -143,7 +141,7 @@ "(await import('vue')).defineComponent(", ")" ], - "markdownDescription": "How to wrap option of `export default { ... }`? Default: `[\"(await import('vue')).default.extend(\", \")\"]` for target < 2.7, `[\"(await import('vue')).defineComponent(\", \")\"]` for target >= 2.7." + "markdownDescription": "How to wrap option of `export default { ... }`. Default: `[\"(await import('vue')).defineComponent(\", \")\"]`." }, "macros": { "type": "object", diff --git a/packages/language-service/lib/plugins/vue-missing-props-hints.ts b/packages/language-service/lib/plugins/vue-missing-props-hints.ts index 549596ff27..bb67b7611f 100644 --- a/packages/language-service/lib/plugins/vue-missing-props-hints.ts +++ b/packages/language-service/lib/plugins/vue-missing-props-hints.ts @@ -30,7 +30,6 @@ export function create( if (!context.project.vue) { return; } - const vueCompilerOptions = context.project.vue.compilerOptions; const enabled = await context.env.getConfiguration?.('vue.inlayHints.missingProps') ?? false; if (!enabled) { @@ -126,7 +125,7 @@ export function create( attrText = attrText.slice('v-model:'.length); } else if (attrText === 'v-model') { - attrText = vueCompilerOptions.target >= 3 ? 'modelValue' : 'value'; // TODO: support for experimentalModelPropName? + attrText = 'modelValue'; // TODO: support for experimentalModelPropName? } else if (attrText.startsWith('v-on:')) { attrText = 'on-' + hyphenateAttr(attrText.slice('v-on:'.length)); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f4adc2d86..83bb53ac0e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,9 +110,6 @@ importers: '@vue/compiler-dom': specifier: ^3.5.0 version: 3.5.13 - '@vue/compiler-vue2': - specifier: ^2.7.16 - version: 2.7.16 '@vue/shared': specifier: ^3.5.0 version: 3.5.13 @@ -326,9 +323,6 @@ importers: vue-component-type-helpers: specifier: 3.0.0-alpha.6 version: link:../packages/component-type-helpers - vue2: - specifier: npm:vue@2.7.16 - version: vue@2.7.16 vue3.4: specifier: npm:vue@3.4.38 version: vue@3.4.38(typescript@5.8.3) @@ -1499,9 +1493,6 @@ packages: resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-dom@e1bc0eb02e22bc0c236e1471c11d96a368764b72} version: 3.5.13 - '@vue/compiler-sfc@2.7.16': - resolution: {integrity: sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==} - '@vue/compiler-sfc@3.4.38': resolution: {integrity: sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==} @@ -1522,9 +1513,6 @@ packages: resolution: {tarball: https://pkg.pr.new/vuejs/core/@vue/compiler-ssr@e1bc0eb02e22bc0c236e1471c11d96a368764b72} version: 3.5.13 - '@vue/compiler-vue2@2.7.16': - resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} - '@vue/reactivity@3.4.38': resolution: {integrity: sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==} @@ -1930,9 +1918,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -2369,10 +2354,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} @@ -3083,11 +3064,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - pretty-ms@9.2.0: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} @@ -3761,10 +3737,6 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} - vue@2.7.16: - resolution: {integrity: sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==} - deprecated: Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details. - vue@3.4.38: resolution: {integrity: sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==} peerDependencies: @@ -5214,14 +5186,6 @@ snapshots: '@vue/compiler-core': https://pkg.pr.new/vuejs/core/@vue/compiler-core@e1bc0eb02e22bc0c236e1471c11d96a368764b72 '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@e1bc0eb02e22bc0c236e1471c11d96a368764b72 - '@vue/compiler-sfc@2.7.16': - dependencies: - '@babel/parser': 7.27.0 - postcss: 8.5.3 - source-map: 0.6.1 - optionalDependencies: - prettier: 2.8.8 - '@vue/compiler-sfc@3.4.38': dependencies: '@babel/parser': 7.27.0 @@ -5273,11 +5237,6 @@ snapshots: '@vue/compiler-dom': https://pkg.pr.new/vuejs/core/@vue/compiler-dom@e1bc0eb02e22bc0c236e1471c11d96a368764b72 '@vue/shared': https://pkg.pr.new/vuejs/core/@vue/shared@e1bc0eb02e22bc0c236e1471c11d96a368764b72 - '@vue/compiler-vue2@2.7.16': - dependencies: - de-indent: 1.0.2 - he: 1.2.0 - '@vue/reactivity@3.4.38': dependencies: '@vue/shared': 3.4.38 @@ -5697,8 +5656,6 @@ snapshots: csstype@3.1.3: {} - de-indent@1.0.2: {} - debug@4.4.0: dependencies: ms: 2.1.3 @@ -6200,8 +6157,6 @@ snapshots: dependencies: function-bind: 1.1.2 - he@1.2.0: {} - hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 @@ -6932,9 +6887,6 @@ snapshots: prelude-ls@1.2.1: {} - prettier@2.8.8: - optional: true - pretty-ms@9.2.0: dependencies: parse-ms: 4.0.0 @@ -7631,11 +7583,6 @@ snapshots: vscode-uri@3.1.0: {} - vue@2.7.16: - dependencies: - '@vue/compiler-sfc': 2.7.16 - csstype: 3.1.3 - vue@3.4.38(typescript@5.8.3): dependencies: '@vue/compiler-dom': 3.4.38 diff --git a/test-workspace/package.json b/test-workspace/package.json index 1f40b51a4f..523eec0149 100644 --- a/test-workspace/package.json +++ b/test-workspace/package.json @@ -6,7 +6,6 @@ "typescript-stable": "npm:typescript@latest", "vue": "https://pkg.pr.new/vue@e1bc0eb02e22bc0c236e1471c11d96a368764b72", "vue-component-type-helpers": "3.0.0-alpha.6", - "vue2": "npm:vue@2.7.16", "vue3.4": "npm:vue@3.4.38" } } diff --git a/test-workspace/tsc/passedFixtures/vue2/#4789/main.vue b/test-workspace/tsc/passedFixtures/vue2/#4789/main.vue deleted file mode 100644 index 74dcfc5371..0000000000 --- a/test-workspace/tsc/passedFixtures/vue2/#4789/main.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/test-workspace/tsc/passedFixtures/vue2/env.d.ts b/test-workspace/tsc/passedFixtures/vue2/env.d.ts deleted file mode 100644 index 8e207f7bdd..0000000000 --- a/test-workspace/tsc/passedFixtures/vue2/env.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare module 'vue' { - export * from 'vue2'; -} diff --git a/test-workspace/tsc/passedFixtures/vue2/tsconfig.json b/test-workspace/tsc/passedFixtures/vue2/tsconfig.json deleted file mode 100644 index 8deef3dc20..0000000000 --- a/test-workspace/tsc/passedFixtures/vue2/tsconfig.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "extends": "../../../tsconfig.base.json", - "vueCompilerOptions": { - "target": 2.7, - }, - "include": [ - "**/*", - "../vue3", - ], - "exclude": [ - "../vue3/#2700", - "../vue3/#3123", - "../vue3/#3289", - "../vue3/#3476", - "../vue3/#3518", - "../vue3/#3561", - "../vue3/#3615", - "../vue3/#3656", - "../vue3/#3672", - "../vue3/#3782", - "../vue3/#3820", - "../vue3/#4327", - "../vue3/#4512", - "../vue3/#4540", - "../vue3/#4646", - "../vue3/#4649", - "../vue3/#4777", - "../vue3/#4820", - "../vue3/#4822", - "../vue3/#4826", - "../vue3/#4828", - "../vue3/attrs", - "../vue3/components", - "../vue3/defineEmits", - "../vue3/defineModel", - "../vue3/defineProp_B", - "../vue3/directives/arg-modifiers.vue", - "../vue3/directives/option.vue", - "../vue3/events", - "../vue3/no-script-block", - "../vue3/rootEl", - "../vue3/slot-children", - "../vue3/slots", - "../vue3/templateRef", - "../vue3/templateRef_native", - "../vue3/v-generic" - ] -} diff --git a/test-workspace/tsc/passedFixtures/vue2_strictTemplate/#3881/main.vue b/test-workspace/tsc/passedFixtures/vue2_strictTemplate/#3881/main.vue deleted file mode 100644 index 9837e390c3..0000000000 --- a/test-workspace/tsc/passedFixtures/vue2_strictTemplate/#3881/main.vue +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/test-workspace/tsc/passedFixtures/vue2_strictTemplate/tsconfig.json b/test-workspace/tsc/passedFixtures/vue2_strictTemplate/tsconfig.json deleted file mode 100644 index b5c5385102..0000000000 --- a/test-workspace/tsc/passedFixtures/vue2_strictTemplate/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../vue3_strictTemplate/tsconfig.json", - "vueCompilerOptions": { - "target": 2.7, - }, - "include": [ - "**/*", - "../vue2/env.d.ts", - "../vue3_strictTemplate", - ], - "exclude": [ - "../vue3_strictTemplate/#3140", - "../vue3_strictTemplate/#3718", - "../vue3_strictTemplate/defineModel", - "../vue3_strictTemplate/intrinsicProps", - ] -} diff --git a/test-workspace/tsc/tsconfig.json b/test-workspace/tsc/tsconfig.json index 2e2ecffc35..7fa29cc312 100644 --- a/test-workspace/tsc/tsconfig.json +++ b/test-workspace/tsc/tsconfig.json @@ -20,8 +20,6 @@ { "path": "./passedFixtures/noPropertyAccessFromIndexSignature" }, // { "path": "./passedFixtures/petite-vue" }, { "path": "./passedFixtures/pug" }, - { "path": "./passedFixtures/vue2" }, - { "path": "./passedFixtures/vue2_strictTemplate" }, { "path": "./passedFixtures/vue3" }, { "path": "./passedFixtures/vue3_strictTemplate" }, { "path": "./passedFixtures/vue3.4" }, From c025ad2c780e9c5d9fb7990e4363284d321ad4bb Mon Sep 17 00:00:00 2001 From: KazariEX <1364035137@qq.com> Date: Fri, 16 May 2025 16:04:07 +0800 Subject: [PATCH 3/4] refactor: drop class component support --- packages/component-meta/lib/base.ts | 1 - .../language-core/lib/codegen/script/index.ts | 17 ++--------------- .../language-core/lib/parsers/scriptRanges.ts | 18 ++++-------------- packages/language-core/lib/plugins/vue-tsx.ts | 2 +- .../tsc/passedFixtures/vue3/#4841/main.vue | 7 ------- .../tsc/passedFixtures/vue3/#997/main.vue | 9 --------- .../vue3/class-component/main.vue | 9 --------- 7 files changed, 7 insertions(+), 56 deletions(-) delete mode 100644 test-workspace/tsc/passedFixtures/vue3/#4841/main.vue delete mode 100644 test-workspace/tsc/passedFixtures/vue3/#997/main.vue delete mode 100644 test-workspace/tsc/passedFixtures/vue3/class-component/main.vue diff --git a/packages/component-meta/lib/base.ts b/packages/component-meta/lib/base.ts index a077e102eb..ad2f04c567 100644 --- a/packages/component-meta/lib/base.ts +++ b/packages/component-meta/lib/base.ts @@ -893,7 +893,6 @@ function readTsComponentDefaultProps( return component; } // export default defineComponent({ ... }) - // export default Vue.extend({ ... }) else if (ts.isCallExpression(component)) { if (component.arguments.length) { const arg = component.arguments[0]; diff --git a/packages/language-core/lib/codegen/script/index.ts b/packages/language-core/lib/codegen/script/index.ts index 4dda5763be..b19bac8f2d 100644 --- a/packages/language-core/lib/codegen/script/index.ts +++ b/packages/language-core/lib/codegen/script/index.ts @@ -6,7 +6,7 @@ import type { Code, Sfc, VueCompilerOptions } from '../../types'; import { codeFeatures } from '../codeFeatures'; import { generateGlobalTypes, getGlobalTypesFileName } from '../globalTypes'; import type { TemplateCodegenContext } from '../template/context'; -import { endOfLine, generateSfcBlockSection, newLine } from '../utils'; +import { generateSfcBlockSection, newLine } from '../utils'; import { generateComponentSelf } from './componentSelf'; import { createScriptCodegenContext, type ScriptCodegenContext } from './context'; import { generateScriptSetup, generateScriptSetupImports } from './scriptSetup'; @@ -55,7 +55,7 @@ export function* generateScript(options: ScriptCodegenOptions): Generator {${newLine}`; - const templateCodegenCtx = yield* generateTemplate(options, ctx); - yield* generateComponentSelf(options, ctx, templateCodegenCtx); - yield `}${endOfLine}`; - yield generateSfcBlockSection(options.sfc.script, classBlockEnd, options.sfc.script.content.length, codeFeatures.all); - } - } else { yield generateSfcBlockSection(options.sfc.script, 0, options.sfc.script.content.length, codeFeatures.all); yield* generateScriptSectionPartiallyEnding(options.sfc.script.name, options.sfc.script.content.length, '#3632/script.vue'); diff --git a/packages/language-core/lib/parsers/scriptRanges.ts b/packages/language-core/lib/parsers/scriptRanges.ts index adf5379a3f..d9dae48fd7 100644 --- a/packages/language-core/lib/parsers/scriptRanges.ts +++ b/packages/language-core/lib/parsers/scriptRanges.ts @@ -5,19 +5,18 @@ import { parseBindingRanges } from './scriptSetupRanges'; export interface ScriptRanges extends ReturnType { } -export function parseScriptRanges(ts: typeof import('typescript'), ast: ts.SourceFile, hasScriptSetup: boolean, withNode: boolean) { +export function parseScriptRanges(ts: typeof import('typescript'), ast: ts.SourceFile, hasScriptSetup: boolean) { let exportDefault: (TextRange & { expression: TextRange, args: TextRange, - argsNode: ts.ObjectLiteralExpression | undefined, + argsNode: ts.ObjectLiteralExpression, componentsOption: TextRange | undefined, componentsOptionNode: ts.ObjectLiteralExpression | undefined, directivesOption: TextRange | undefined, nameOption: TextRange | undefined, inheritAttrsOption: string | undefined, }) | undefined; - let classBlockEnd: number | undefined; const bindings = hasScriptSetup ? parseBindingRanges(ts, ast) : []; @@ -66,28 +65,19 @@ export function parseScriptRanges(ts: typeof import('typescript'), ast: ts.Sourc ..._getStartEnd(raw), expression: _getStartEnd(node.expression), args: _getStartEnd(obj), - argsNode: withNode ? obj : undefined, + argsNode: obj, componentsOption: componentsOptionNode ? _getStartEnd(componentsOptionNode) : undefined, - componentsOptionNode: withNode ? componentsOptionNode : undefined, + componentsOptionNode: componentsOptionNode, directivesOption: directivesOptionNode ? _getStartEnd(directivesOptionNode) : undefined, nameOption: nameOptionNode ? _getStartEnd(nameOptionNode) : undefined, inheritAttrsOption, }; } } - - if ( - ts.isClassDeclaration(raw) - && raw.modifiers?.some(mod => mod.kind === ts.SyntaxKind.ExportKeyword) - && raw.modifiers?.some(mod => mod.kind === ts.SyntaxKind.DefaultKeyword) - ) { - classBlockEnd = raw.end - 1; - } }); return { exportDefault, - classBlockEnd, bindings, }; diff --git a/packages/language-core/lib/plugins/vue-tsx.ts b/packages/language-core/lib/plugins/vue-tsx.ts index 7a3fb5d44d..8f80b016f7 100644 --- a/packages/language-core/lib/plugins/vue-tsx.ts +++ b/packages/language-core/lib/plugins/vue-tsx.ts @@ -101,7 +101,7 @@ function createTsx( const getScriptRanges = computed(() => sfc.script && validLangs.has(sfc.script.lang) - ? parseScriptRanges(ts, sfc.script.ast, !!sfc.scriptSetup, false) + ? parseScriptRanges(ts, sfc.script.ast, !!sfc.scriptSetup) : undefined ); diff --git a/test-workspace/tsc/passedFixtures/vue3/#4841/main.vue b/test-workspace/tsc/passedFixtures/vue3/#4841/main.vue deleted file mode 100644 index cb81b183f7..0000000000 --- a/test-workspace/tsc/passedFixtures/vue3/#4841/main.vue +++ /dev/null @@ -1,7 +0,0 @@ - - - \ No newline at end of file diff --git a/test-workspace/tsc/passedFixtures/vue3/#997/main.vue b/test-workspace/tsc/passedFixtures/vue3/#997/main.vue deleted file mode 100644 index 0dd0c9b3a9..0000000000 --- a/test-workspace/tsc/passedFixtures/vue3/#997/main.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/test-workspace/tsc/passedFixtures/vue3/class-component/main.vue b/test-workspace/tsc/passedFixtures/vue3/class-component/main.vue deleted file mode 100644 index e5e550dd34..0000000000 --- a/test-workspace/tsc/passedFixtures/vue3/class-component/main.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - From 6c3babfc6c78490e9a358e5eff37e78d3c87c5da Mon Sep 17 00:00:00 2001 From: KazariEX <1364035137@qq.com> Date: Fri, 16 May 2025 16:06:16 +0800 Subject: [PATCH 4/4] chore: lint --- packages/language-core/lib/parsers/scriptRanges.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/language-core/lib/parsers/scriptRanges.ts b/packages/language-core/lib/parsers/scriptRanges.ts index d9dae48fd7..87285ce978 100644 --- a/packages/language-core/lib/parsers/scriptRanges.ts +++ b/packages/language-core/lib/parsers/scriptRanges.ts @@ -67,7 +67,7 @@ export function parseScriptRanges(ts: typeof import('typescript'), ast: ts.Sourc args: _getStartEnd(obj), argsNode: obj, componentsOption: componentsOptionNode ? _getStartEnd(componentsOptionNode) : undefined, - componentsOptionNode: componentsOptionNode, + componentsOptionNode, directivesOption: directivesOptionNode ? _getStartEnd(directivesOptionNode) : undefined, nameOption: nameOptionNode ? _getStartEnd(nameOptionNode) : undefined, inheritAttrsOption,