Skip to content

Commit b2ddc24

Browse files
committed
chore(compiler): refactor
1 parent fd298db commit b2ddc24

25 files changed

+125
-138
lines changed

packages/compiler/src/generate.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@ export type CodegenOptions = {
2626
* @default 'index.jsx'
2727
*/
2828
filename?: string
29-
/**
30-
* Indicates that transforms and codegen should try to output valid TS code
31-
*/
32-
isTS?: boolean
3329
/**
3430
* A list of parser plugins to enable for `@babel/parser`, which is used to
3531
* parse expressions in bindings and interpolations.
@@ -91,7 +87,6 @@ export class CodegenContext {
9187
const defaultOptions: Required<CodegenOptions> = {
9288
sourceMap: false,
9389
filename: `index.jsx`,
94-
isTS: false,
9590
expressionPlugins: ['jsx'],
9691
templates: [],
9792
}

packages/compiler/src/generators/component.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { camelize, extend, isArray } from '@vue/shared'
1+
import { camelize, isArray } from '@vue/shared'
22
import { walkIdentifiers } from 'ast-kit'
33
import {
44
IRDynamicPropsKind,
@@ -78,10 +78,7 @@ export function genCreateComponent(
7878
} else if (operation.asset) {
7979
return toValidAssetId(operation.tag, 'component')
8080
} else {
81-
return genExpression(
82-
extend(createSimpleExpression(operation.tag, false), { ast: null }),
83-
context,
84-
)
81+
return genExpression(createSimpleExpression(operation.tag), context)
8582
}
8683
}
8784
}

packages/compiler/src/generators/directive.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { extend } from '@vue/shared'
21
import { IRNodeTypes, type DirectiveIRNode, type OperationNode } from '../ir'
32
import {
43
createSimpleExpression,
@@ -65,10 +64,7 @@ function genCustomDirectives(
6564
}: DirectiveIRNode): CodeFragment[] {
6665
const directiveVar = asset
6766
? toValidAssetId(name, 'directive')
68-
: genExpression(
69-
extend(createSimpleExpression(name, false), { ast: null }),
70-
context,
71-
)
67+
: genExpression(createSimpleExpression(name), context)
7268
const value = dir.exp && ['() => ', ...genExpression(dir.exp, context)]
7369
const argument = dir.arg && genExpression(dir.arg, context)
7470
const modifiers = !!dir.modifiers.length && [

packages/compiler/src/generators/event.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -131,18 +131,11 @@ export function genEventHandler(
131131
handlerExp = genExpression(value, context)
132132
} else {
133133
// inline statement
134-
// @click="foo($event)" ---> $event => foo($event)
135-
const referencesEvent = value.content.includes('$event')
136134
const hasMultipleStatements = value.content.includes(`;`)
137-
const expr = referencesEvent
138-
? context.withId(() => genExpression(value, context), {
139-
$event: null,
140-
})
141-
: genExpression(value, context)
142135
handlerExp = [
143-
referencesEvent ? '$event => ' : '() => ',
136+
'() => ',
144137
hasMultipleStatements ? '{' : '(',
145-
...expr,
138+
...genExpression(value, context),
146139
hasMultipleStatements ? '}' : ')',
147140
]
148141
}

packages/compiler/src/generators/expression.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,11 @@ export function genExpression(
2828
return [[JSON.stringify(content), NewlineType.None, loc]]
2929
}
3030

31-
if (
32-
!node.content.trim() ||
33-
// there was a parsing error
34-
ast === false ||
35-
isConstantExpression(node)
36-
) {
31+
if (!node.content.trim() || isConstantExpression(node)) {
3732
return [[content, NewlineType.None, loc], assignment && ` = ${assignment}`]
3833
}
3934

40-
// the expression is a simple identifier
41-
if (ast === null) {
35+
if (!ast) {
4236
return genIdentifier(content, context, loc, assignment)
4337
}
4438

packages/compiler/src/generators/for.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ export function genFor(
214214
>()
215215
if (value) {
216216
rawValue = value && value.content
217-
if (value.ast) {
217+
if (value.ast && value.ast.type !== 'Identifier') {
218218
walkIdentifiers(
219219
value.ast,
220220
(id, _, parentStack, ___, isLocal) => {

packages/compiler/src/generators/vModel.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,5 @@ export function genModelHandler(
4848
exp: SimpleExpressionNode,
4949
context: CodegenContext,
5050
): CodeFragment[] {
51-
return [
52-
`${context.options.isTS ? `(_value: any)` : `_value`} => (`,
53-
...genExpression(exp, context, '_value'),
54-
')',
55-
]
51+
return ['_value => (', ...genExpression(exp, context, '_value'), ')']
5652
}

packages/compiler/src/transform.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ export type TransformOptions = CodegenOptions & {
6161
* @default false
6262
*/
6363
withFallback?: boolean
64-
onError?: (error: CompilerError) => void
64+
/**
65+
* Indicates that transforms and codegen should try to output valid TS code
66+
*/
67+
isTS?: boolean
6568
/**
6669
* An array of node transforms to be applied to every AST node.
6770
*/
@@ -71,20 +74,11 @@ export type TransformOptions = CodegenOptions & {
7174
* node found on element nodes.
7275
*/
7376
directiveTransforms?: Record<string, DirectiveTransform | undefined>
74-
/**
75-
* Indicates that transforms and codegen should try to output valid TS code
76-
*/
77-
isTS?: boolean
7877
/**
7978
* Separate option for end users to extend the native elements list
8079
*/
8180
isCustomElement?: (tag: string) => boolean | void
82-
/**
83-
* Filename for source map generation.
84-
* Also used for self-recursive reference in templates
85-
* @default 'index.jsx'
86-
*/
87-
filename?: string
81+
onError?: (error: CompilerError) => void
8882
}
8983
const defaultOptions: Required<TransformOptions> = {
9084
source: '',

packages/compiler/src/transforms/transformElement.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import {
1010
} from '../ir'
1111
import {
1212
createSimpleExpression,
13+
getTextLikeValue,
1314
isJSXComponent,
1415
isTemplate,
1516
isValidHTMLNesting,
1617
resolveExpression,
17-
resolveSimpleExpression,
1818
type SimpleExpressionNode,
1919
} from '../utils'
2020
import type {
@@ -227,7 +227,7 @@ export function buildProps(
227227
continue
228228
}
229229

230-
const result = transformProp(prop, node, context)
230+
const result = transformProp(prop, node, isComponent, context)
231231
if (result) {
232232
dynamicExpr.push(result.key, result.value)
233233
if (isComponent && !result.key.isStatic) {
@@ -259,6 +259,7 @@ export function buildProps(
259259
function transformProp(
260260
prop: JSXAttribute | JSXSpreadAttribute,
261261
node: JSXElement,
262+
isComponent: boolean,
262263
context: TransformContext<JSXElement>,
263264
): DirectiveTransformResult | void {
264265
if (prop.type === 'JSXSpreadAttribute') return
@@ -270,18 +271,18 @@ function transformProp(
270271
: ''
271272
name = name.split('_')[0]
272273

274+
let value
273275
if (
274276
!isDirectiveRegex.test(name) &&
275277
!isEventRegex.test(name) &&
276-
(!prop.value || prop.value.type === 'StringLiteral')
278+
(!prop.value || (value = getTextLikeValue(prop.value, isComponent)) != null)
277279
) {
278280
if (isReservedProp(name)) return
279281
return {
280-
key: resolveSimpleExpression(name, true, prop.name.loc!),
281-
value:
282-
prop.value && prop.value.type === 'StringLiteral'
283-
? resolveSimpleExpression(prop.value.value, true, prop.value.loc!)
284-
: createSimpleExpression('true', false),
282+
key: createSimpleExpression(name, true, prop.name),
283+
value: prop.value
284+
? createSimpleExpression(value!, true, prop.value)
285+
: createSimpleExpression('true'),
285286
}
286287
}
287288

packages/compiler/src/transforms/vBind.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { camelize, extend } from '@vue/shared'
2-
import { resolveExpression, resolveSimpleExpression } from '../utils'
2+
import { createSimpleExpression, resolveExpression } from '../utils'
33
import type { DirectiveTransform } from '../transform'
44
import { isReservedProp } from './transformElement'
55

@@ -10,7 +10,7 @@ export const transformVBind: DirectiveTransform = (dir, node, context) => {
1010
const [nameString, ...modifiers] = name.name.split('_')
1111

1212
const exp = resolveExpression(value, context)
13-
let arg = resolveSimpleExpression(nameString, true, dir.name.loc)
13+
let arg = createSimpleExpression(nameString, true, dir.name)
1414

1515
if (arg.isStatic && isReservedProp(arg.content)) return
1616

0 commit comments

Comments
 (0)