Skip to content

Commit c335bf4

Browse files
committed
refactor: optimize code
1 parent c2be9f1 commit c335bf4

File tree

1 file changed

+50
-58
lines changed

1 file changed

+50
-58
lines changed

lib/rules/no-ref-as-operand.js

+50-58
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)