@@ -81,6 +81,21 @@ module.exports = {
81
81
let refReferences
82
82
const setupContexts = new Map ( )
83
83
84
+ /**
85
+ * Collect identifier id
86
+ * @param {Identifier } node
87
+ * @param {Set<Identifier> } referenceIds
88
+ */
89
+ function collectReferenceIds ( node , referenceIds ) {
90
+ const variable = findVariable ( utils . getScope ( context , node ) , node )
91
+ if ( ! variable ) {
92
+ return
93
+ }
94
+ for ( const reference of variable . references ) {
95
+ referenceIds . add ( reference . identifier )
96
+ }
97
+ }
98
+
84
99
/**
85
100
* @param {Identifier } node
86
101
*/
@@ -101,6 +116,16 @@ module.exports = {
101
116
} )
102
117
}
103
118
119
+ /**
120
+ * @param {CallExpression } node
121
+ */
122
+ function reportWrappedIdentifiers ( node ) {
123
+ const nodes = node . arguments . filter ( ( node ) => node . type === 'Identifier' )
124
+ for ( const node of nodes ) {
125
+ reportIfRefWrapped ( node )
126
+ }
127
+ }
128
+
104
129
const programNode = context . getSourceCode ( ) . ast
105
130
106
131
const callVisitor = {
@@ -117,35 +142,27 @@ module.exports = {
117
142
118
143
// verify setup context
119
144
const setupContext = setupContexts . get ( info ? info . node : programNode )
120
- if ( setupContext ) {
121
- const { contextReferenceIds, emitReferenceIds } = setupContext
145
+ if ( ! setupContext ) {
146
+ return
147
+ }
148
+
149
+ const { contextReferenceIds, emitReferenceIds } = setupContext
150
+ if (
151
+ node . callee . type === 'Identifier' &&
152
+ emitReferenceIds . has ( node . callee )
153
+ ) {
154
+ // verify setup(props,{emit}) {emit()}
155
+ reportWrappedIdentifiers ( node )
156
+ } else {
157
+ const emit = getCalleeMemberNode ( node )
122
158
if (
123
- node . callee . type === 'Identifier' &&
124
- emitReferenceIds . has ( node . callee )
159
+ emit &&
160
+ emit . name === 'emit' &&
161
+ emit . member . object . type === 'Identifier' &&
162
+ contextReferenceIds . has ( emit . member . object )
125
163
) {
126
- // verify setup(props,{emit}) {emit()}
127
- const nodes = node . arguments . filter (
128
- ( node ) => node . type === 'Identifier'
129
- )
130
- for ( const node of nodes ) {
131
- reportIfRefWrapped ( node )
132
- }
133
- } else {
134
- const emit = getCalleeMemberNode ( node )
135
- if (
136
- emit &&
137
- emit . name === 'emit' &&
138
- emit . member . object . type === 'Identifier' &&
139
- contextReferenceIds . has ( emit . member . object )
140
- ) {
141
- // verify setup(props,context) {context.emit()}
142
- const nodes = node . arguments . filter (
143
- ( node ) => node . type === 'Identifier'
144
- )
145
- for ( const node of nodes ) {
146
- reportIfRefWrapped ( node )
147
- }
148
- }
164
+ // verify setup(props,context) {context.emit()}
165
+ reportWrappedIdentifiers ( node )
149
166
}
150
167
}
151
168
}
@@ -253,17 +270,9 @@ module.exports = {
253
270
}
254
271
255
272
// const emit = defineEmits()
256
- const variable = findVariable (
257
- utils . getScope ( context , emitParam ) ,
258
- emitParam
259
- )
260
- if ( ! variable ) {
261
- return
262
- }
263
273
const emitReferenceIds = new Set ( )
264
- for ( const reference of variable . references ) {
265
- emitReferenceIds . add ( reference . identifier )
266
- }
274
+ collectReferenceIds ( emitParam , emitReferenceIds )
275
+
267
276
setupContexts . set ( programNode , {
268
277
contextReferenceIds : new Set ( ) ,
269
278
emitReferenceIds
@@ -285,6 +294,7 @@ module.exports = {
285
294
// cannot check
286
295
return
287
296
}
297
+
288
298
const contextReferenceIds = new Set ( )
289
299
const emitReferenceIds = new Set ( )
290
300
if ( contextParam . type === 'ObjectPattern' ) {
@@ -295,30 +305,12 @@ module.exports = {
295
305
if ( ! emitProperty || emitProperty . value . type !== 'Identifier' ) {
296
306
return
297
307
}
298
- const emitParam = emitProperty . value
308
+
299
309
// `setup(props, {emit})`
300
- const variable = findVariable (
301
- utils . getScope ( context , emitParam ) ,
302
- emitParam
303
- )
304
- if ( ! variable ) {
305
- return
306
- }
307
- for ( const reference of variable . references ) {
308
- emitReferenceIds . add ( reference . identifier )
309
- }
310
+ collectReferenceIds ( emitProperty . value , emitReferenceIds )
310
311
} else {
311
312
// `setup(props, context)`
312
- const variable = findVariable (
313
- utils . getScope ( context , contextParam ) ,
314
- contextParam
315
- )
316
- if ( ! variable ) {
317
- return
318
- }
319
- for ( const reference of variable . references ) {
320
- contextReferenceIds . add ( reference . identifier )
321
- }
313
+ collectReferenceIds ( contextParam , contextReferenceIds )
322
314
}
323
315
setupContexts . set ( vueNode , {
324
316
contextReferenceIds,
0 commit comments