Skip to content

Commit e0f3c6b

Browse files
committed
fix(compiler-core): should apply text transform to if branches
fix #725
1 parent 80904e9 commit e0f3c6b

File tree

5 files changed

+21
-12
lines changed

5 files changed

+21
-12
lines changed

packages/compiler-core/__tests__/__snapshots__/compile.spec.ts.snap

+12-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ exports[`compiler: integration tests function mode 1`] = `
55
66
return function render(_ctx, _cache) {
77
with (_ctx) {
8-
const { toDisplayString: _toDisplayString, createVNode: _createVNode, openBlock: _openBlock, createBlock: _createBlock, createCommentVNode: _createCommentVNode, Fragment: _Fragment, renderList: _renderList, createTextVNode: _createTextVNode } = _Vue
8+
const { toDisplayString: _toDisplayString, createVNode: _createVNode, openBlock: _openBlock, createBlock: _createBlock, createCommentVNode: _createCommentVNode, createTextVNode: _createTextVNode, Fragment: _Fragment, renderList: _renderList } = _Vue
99
1010
return (_openBlock(), _createBlock(\\"div\\", {
1111
id: \\"foo\\",
@@ -14,7 +14,9 @@ return function render(_ctx, _cache) {
1414
_createTextVNode(_toDisplayString(world.burn()) + \\" \\", 1 /* TEXT */),
1515
ok
1616
? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"yes\\"))
17-
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\\"no\\"])),
17+
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [
18+
_createTextVNode(\\"no\\")
19+
])),
1820
(_openBlock(true), _createBlock(_Fragment, null, _renderList(list, (value, index) => {
1921
return (_openBlock(), _createBlock(\\"div\\", null, [
2022
_createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */)
@@ -26,7 +28,7 @@ return function render(_ctx, _cache) {
2628
`;
2729

2830
exports[`compiler: integration tests function mode w/ prefixIdentifiers: true 1`] = `
29-
"const { toDisplayString: _toDisplayString, createVNode: _createVNode, openBlock: _openBlock, createBlock: _createBlock, createCommentVNode: _createCommentVNode, Fragment: _Fragment, renderList: _renderList, createTextVNode: _createTextVNode } = Vue
31+
"const { toDisplayString: _toDisplayString, createVNode: _createVNode, openBlock: _openBlock, createBlock: _createBlock, createCommentVNode: _createCommentVNode, createTextVNode: _createTextVNode, Fragment: _Fragment, renderList: _renderList } = Vue
3032
3133
return function render(_ctx, _cache) {
3234
return (_openBlock(), _createBlock(\\"div\\", {
@@ -36,7 +38,9 @@ return function render(_ctx, _cache) {
3638
_createTextVNode(_toDisplayString(_ctx.world.burn()) + \\" \\", 1 /* TEXT */),
3739
(_ctx.ok)
3840
? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"yes\\"))
39-
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\\"no\\"])),
41+
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [
42+
_createTextVNode(\\"no\\")
43+
])),
4044
(_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => {
4145
return (_openBlock(), _createBlock(\\"div\\", null, [
4246
_createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */)
@@ -47,7 +51,7 @@ return function render(_ctx, _cache) {
4751
`;
4852

4953
exports[`compiler: integration tests module mode 1`] = `
50-
"import { toDisplayString as _toDisplayString, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment, renderList as _renderList, createTextVNode as _createTextVNode } from \\"vue\\"
54+
"import { toDisplayString as _toDisplayString, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, Fragment as _Fragment, renderList as _renderList } from \\"vue\\"
5155
5256
export function render(_ctx, _cache) {
5357
return (_openBlock(), _createBlock(\\"div\\", {
@@ -57,7 +61,9 @@ export function render(_ctx, _cache) {
5761
_createTextVNode(_toDisplayString(_ctx.world.burn()) + \\" \\", 1 /* TEXT */),
5862
(_ctx.ok)
5963
? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"yes\\"))
60-
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [\\"no\\"])),
64+
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [
65+
_createTextVNode(\\"no\\")
66+
])),
6167
(_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => {
6268
return (_openBlock(), _createBlock(\\"div\\", null, [
6369
_createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */)

packages/compiler-core/src/ast.ts

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export type TemplateChildNode =
9292
| TextNode
9393
| CommentNode
9494
| IfNode
95+
| IfBranchNode
9596
| ForNode
9697
| TextCallNode
9798

packages/compiler-core/src/transform.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,6 @@ export function traverseChildren(
329329
for (; i < parent.children.length; i++) {
330330
const child = parent.children[i]
331331
if (isString(child)) continue
332-
context.currentNode = child
333332
context.parent = parent
334333
context.childIndex = i
335334
context.onNodeRemoved = nodeRemoved
@@ -341,6 +340,7 @@ export function traverseNode(
341340
node: RootNode | TemplateChildNode,
342341
context: TransformContext
343342
) {
343+
context.currentNode = node
344344
// apply transform plugins
345345
const { nodeTransforms } = context
346346
const exitFns = []
@@ -380,9 +380,10 @@ export function traverseNode(
380380
// for container types, further traverse downwards
381381
case NodeTypes.IF:
382382
for (let i = 0; i < node.branches.length; i++) {
383-
traverseChildren(node.branches[i], context)
383+
traverseNode(node.branches[i], context)
384384
}
385385
break
386+
case NodeTypes.IF_BRANCH:
386387
case NodeTypes.FOR:
387388
case NodeTypes.ELEMENT:
388389
case NodeTypes.ROOT:

packages/compiler-core/src/transforms/transformText.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ export const transformText: NodeTransform = (node, context) => {
1616
if (
1717
node.type === NodeTypes.ROOT ||
1818
node.type === NodeTypes.ELEMENT ||
19-
node.type === NodeTypes.FOR
19+
node.type === NodeTypes.FOR ||
20+
node.type === NodeTypes.IF_BRANCH
2021
) {
2122
// perform the transform on node exit so that all expressions have already
2223
// been processed.

packages/compiler-core/src/transforms/vIf.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {
22
createStructuralDirectiveTransform,
3-
traverseChildren,
4-
TransformContext
3+
TransformContext,
4+
traverseNode
55
} from '../transform'
66
import {
77
NodeTypes,
@@ -125,7 +125,7 @@ export function processIf(
125125
const onExit = processCodegen && processCodegen(sibling, branch, false)
126126
// since the branch was removed, it will not be traversed.
127127
// make sure to traverse here.
128-
traverseChildren(branch, context)
128+
traverseNode(branch, context)
129129
// call on exit
130130
if (onExit) onExit()
131131
// make sure to reset currentNode after traversal to indicate this

0 commit comments

Comments
 (0)