Skip to content

Commit c92c996

Browse files
committed
refactor(language-core): make generateStyle consistent with generateTemplate
1 parent 343743f commit c92c996

File tree

4 files changed

+37
-47
lines changed

4 files changed

+37
-47
lines changed

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,9 @@ export interface ScriptCodegenOptions {
3434
export { generate as generateScript };
3535

3636
function generate(options: ScriptCodegenOptions) {
37-
const context = createScriptCodegenContext(options);
38-
const codegen = generateWorker(options, context);
39-
40-
return {
41-
...context,
42-
codes: [...codegen],
43-
};
37+
const ctx = createScriptCodegenContext(options);
38+
const codeGenerator = generateWorker(options, ctx);
39+
return { ...ctx, codes: [...codeGenerator] };
4440
}
4541

4642
function* generateWorker(

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,29 @@ export interface StyleCodegenOptions {
1717

1818
export { generate as generateStyle };
1919

20-
function* generate(options: StyleCodegenOptions) {
20+
function generate(options: StyleCodegenOptions) {
2121
const ctx = createTemplateCodegenContext(options.setupBindingNames);
22+
const codeGenerator = generateWorker(options, ctx);
23+
const codes: Code[] = [];
24+
for (const code of codeGenerator) {
25+
if (typeof code === 'object') {
26+
code[3] = ctx.resolveCodeFeatures(code[3]);
27+
}
28+
codes.push(code);
29+
}
30+
return { ...ctx, codes };
31+
}
32+
33+
function* generateWorker(
34+
options: StyleCodegenOptions,
35+
ctx: TemplateCodegenContext,
36+
) {
2237
const endScope = ctx.startScope();
2338
ctx.declare(...options.directAccessNames);
2439
yield* generateStyleScopedClasses(options);
2540
yield* generateStyleModules(options, ctx);
2641
yield* generateCssVars(options, ctx);
2742
yield* endScope();
28-
return ctx;
2943
}
3044

3145
function* generateCssVars(

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,15 @@ export { generate as generateTemplate };
2727

2828
function generate(options: TemplateCodegenOptions) {
2929
const ctx = createTemplateCodegenContext(options.setupBindingNames);
30-
const codegen = generateWorker(options, ctx);
30+
const codeGenerator = generateWorker(options, ctx);
3131
const codes: Code[] = [];
32-
for (const code of codegen) {
32+
for (const code of codeGenerator) {
3333
if (typeof code === 'object') {
3434
code[3] = ctx.resolveCodeFeatures(code[3]);
3535
}
3636
codes.push(code);
3737
}
38-
return {
39-
...ctx,
40-
codes,
41-
};
38+
return { ...ctx, codes };
4239
}
4340

4441
function* generateWorker(

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

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ import * as path from 'path-browserify';
44
import { generateScript } from '../codegen/script';
55
import { generateStyle } from '../codegen/style';
66
import { generateTemplate } from '../codegen/template';
7-
import type { TemplateCodegenContext } from '../codegen/template/context';
87
import { CompilerOptionsResolver } from '../compilerOptions';
98
import { parseScriptRanges } from '../parsers/scriptRanges';
109
import { parseScriptSetupRanges } from '../parsers/scriptSetupRanges';
1110
import { parseVueCompilerOptions } from '../parsers/vueCompilerOptions';
12-
import type { Code, Sfc, VueLanguagePlugin } from '../types';
11+
import type { Sfc, VueLanguagePlugin } from '../types';
1312
import { computedArray, computedSet } from '../utils/signals';
1413

1514
export const tsCodegen = new WeakMap<Sfc, ReturnType<typeof useCodegen>>();
@@ -211,6 +210,20 @@ function useCodegen(
211210
});
212211
});
213212

213+
const getGeneratedStyle = computed(() => {
214+
if (!sfc.styles.length) {
215+
return;
216+
}
217+
return generateStyle({
218+
ts,
219+
vueCompilerOptions: getResolvedOptions(),
220+
styles: sfc.styles,
221+
directAccessNames: getDirectAccessNames(),
222+
templateRefNames: getTemplateRefNames(),
223+
setupBindingNames: getSetupBindingNames(),
224+
});
225+
});
226+
214227
const getTemplateComponents = computedArray(() => {
215228
return sfc.template?.ast?.components ?? [];
216229
});
@@ -239,36 +252,6 @@ function useCodegen(
239252
});
240253
});
241254

242-
const getGeneratedStyle = computed(() => {
243-
if (!sfc.styles.length) {
244-
return;
245-
}
246-
const generation = generateStyle({
247-
ts,
248-
vueCompilerOptions: getResolvedOptions(),
249-
styles: sfc.styles,
250-
directAccessNames: getDirectAccessNames(),
251-
templateRefNames: getTemplateRefNames(),
252-
setupBindingNames: getSetupBindingNames(),
253-
});
254-
const codes: Code[] = [];
255-
let ctx: TemplateCodegenContext;
256-
257-
while (true) {
258-
const result = generation.next();
259-
if (result.done) {
260-
ctx = result.value;
261-
break;
262-
}
263-
codes.push(result.value);
264-
}
265-
266-
return {
267-
...ctx,
268-
codes,
269-
};
270-
});
271-
272255
return {
273256
getLang,
274257
getScriptRanges,

0 commit comments

Comments
 (0)