Skip to content

Commit af9ca0f

Browse files
authored
refactor(language-core): remove unnecessary linked code mappings of defineProp (#5058)
1 parent 443ddf1 commit af9ca0f

File tree

3 files changed

+23
-47
lines changed

3 files changed

+23
-47
lines changed

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

+10-35
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ export function* generateScriptSetup(
2626
scriptSetup: NonNullable<Sfc['scriptSetup']>,
2727
scriptSetupRanges: ScriptSetupRanges
2828
): Generator<Code> {
29-
const definePropMirrors = new Map<string, number>();
30-
3129
if (scriptSetup.generic) {
3230
if (!options.scriptRanges?.exportDefault) {
3331
if (options.sfc.scriptSetup) {
@@ -56,7 +54,7 @@ export function* generateScriptSetup(
5654
+ ` __VLS_ctx?: ${ctx.localTypes.PrettifyLocal}<Pick<NonNullable<Awaited<typeof __VLS_setup>>, 'attrs' | 'emit' | 'slots'>>,${newLine}` // use __VLS_Prettify for less dts code
5755
+ ` __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>['expose'],${newLine}`
5856
+ ` __VLS_setup = (async () => {${newLine}`;
59-
yield* generateSetupFunction(options, ctx, scriptSetup, scriptSetupRanges, undefined, definePropMirrors);
57+
yield* generateSetupFunction(options, ctx, scriptSetup, scriptSetupRanges, undefined);
6058

6159
const emitTypes: string[] = [];
6260

@@ -79,43 +77,24 @@ export function* generateScriptSetup(
7977
}
8078
else if (!options.sfc.script) {
8179
// no script block, generate script setup code at root
82-
yield* generateSetupFunction(options, ctx, scriptSetup, scriptSetupRanges, 'export default', definePropMirrors);
80+
yield* generateSetupFunction(options, ctx, scriptSetup, scriptSetupRanges, 'export default');
8381
}
8482
else {
8583
if (!options.scriptRanges?.exportDefault) {
8684
yield `export default `;
8785
}
8886
yield `await (async () => {${newLine}`;
89-
yield* generateSetupFunction(options, ctx, scriptSetup, scriptSetupRanges, 'return', definePropMirrors);
87+
yield* generateSetupFunction(options, ctx, scriptSetup, scriptSetupRanges, 'return');
9088
yield `})()`;
9189
}
92-
93-
if (ctx.scriptSetupGeneratedOffset !== undefined) {
94-
for (const defineProp of scriptSetupRanges.defineProp) {
95-
if (!defineProp.localName) {
96-
continue;
97-
}
98-
const [_, localName] = getPropAndLocalName(scriptSetup, defineProp);
99-
const propMirror = definePropMirrors.get(localName!);
100-
if (propMirror !== undefined) {
101-
options.linkedCodeMappings.push({
102-
sourceOffsets: [defineProp.localName.start + ctx.scriptSetupGeneratedOffset],
103-
generatedOffsets: [propMirror],
104-
lengths: [defineProp.localName.end - defineProp.localName.start],
105-
data: undefined,
106-
});
107-
}
108-
}
109-
}
11090
}
11191

11292
function* generateSetupFunction(
11393
options: ScriptCodegenOptions,
11494
ctx: ScriptCodegenContext,
11595
scriptSetup: NonNullable<Sfc['scriptSetup']>,
11696
scriptSetupRanges: ScriptSetupRanges,
117-
syntax: 'return' | 'export default' | undefined,
118-
definePropMirrors: Map<string, number>
97+
syntax: 'return' | 'export default' | undefined
11998
): Generator<Code> {
12099
if (options.vueCompilerOptions.target >= 3.3) {
121100
yield `const { `;
@@ -305,7 +284,7 @@ function* generateSetupFunction(
305284
yield `)${endOfLine}`;
306285
}
307286

308-
yield* generateComponentProps(options, ctx, scriptSetup, scriptSetupRanges, definePropMirrors);
287+
yield* generateComponentProps(options, ctx, scriptSetup, scriptSetupRanges);
309288
yield* generateModelEmit(scriptSetup, scriptSetupRanges);
310289
yield `function __VLS_template() {${newLine}`;
311290
const templateCodegenCtx = yield* generateTemplate(options, ctx);
@@ -378,8 +357,7 @@ function* generateComponentProps(
378357
options: ScriptCodegenOptions,
379358
ctx: ScriptCodegenContext,
380359
scriptSetup: NonNullable<Sfc['scriptSetup']>,
381-
scriptSetupRanges: ScriptSetupRanges,
382-
definePropMirrors: Map<string, number>
360+
scriptSetupRanges: ScriptSetupRanges
383361
): Generator<Code> {
384362
yield `const __VLS_fnComponent = (await import('${options.vueCompilerOptions.lib}')).defineComponent({${newLine}`;
385363

@@ -456,12 +434,10 @@ function* generateComponentProps(
456434
yield propName!;
457435
}
458436
else if (defineProp.name) {
459-
// renaming support
460437
yield generateSfcBlockSection(scriptSetup, defineProp.name.start, defineProp.name.end, codeFeatures.navigation);
461438
}
462439
else if (defineProp.localName) {
463-
definePropMirrors.set(localName!, options.getGeneratedLength());
464-
yield localName!;
440+
yield generateSfcBlockSection(scriptSetup, defineProp.localName.start, defineProp.localName.end, codeFeatures.navigation);
465441
}
466442
else {
467443
continue;
@@ -474,13 +450,12 @@ function* generateComponentProps(
474450
yield `,${newLine}`;
475451

476452
if (defineProp.modifierType) {
477-
let propModifierName = 'modelModifiers';
453+
let modifierName = `modelModifiers`;
478454
if (defineProp.name) {
479-
propModifierName = `${getRangeName(scriptSetup, defineProp.name, true)}Modifiers`;
455+
modifierName = `${getRangeName(scriptSetup, defineProp.name, true)}Modifiers`;
480456
}
481457
const modifierType = getRangeName(scriptSetup, defineProp.modifierType);
482-
definePropMirrors.set(propModifierName, options.getGeneratedLength());
483-
yield `${propModifierName}?: Partial<Record<${modifierType}, true>>,${endOfLine}`;
458+
yield `${modifierName}?: Partial<Record<${modifierType}, true>>,${newLine}`;
484459
}
485460
}
486461
yield `}`;

test-workspace/tsc/passedFixtures/vue3/defineModel/main.vue

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
<script setup lang="ts">
2-
import { exactType } from '../../shared';
32
import { defineComponent } from 'vue';
3+
import { exactType } from '../../shared';
44
import ScriptSetup from './script-setup.vue';
55
66
const ScriptSetupExact = defineComponent({
77
__typeProps: {} as {
88
modelValue?: string,
99
'c': number,
1010
'd'?: number,
11-
'e'?: string,
12-
'f': string,
11+
'e': string,
12+
'f'?: string,
1313
'g'?: string,
14+
gModifiers?: Partial<Record<'foo', true>>,
1415
},
1516
__typeEmits: {} as {
1617
'update:modelValue': [modelValue:string];
@@ -31,7 +32,7 @@ exactType(ScriptSetup, ScriptSetupExact);
3132
<template>
3233
<ScriptSetup
3334
:c="0"
34-
f=""
35+
e=""
3536
@update:model-value="(x) => exactType(x, {} as string)"
3637
@update:c="(x) => exactType(x, {} as number)"
3738
@update:d="(x) => exactType(x, {} as number)"
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
<script setup lang="ts">
2-
// @ts-nocheck wait for 3.3 added defineModel
32
import { exactType } from '../../shared';
43
54
const a = defineModel<string>(); // modelValue
65
// const b = defineModel<string>({ required: true });
76
const c = defineModel<number>('c', { required: true });
87
const d = defineModel<number>('d', { required: false });
9-
const e = defineModel<string>('e');
10-
const f = defineModel<string>('f', { required: true });
11-
const g = defineModel<string>('g', { required: false });
8+
const e = defineModel<string>('e', { required: true });
9+
const f = defineModel<string>('f', { required: false });
10+
const g = defineModel<string, 'foo'>('g');
1211
1312
exactType(a.value, {} as string | undefined);
1413
// exactType(b.value, {} as string);
1514
exactType(c.value, {} as number);
1615
exactType(d.value, {} as number | undefined);
17-
exactType(e.value, {} as string | undefined);
18-
exactType(f.value, {} as string);
16+
exactType(e.value, {} as string);
17+
exactType(f.value, {} as string | undefined);
1918
exactType(g.value, {} as string | undefined);
19+
exactType(g[1], {} as Record<'foo', true | undefined>);
2020
</script>
2121

2222
<template>
2323
{{ exactType($props.modelValue, {} as string | undefined) }}
2424
<!-- {{ exactType($props.b, {} as string) }} -->
2525
{{ exactType($props.c, {} as number) }}
2626
{{ exactType($props.d, {} as number | undefined) }}
27-
{{ exactType($props.e, {} as string | undefined) }}
28-
{{ exactType($props.f, {} as string) }}
27+
{{ exactType($props.e, {} as string) }}
28+
{{ exactType($props.f, {} as string | undefined) }}
2929
{{ exactType($props.g, {} as string | undefined) }}
3030
</template>

0 commit comments

Comments
 (0)