Skip to content

Commit f58f8cc

Browse files
committed
handle for both script tags
1 parent c16eb60 commit f58f8cc

File tree

6 files changed

+31
-22
lines changed

6 files changed

+31
-22
lines changed

packages/language-core/lib/codegen/script/index.ts

+10-11
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import type { Code, Sfc, VueCodeInformation, VueCompilerOptions } from '../../ty
66
import { endOfLine, generateSfcBlockSection, newLine } from '../common';
77
import { generateGlobalTypes } from '../globalTypes';
88
import type { TemplateCodegenContext } from '../template/context';
9-
import { createScriptCodegenContext, ScriptCodegenContext } from './context';
109
import { generateComponentSelf } from './componentSelf';
10+
import { createScriptCodegenContext, ScriptCodegenContext } from './context';
1111
import { generateScriptSetup, generateScriptSetupImports } from './scriptSetup';
1212
import { generateSrc } from './src';
1313
import { generateStyleModulesType } from './styleModulesType';
@@ -79,6 +79,7 @@ export function* generateScript(options: ScriptCodegenOptions): Generator<Code,
7979
}
8080
else {
8181
yield generateSfcBlockSection(options.sfc.script, 0, options.sfc.script.content.length, codeFeatures.all);
82+
yield* generateScriptSectionPartiallyEnding(options.sfc.script.name, options.sfc.script.content.length, '#3632/both.vue');
8283
yield* generateScriptSetup(options, ctx, options.sfc.scriptSetup, options.scriptSetupRanges);
8384
}
8485
}
@@ -132,19 +133,11 @@ export function* generateScript(options: ScriptCodegenOptions): Generator<Code,
132133
}
133134

134135
if (options.sfc.script) {
135-
// #3632
136-
yield [
137-
';',
138-
'script',
139-
options.sfc.script.content.length - 1,
140-
codeFeatures.verification,
141-
];
136+
yield* generateScriptSectionPartiallyEnding(options.sfc.script.name, options.sfc.script.content.length, '#3632/script.vue');
142137
}
143138
if (options.sfc.scriptSetup) {
144-
// #4569
145-
yield ['', 'scriptSetup', options.sfc.scriptSetup.content.length, codeFeatures.verification];
139+
yield* generateScriptSectionPartiallyEnding(options.sfc.scriptSetup.name, options.sfc.scriptSetup.content.length, '#4569/main.vue');
146140
}
147-
yield newLine;
148141

149142
if (!ctx.generatedTemplate) {
150143
yield `function __VLS_template() {${newLine}`;
@@ -171,6 +164,12 @@ export function* generateScript(options: ScriptCodegenOptions): Generator<Code,
171164
return ctx;
172165
}
173166

167+
export function* generateScriptSectionPartiallyEnding(source: string, end: number, mark: string): Generator<Code> {
168+
yield `;`;
169+
yield ['', source, end, codeFeatures.verification];
170+
yield `/* PartiallyEnd: ${mark} */${newLine}`;
171+
}
172+
174173
function* generateDefineProp(
175174
options: ScriptCodegenOptions,
176175
scriptSetup: NonNullable<Sfc['scriptSetup']>

packages/language-core/lib/codegen/script/scriptSetup.ts

+3-9
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import type { ScriptSetupRanges } from '../../parsers/scriptSetupRanges';
22
import type { Code, Sfc, TextRange } from '../../types';
33
import { endOfLine, generateSfcBlockSection, newLine } from '../common';
44
import { generateComponent, generateEmitsOption } from './component';
5-
import type { ScriptCodegenContext } from './context';
6-
import { ScriptCodegenOptions, codeFeatures } from './index';
75
import { generateComponentSelf } from './componentSelf';
6+
import type { ScriptCodegenContext } from './context';
7+
import { ScriptCodegenOptions, codeFeatures, generateScriptSectionPartiallyEnding } from './index';
88
import { generateTemplate } from './template';
99

1010
export function* generateScriptSetupImports(
@@ -278,13 +278,7 @@ function* generateSetupFunction(
278278
yield generateSfcBlockSection(scriptSetup, scriptSetupRanges.importSectionEndOffset, scriptSetup.content.length, codeFeatures.all);
279279
}
280280

281-
// #3632
282-
yield [
283-
';',
284-
'scriptSetup',
285-
scriptSetup.content.length - 1,
286-
codeFeatures.verification,
287-
];
281+
yield* generateScriptSectionPartiallyEnding(scriptSetup.name, scriptSetup.content.length, '#3632/scriptSetup.vue');
288282

289283
if (scriptSetupRanges.props.define?.typeArg && scriptSetupRanges.props.withDefaults?.arg) {
290284
// fix https://github.com/vuejs/language-tools/issues/1187

packages/tsc/tests/typecheck.spec.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ describe(`vue-tsc`, () => {
99
getTscOutput('stable')
1010
).toMatchInlineSnapshot(`
1111
[
12-
"test-workspace/tsc/failureFixtures/#3632/main.vue(2,13): error TS1109: Expression expected.",
12+
"test-workspace/tsc/failureFixtures/#3632/both.vue(3,1): error TS1109: Expression expected.",
13+
"test-workspace/tsc/failureFixtures/#3632/both.vue(7,1): error TS1109: Expression expected.",
14+
"test-workspace/tsc/failureFixtures/#3632/script.vue(3,1): error TS1109: Expression expected.",
15+
"test-workspace/tsc/failureFixtures/#3632/scriptSetup.vue(3,1): error TS1109: Expression expected.",
1316
"test-workspace/tsc/failureFixtures/directives/main.vue(4,6): error TS2339: Property 'notExist' does not exist on type 'CreateComponentPublicInstanceWithMixins<ToResolvedProps<{}, {}>, { exist: typeof exist; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 18 more ..., {}>'.",
1417
"test-workspace/tsc/failureFixtures/directives/main.vue(9,6): error TS2339: Property 'notExist' does not exist on type 'CreateComponentPublicInstanceWithMixins<ToResolvedProps<{}, {}>, { exist: typeof exist; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 18 more ..., {}>'.",
1518
"test-workspace/tsc/failureFixtures/directives/main.vue(12,2): error TS2578: Unused '@ts-expect-error' directive.",
@@ -25,7 +28,10 @@ describe(`vue-tsc`, () => {
2528
getTscOutput('next')
2629
).toMatchInlineSnapshot(`
2730
[
28-
"test-workspace/tsc/failureFixtures/#3632/main.vue(2,13): error TS1109: Expression expected.",
31+
"test-workspace/tsc/failureFixtures/#3632/both.vue(3,1): error TS1109: Expression expected.",
32+
"test-workspace/tsc/failureFixtures/#3632/both.vue(7,1): error TS1109: Expression expected.",
33+
"test-workspace/tsc/failureFixtures/#3632/script.vue(3,1): error TS1109: Expression expected.",
34+
"test-workspace/tsc/failureFixtures/#3632/scriptSetup.vue(3,1): error TS1109: Expression expected.",
2935
"test-workspace/tsc/failureFixtures/directives/main.vue(4,6): error TS2339: Property 'notExist' does not exist on type 'CreateComponentPublicInstanceWithMixins<ToResolvedProps<{}, {}>, { exist: typeof exist; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 18 more ..., {}>'.",
3036
"test-workspace/tsc/failureFixtures/directives/main.vue(9,6): error TS2339: Property 'notExist' does not exist on type 'CreateComponentPublicInstanceWithMixins<ToResolvedProps<{}, {}>, { exist: typeof exist; }, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, ... 18 more ..., {}>'.",
3137
"test-workspace/tsc/failureFixtures/directives/main.vue(12,2): error TS2578: Unused '@ts-expect-error' directive.",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script lang="ts">
2+
const foo =
3+
</script>
4+
5+
<script lang="ts" setup>
6+
const bar =
7+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<script lang="ts">
2+
const foo =
3+
</script>

0 commit comments

Comments
 (0)