Skip to content

Commit 83562e6

Browse files
committed
refactor(language-core): determine skipTemplateCodegen in advance
1 parent 16b1b36 commit 83562e6

File tree

5 files changed

+17
-36
lines changed

5 files changed

+17
-36
lines changed

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

+3-7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { endOfLine, generateSfcBlockSection, newLine } from '../common';
77
import { generateGlobalTypes } from '../globalTypes';
88
import type { TemplateCodegenContext } from '../template/context';
99
import { createScriptCodegenContext, ScriptCodegenContext } from './context';
10-
import { generateInternalComponent } from './internalComponent';
10+
import { generateComponentSelf } from './internalComponent';
1111
import { generateScriptSetup, generateScriptSetupImports } from './scriptSetup';
1212
import { generateSrc } from './src';
1313
import { generateStyleModulesType } from './styleModulesType';
@@ -115,9 +115,7 @@ export function* generateScript(options: ScriptCodegenOptions): Generator<Code,
115115
yield generateSfcBlockSection(options.sfc.script, 0, classBlockEnd, codeFeatures.all);
116116
yield `__VLS_template = () => {`;
117117
const templateCodegenCtx = yield* generateTemplate(options, ctx, true);
118-
if (templateCodegenCtx) {
119-
yield* generateInternalComponent(options, ctx, templateCodegenCtx);
120-
}
118+
yield* generateComponentSelf(options, ctx, templateCodegenCtx);
121119
yield `},${newLine}`;
122120
yield generateSfcBlockSection(options.sfc.script, classBlockEnd, options.sfc.script.content.length, codeFeatures.all);
123121
}
@@ -143,9 +141,7 @@ export function* generateScript(options: ScriptCodegenOptions): Generator<Code,
143141
yield `function __VLS_template() {${newLine}`;
144142
const templateCodegenCtx = yield* generateTemplate(options, ctx, false);
145143
yield `}${endOfLine}`;
146-
if (templateCodegenCtx) {
147-
yield* generateInternalComponent(options, ctx, templateCodegenCtx);
148-
}
144+
yield* generateComponentSelf(options, ctx, templateCodegenCtx);
149145
}
150146

151147
// #4788

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type { ScriptCodegenContext } from './context';
66
import { codeFeatures, type ScriptCodegenOptions } from './index';
77
import { getTemplateUsageVars } from './template';
88

9-
export function* generateInternalComponent(
9+
export function* generateComponentSelf(
1010
options: ScriptCodegenOptions,
1111
ctx: ScriptCodegenContext,
1212
templateCodegenCtx: TemplateCodegenContext

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { endOfLine, generateSfcBlockSection, newLine } from '../common';
44
import { generateComponent, generateEmitsOption } from './component';
55
import type { ScriptCodegenContext } from './context';
66
import { ScriptCodegenOptions, codeFeatures } from './index';
7-
import { generateInternalComponent } from './internalComponent';
7+
import { generateComponentSelf } from './internalComponent';
88
import { generateTemplate } from './template';
99

1010
export function* generateScriptSetupImports(
@@ -290,9 +290,7 @@ function* generateSetupFunction(
290290
yield `function __VLS_template() {${newLine}`;
291291
const templateCodegenCtx = yield* generateTemplate(options, ctx, false);
292292
yield `}${endOfLine}`;
293-
if (templateCodegenCtx) {
294-
yield* generateInternalComponent(options, ctx, templateCodegenCtx);
295-
}
293+
yield* generateComponentSelf(options, ctx, templateCodegenCtx);
296294
yield `type __VLS_TemplateResult = ReturnType<typeof __VLS_template>${endOfLine}`;
297295

298296
if (syntax) {

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

+9-21
Original file line numberDiff line numberDiff line change
@@ -91,29 +91,17 @@ export function* generateTemplate(
9191
options: ScriptCodegenOptions,
9292
ctx: ScriptCodegenContext,
9393
isClassComponent: boolean
94-
): Generator<Code, TemplateCodegenContext | undefined> {
94+
): Generator<Code, TemplateCodegenContext> {
9595
ctx.generatedTemplate = true;
9696

97-
if (!options.vueCompilerOptions.skipTemplateCodegen) {
98-
const templateCodegenCtx = createTemplateCodegenContext({
99-
scriptSetupBindingNames: new Set(),
100-
edited: options.edited,
101-
});
102-
yield* generateTemplateCtx(options, isClassComponent);
103-
yield* generateTemplateComponents(options);
104-
yield* generateTemplateBody(options, templateCodegenCtx);
105-
return templateCodegenCtx;
106-
}
107-
else {
108-
const templateUsageVars = [...getTemplateUsageVars(options, ctx)];
109-
yield `// @ts-ignore${newLine}`;
110-
yield `[${templateUsageVars.join(', ')}]${newLine}`;
111-
yield `return {${newLine}`;
112-
yield ` slots: {},${newLine}`;
113-
yield ` refs: {},${newLine}`;
114-
yield ` attrs: {},${newLine}`;
115-
yield `}${endOfLine}`;
116-
}
97+
const templateCodegenCtx = createTemplateCodegenContext({
98+
scriptSetupBindingNames: new Set(),
99+
edited: options.edited,
100+
});
101+
yield* generateTemplateCtx(options, isClassComponent);
102+
yield* generateTemplateComponents(options);
103+
yield* generateTemplateBody(options, templateCodegenCtx);
104+
return templateCodegenCtx;
117105
}
118106

119107
function* generateTemplateBody(

packages/language-core/lib/plugins/vue-tsx.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ function createTsx(
8484
);
8585
const generatedTemplate = computed(() => {
8686

87-
if (!_sfc.template) {
87+
if (ctx.vueCompilerOptions.skipTemplateCodegen || !_sfc.template) {
8888
return;
8989
}
9090

@@ -158,7 +158,6 @@ function createTsx(
158158
const generatedScript = computed(() => {
159159
const codes: Code[] = [];
160160
const linkedCodeMappings: Mapping[] = [];
161-
const _template = generatedTemplate();
162161
let generatedLength = 0;
163162
const codegen = generateScript({
164163
ts,
@@ -167,7 +166,7 @@ function createTsx(
167166
lang: lang(),
168167
scriptRanges: scriptRanges(),
169168
scriptSetupRanges: scriptSetupRanges(),
170-
templateCodegen: _template,
169+
templateCodegen: generatedTemplate(),
171170
compilerOptions: ctx.compilerOptions,
172171
vueCompilerOptions: ctx.vueCompilerOptions,
173172
edited: ctx.vueCompilerOptions.__test || (fileEditTimes.get(fileName) ?? 0) >= 2,

0 commit comments

Comments
 (0)