diff --git a/packages/language-core/lib/codegen/script/index.ts b/packages/language-core/lib/codegen/script/index.ts index 0aacb3774e..11da3c59e5 100644 --- a/packages/language-core/lib/codegen/script/index.ts +++ b/packages/language-core/lib/codegen/script/index.ts @@ -6,8 +6,8 @@ import type { Code, Sfc, VueCodeInformation, VueCompilerOptions } from '../../ty import { endOfLine, generateSfcBlockSection, newLine } from '../common'; import { generateGlobalTypes } from '../globalTypes'; import type { TemplateCodegenContext } from '../template/context'; -import { createScriptCodegenContext, ScriptCodegenContext } from './context'; import { generateComponentSelf } from './componentSelf'; +import { createScriptCodegenContext, ScriptCodegenContext } from './context'; import { generateScriptSetup, generateScriptSetupImports } from './scriptSetup'; import { generateSrc } from './src'; import { generateStyleModulesType } from './styleModulesType'; @@ -79,6 +79,7 @@ export function* generateScript(options: ScriptCodegenOptions): Generator { + yield `;`; + yield ['', source, end, codeFeatures.verification]; + yield `/* PartiallyEnd: ${mark} */${newLine}`; +} + function* generateDefineProp( options: ScriptCodegenOptions, scriptSetup: NonNullable diff --git a/packages/language-core/lib/codegen/script/scriptSetup.ts b/packages/language-core/lib/codegen/script/scriptSetup.ts index 3c08f1a96e..19db16b49a 100644 --- a/packages/language-core/lib/codegen/script/scriptSetup.ts +++ b/packages/language-core/lib/codegen/script/scriptSetup.ts @@ -2,9 +2,9 @@ import type { ScriptSetupRanges } from '../../parsers/scriptSetupRanges'; import type { Code, Sfc, TextRange } from '../../types'; import { endOfLine, generateSfcBlockSection, newLine } from '../common'; import { generateComponent, generateEmitsOption } from './component'; -import type { ScriptCodegenContext } from './context'; -import { ScriptCodegenOptions, codeFeatures } from './index'; import { generateComponentSelf } from './componentSelf'; +import type { ScriptCodegenContext } from './context'; +import { ScriptCodegenOptions, codeFeatures, generateScriptSectionPartiallyEnding } from './index'; import { generateTemplate } from './template'; export function* generateScriptSetupImports( @@ -278,6 +278,8 @@ function* generateSetupFunction( yield generateSfcBlockSection(scriptSetup, scriptSetupRanges.importSectionEndOffset, scriptSetup.content.length, codeFeatures.all); } + yield* generateScriptSectionPartiallyEnding(scriptSetup.name, scriptSetup.content.length, '#3632/scriptSetup.vue'); + if (scriptSetupRanges.props.define?.typeArg && scriptSetupRanges.props.withDefaults?.arg) { // fix https://github.com/vuejs/language-tools/issues/1187 yield `const __VLS_withDefaultsArg = (function (t: T) { return t })(`; diff --git a/packages/tsc/tests/typecheck.spec.ts b/packages/tsc/tests/typecheck.spec.ts index 679513ab49..68279f6379 100644 --- a/packages/tsc/tests/typecheck.spec.ts +++ b/packages/tsc/tests/typecheck.spec.ts @@ -9,6 +9,10 @@ describe(`vue-tsc`, () => { getTscOutput('stable') ).toMatchInlineSnapshot(` [ + "test-workspace/tsc/failureFixtures/#3632/both.vue(3,1): error TS1109: Expression expected.", + "test-workspace/tsc/failureFixtures/#3632/both.vue(7,1): error TS1109: Expression expected.", + "test-workspace/tsc/failureFixtures/#3632/script.vue(3,1): error TS1109: Expression expected.", + "test-workspace/tsc/failureFixtures/#3632/scriptSetup.vue(3,1): error TS1109: Expression expected.", "test-workspace/tsc/failureFixtures/directives/main.vue(4,6): error TS2339: Property 'notExist' does not exist on type 'CreateComponentPublicInstanceWithMixins, { exist: typeof exist; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 18 more ..., {}>'.", "test-workspace/tsc/failureFixtures/directives/main.vue(9,6): error TS2339: Property 'notExist' does not exist on type 'CreateComponentPublicInstanceWithMixins, { exist: typeof exist; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 18 more ..., {}>'.", "test-workspace/tsc/failureFixtures/directives/main.vue(12,2): error TS2578: Unused '@ts-expect-error' directive.", @@ -24,6 +28,10 @@ describe(`vue-tsc`, () => { getTscOutput('next') ).toMatchInlineSnapshot(` [ + "test-workspace/tsc/failureFixtures/#3632/both.vue(3,1): error TS1109: Expression expected.", + "test-workspace/tsc/failureFixtures/#3632/both.vue(7,1): error TS1109: Expression expected.", + "test-workspace/tsc/failureFixtures/#3632/script.vue(3,1): error TS1109: Expression expected.", + "test-workspace/tsc/failureFixtures/#3632/scriptSetup.vue(3,1): error TS1109: Expression expected.", "test-workspace/tsc/failureFixtures/directives/main.vue(4,6): error TS2339: Property 'notExist' does not exist on type 'CreateComponentPublicInstanceWithMixins, { exist: typeof exist; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 18 more ..., {}>'.", "test-workspace/tsc/failureFixtures/directives/main.vue(9,6): error TS2339: Property 'notExist' does not exist on type 'CreateComponentPublicInstanceWithMixins, { exist: typeof exist; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 18 more ..., {}>'.", "test-workspace/tsc/failureFixtures/directives/main.vue(12,2): error TS2578: Unused '@ts-expect-error' directive.", diff --git a/test-workspace/tsc/failureFixtures/#3632/both.vue b/test-workspace/tsc/failureFixtures/#3632/both.vue new file mode 100644 index 0000000000..ddcb6aeffc --- /dev/null +++ b/test-workspace/tsc/failureFixtures/#3632/both.vue @@ -0,0 +1,7 @@ + + + diff --git a/test-workspace/tsc/failureFixtures/#3632/script.vue b/test-workspace/tsc/failureFixtures/#3632/script.vue new file mode 100644 index 0000000000..d32d8fe997 --- /dev/null +++ b/test-workspace/tsc/failureFixtures/#3632/script.vue @@ -0,0 +1,3 @@ + diff --git a/test-workspace/tsc/failureFixtures/#3632/scriptSetup.vue b/test-workspace/tsc/failureFixtures/#3632/scriptSetup.vue new file mode 100644 index 0000000000..791a3030cc --- /dev/null +++ b/test-workspace/tsc/failureFixtures/#3632/scriptSetup.vue @@ -0,0 +1,3 @@ + diff --git a/test-workspace/tsc/failureFixtures/#3632/tsconfig.json b/test-workspace/tsc/failureFixtures/#3632/tsconfig.json new file mode 100644 index 0000000000..52ecbeb3c3 --- /dev/null +++ b/test-workspace/tsc/failureFixtures/#3632/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../../tsconfig.base.json", + "include": [ "**/*" ] +} diff --git a/test-workspace/tsc/tsconfig.json b/test-workspace/tsc/tsconfig.json index 175ab4b366..219f289b2f 100644 --- a/test-workspace/tsc/tsconfig.json +++ b/test-workspace/tsc/tsconfig.json @@ -1,6 +1,7 @@ { "include": [ ], "references": [ + { "path": "./failureFixtures/#3632" }, // { "path": "./failureFixtures/#4569" }, // TODO: not working with --build flag { "path": "./failureFixtures/directives" },