@@ -81,6 +81,21 @@ module.exports = {
8181 let refReferences
8282 const setupContexts = new Map ( )
8383
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+
8499 /**
85100 * @param {Identifier } node
86101 */
@@ -101,6 +116,16 @@ module.exports = {
101116 } )
102117 }
103118
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+
104129 const programNode = context . getSourceCode ( ) . ast
105130
106131 const callVisitor = {
@@ -117,35 +142,27 @@ module.exports = {
117142
118143 // verify setup context
119144 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 )
122158 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 )
125163 ) {
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 )
149166 }
150167 }
151168 }
@@ -253,17 +270,9 @@ module.exports = {
253270 }
254271
255272 // const emit = defineEmits()
256- const variable = findVariable (
257- utils . getScope ( context , emitParam ) ,
258- emitParam
259- )
260- if ( ! variable ) {
261- return
262- }
263273 const emitReferenceIds = new Set ( )
264- for ( const reference of variable . references ) {
265- emitReferenceIds . add ( reference . identifier )
266- }
274+ collectReferenceIds ( emitParam , emitReferenceIds )
275+
267276 setupContexts . set ( programNode , {
268277 contextReferenceIds : new Set ( ) ,
269278 emitReferenceIds
@@ -285,6 +294,7 @@ module.exports = {
285294 // cannot check
286295 return
287296 }
297+
288298 const contextReferenceIds = new Set ( )
289299 const emitReferenceIds = new Set ( )
290300 if ( contextParam . type === 'ObjectPattern' ) {
@@ -295,30 +305,12 @@ module.exports = {
295305 if ( ! emitProperty || emitProperty . value . type !== 'Identifier' ) {
296306 return
297307 }
298- const emitParam = emitProperty . value
308+
299309 // `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 )
310311 } else {
311312 // `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 )
322314 }
323315 setupContexts . set ( vueNode , {
324316 contextReferenceIds,
0 commit comments