Skip to content

Commit 255479b

Browse files
committed
feat(macros/volar): allow define styles after the ReturnStatement
1 parent 5be5080 commit 255479b

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

packages/macros/src/volar/define-style.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { allCodeFeatures, type Code } from 'ts-macro'
2-
import type { DefineStyle, TransformOptions } from '.'
2+
import type { DefineStyle, RootKey, TransformOptions } from '.'
33

44
export function transformDefineStyle(
55
{ expression, isCssModules }: DefineStyle,
66
index: number,
7+
root: RootKey,
78
options: TransformOptions,
89
): void {
910
const { ts, codes, ast } = options
@@ -34,6 +35,17 @@ export function transformDefineStyle(
3435
),
3536
'\n}>',
3637
)
38+
} else if (root?.body) {
39+
const returnNode = root.body.forEachChild((node) =>
40+
ts.isReturnStatement(node) ? node : undefined,
41+
)
42+
if (returnNode) {
43+
codes.replaceRange(expression.getStart(ast), expression.getEnd())
44+
codes.replaceRange(returnNode!.pos, returnNode!.pos, ';', [
45+
expression.getText(ast),
46+
expression.getStart(ast),
47+
])
48+
}
3749
}
3850

3951
addEmbeddedCode(expression, index, options)

packages/macros/src/volar/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ export type JsxMacros = {
2424
defineStyle?: DefineStyle[]
2525
defineComponent?: true
2626
}
27-
export type RootMap = Map<
27+
28+
export type RootKey =
2829
| import('typescript').ArrowFunction
2930
| import('typescript').FunctionExpression
3031
| import('typescript').FunctionDeclaration
31-
| undefined,
32-
JsxMacros
33-
>
32+
| undefined
33+
export type RootMap = Map<RootKey, JsxMacros>
3434

3535
function getMacro(
3636
node: import('typescript').Node | undefined,

packages/macros/src/volar/transform.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export function transformJsxMacros(
1111
let defineStyleIndex = 0
1212
for (const [root, macros] of rootMap) {
1313
macros.defineStyle?.forEach((defaultStyle) =>
14-
transformDefineStyle(defaultStyle, defineStyleIndex++, options),
14+
transformDefineStyle(defaultStyle, defineStyleIndex++, root, options),
1515
)
1616

1717
if (!root?.body) continue

0 commit comments

Comments
 (0)