Skip to content

Commit 1827254

Browse files
authored
refactor(templateRef): simplify template ref handling and remove old ref declarations (#13842)
1 parent b074a81 commit 1827254

11 files changed

Lines changed: 44 additions & 105 deletions

File tree

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -385,14 +385,11 @@ export function render(_ctx, $props, $emit, $attrs, $slots) {
385385
const n1 = t0()
386386
const n3 = t0()
387387
const n4 = t0()
388-
let r1
389-
let r3
390-
let r4
391388
_renderEffect(() => {
392389
const _bar = _ctx.bar
393-
r1 = _setTemplateRef(n1, _bar, r1)
394-
r3 = _setTemplateRef(n3, _bar, r3)
395-
r4 = _setTemplateRef(n4, _bar, r4)
390+
_setTemplateRef(n1, _bar)
391+
_setTemplateRef(n3, _bar)
392+
_setTemplateRef(n4, _bar)
396393
})
397394
return [n1, n3, n4]
398395
}"

packages/compiler-vapor/__tests__/compile.spec.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -334,12 +334,9 @@ describe('compile', () => {
334334
expect(code).matchSnapshot()
335335
expect(code).not.contains('let r0')
336336
expect(code).not.contains('let r2')
337-
expect(code).contains('let r1')
338-
expect(code).contains('let r3')
339-
expect(code).contains('let r4')
340-
expect(code).contains('r1 = _setTemplateRef(n1, _bar, r1)')
341-
expect(code).contains('r3 = _setTemplateRef(n3, _bar, r3)')
342-
expect(code).contains('r4 = _setTemplateRef(n4, _bar, r4)')
337+
expect(code).contains('_setTemplateRef(n1, _bar)')
338+
expect(code).contains('_setTemplateRef(n3, _bar)')
339+
expect(code).contains('_setTemplateRef(n4, _bar)')
343340
})
344341

345342
test('should bump template var (t*) on conflict', () => {

packages/compiler-vapor/__tests__/transforms/__snapshots__/transformTemplateRef.spec.ts.snap

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ const t0 = _template("<div>", true)
77
export function render(_ctx) {
88
const _setTemplateRef = _createTemplateRefSetter()
99
const n0 = t0()
10-
let r0
11-
_renderEffect(() => r0 = _setTemplateRef(n0, _ctx.foo, r0))
10+
_renderEffect(() => _setTemplateRef(n0, _ctx.foo))
1211
return n0
1312
}"
1413
`;
@@ -20,14 +19,13 @@ const t0 = _template("<div>", true)
2019
export function render(_ctx) {
2120
const _setTemplateRef = _createTemplateRefSetter()
2221
const n0 = t0()
23-
let r0
2422
_renderEffect(() => {
2523
const _foo = _ctx.foo
26-
r0 = _setTemplateRef(n0, bar => {
24+
_setTemplateRef(n0, bar => {
2725
_foo.value = bar
2826
;({ baz: _ctx.baz } = bar)
2927
console.log(_foo.value, _ctx.baz)
30-
}, r0)
28+
})
3129
})
3230
return n0
3331
}"
@@ -41,7 +39,7 @@ export function render(_ctx) {
4139
const _setTemplateRef = _createTemplateRefSetter()
4240
const n0 = _createFor(() => ([1,2,3]), (_for_item0) => {
4341
const n2 = t0()
44-
_setTemplateRef(n2, "foo", void 0, true)
42+
_setTemplateRef(n2, "foo", true)
4543
return n2
4644
}, undefined, 4)
4745
return n0
@@ -67,7 +65,7 @@ exports[`compiler: template ref transform > static ref (inline mode) 1`] = `
6765
"
6866
const _setTemplateRef = _createTemplateRefSetter()
6967
const n0 = t0()
70-
_setTemplateRef(n0, foo, null, null, "foo")
68+
_setTemplateRef(n0, foo, null, "foo")
7169
return n0
7270
"
7371
`;

packages/compiler-vapor/__tests__/transforms/transformTemplateRef.spec.ts

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ describe('compiler: template ref transform', () => {
5656
})
5757
expect(code).matchSnapshot()
5858
// pass the actual ref and ref key
59-
expect(code).contains('_setTemplateRef(n0, foo, null, null, "foo")')
59+
expect(code).contains('_setTemplateRef(n0, foo, null, "foo")')
6060
})
6161

6262
test('dynamic ref', () => {
@@ -67,12 +67,6 @@ describe('compiler: template ref transform', () => {
6767
flags: DynamicFlag.REFERENCED,
6868
})
6969
expect([...ir.template.keys()]).toEqual(['<div>'])
70-
expect(ir.block.operation).toMatchObject([
71-
{
72-
type: IRNodeTypes.DECLARE_OLD_REF,
73-
id: 0,
74-
},
75-
])
7670
expect(ir.block.effect).toMatchObject([
7771
{
7872
operations: [
@@ -89,7 +83,7 @@ describe('compiler: template ref transform', () => {
8983
])
9084
expect(code).matchSnapshot()
9185
expect(code).contains('const _setTemplateRef = _createTemplateRefSetter()')
92-
expect(code).contains('_setTemplateRef(n0, _ctx.foo, r0)')
86+
expect(code).contains('_setTemplateRef(n0, _ctx.foo)')
9387
})
9488

9589
test('function ref', () => {
@@ -105,12 +99,6 @@ describe('compiler: template ref transform', () => {
10599
flags: DynamicFlag.REFERENCED,
106100
})
107101
expect([...ir.template.keys()]).toEqual(['<div>'])
108-
expect(ir.block.operation).toMatchObject([
109-
{
110-
type: IRNodeTypes.DECLARE_OLD_REF,
111-
id: 0,
112-
},
113-
])
114102
expect(ir.block.effect).toMatchObject([
115103
{
116104
operations: [
@@ -130,7 +118,7 @@ describe('compiler: template ref transform', () => {
130118
_foo.value = bar
131119
;({ baz: _ctx.baz } = bar)
132120
console.log(_foo.value, _ctx.baz)
133-
}, r0)`)
121+
})`)
134122
})
135123

136124
test('ref + v-if', () => {
@@ -178,6 +166,6 @@ describe('compiler: template ref transform', () => {
178166
])
179167
expect(code).matchSnapshot()
180168
expect(code).contains('const _setTemplateRef = _createTemplateRefSetter()')
181-
expect(code).contains('_setTemplateRef(n2, "foo", void 0, true)')
169+
expect(code).contains('_setTemplateRef(n2, "foo", true)')
182170
})
183171
})

packages/compiler-vapor/src/generators/operation.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { genFor } from './for'
1212
import { genSetHtml } from './html'
1313
import { genIf } from './if'
1414
import { genDynamicProps, genSetProp } from './prop'
15-
import { genDeclareOldRef, genSetTemplateRef } from './templateRef'
15+
import { genSetTemplateRef } from './templateRef'
1616
import { genGetTextChild, genSetText } from './text'
1717
import {
1818
type CodeFragment,
@@ -79,8 +79,6 @@ export function genOperation(
7979
return genFor(oper, context)
8080
case IRNodeTypes.CREATE_COMPONENT_NODE:
8181
return genCreateComponent(oper, context)
82-
case IRNodeTypes.DECLARE_OLD_REF:
83-
return genDeclareOldRef(oper)
8482
case IRNodeTypes.SLOT_OUTLET_NODE:
8583
return genSlotOutlet(oper, context)
8684
case IRNodeTypes.DIRECTIVE:

packages/compiler-vapor/src/generators/templateRef.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { genExpression } from './expression'
22
import type { CodegenContext } from '../generate'
3-
import type { DeclareOldRefIRNode, SetTemplateRefIRNode } from '../ir'
3+
import type { SetTemplateRefIRNode } from '../ir'
44
import { type CodeFragment, NEWLINE, genCall } from './utils'
55
import { BindingTypes, type SimpleExpressionNode } from '@vue/compiler-dom'
66

@@ -13,22 +13,16 @@ export function genSetTemplateRef(
1313
const [refValue, refKey] = genRefValue(oper.value, context)
1414
return [
1515
NEWLINE,
16-
oper.effect && `r${oper.element} = `,
1716
...genCall(
1817
setTemplateRefIdent, // will be generated in root scope
1918
`n${oper.element}`,
2019
refValue,
21-
oper.effect ? `r${oper.element}` : oper.refFor ? 'void 0' : undefined,
2220
oper.refFor && 'true',
2321
refKey,
2422
),
2523
]
2624
}
2725

28-
export function genDeclareOldRef(oper: DeclareOldRefIRNode): CodeFragment[] {
29-
return [NEWLINE, `let r${oper.id}`]
30-
}
31-
3226
function genRefValue(value: SimpleExpressionNode, context: CodegenContext) {
3327
// in inline mode there is no setupState object, so we can't use string
3428
// keys to set the ref. Instead, we need to transform it to pass the

packages/compiler-vapor/src/ir/index.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ export enum IRNodeTypes {
2929
SLOT_OUTLET_NODE,
3030

3131
DIRECTIVE,
32-
DECLARE_OLD_REF, // consider make it more general
3332

3433
IF,
3534
FOR,
@@ -209,11 +208,6 @@ export interface CreateComponentIRNode extends BaseIRNode {
209208
last?: boolean
210209
}
211210

212-
export interface DeclareOldRefIRNode extends BaseIRNode {
213-
type: IRNodeTypes.DECLARE_OLD_REF
214-
id: number
215-
}
216-
217211
export interface SlotOutletIRNode extends BaseIRNode {
218212
type: IRNodeTypes.SLOT_OUTLET_NODE
219213
id: number
@@ -248,7 +242,6 @@ export type OperationNode =
248242
| IfIRNode
249243
| ForIRNode
250244
| CreateComponentIRNode
251-
| DeclareOldRefIRNode
252245
| SlotOutletIRNode
253246
| GetTextChildIRNode
254247

packages/compiler-vapor/src/transforms/transformTemplateRef.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,6 @@ export const transformTemplateRef: NodeTransform = (node, context) => {
2929
return () => {
3030
const id = context.reference()
3131
const effect = !isConstantExpression(value)
32-
effect &&
33-
context.registerOperation({
34-
type: IRNodeTypes.DECLARE_OLD_REF,
35-
id,
36-
})
3732
context.registerEffect([value], {
3833
type: IRNodeTypes.SET_TEMPLATE_REF,
3934
element: id,

packages/runtime-vapor/__tests__/components/Teleport.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,15 +720,15 @@ function runSharedTests(deferMode: boolean): void {
720720
{
721721
default: () => {
722722
const n3 = template('<circle></circle>', false, 1)() as any
723-
_setTemplateRef(n3, circle, undefined, undefined, 'circle')
723+
_setTemplateRef(n3, circle, undefined, 'circle')
724724
return n3
725725
},
726726
},
727727
)
728728
return n4
729729
},
730730
)
731-
_setTemplateRef(n0, svg, undefined, undefined, 'svg')
731+
_setTemplateRef(n0, svg, undefined, 'svg')
732732
return [n0, n1]
733733
},
734734
}).render()

0 commit comments

Comments
 (0)