Skip to content

Commit 84b7d0e

Browse files
authored
perf: reduce array iterations (#886)
1 parent 38232bd commit 84b7d0e

File tree

6 files changed

+62
-38
lines changed

6 files changed

+62
-38
lines changed

packages/eslint-plugin/rules/array-element-newline/array-element-newline.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,7 @@ export default createRule<RuleOptions, MessageIds>({
224224
* ]
225225
*/
226226
if (options.multiline) {
227-
elementBreak = elements
228-
.filter(element => element !== null)
229-
.some(element => !isSingleLine(element))
227+
elementBreak = elements.some(element => element !== null && !isSingleLine(element))
230228
}
231229

232230
let linebreaksCount = 0

packages/eslint-plugin/rules/line-comment-position/line-comment-position.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,10 @@ export default createRule<RuleOptions, MessageIds>({
8989
Program() {
9090
const comments = sourceCode.getAllComments()
9191

92-
comments.filter(token => token.type === 'Line').forEach((node) => {
92+
comments.forEach((node) => {
93+
if (node.type !== 'Line')
94+
return
95+
9396
if (applyDefaultIgnorePatterns && (defaultIgnoreRegExp.test(node.value) || fallThroughRegExp.test(node.value)))
9497
return
9598

packages/eslint-plugin/rules/lines-around-comment/lines-around-comment.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@ import { createRule } from '#utils/create-rule'
77
* @returns an array with with any line numbers that are empty.
88
*/
99
function getEmptyLineNums(lines: string[]): number[] {
10-
const emptyLines = lines
11-
.map((line, i) => ({
12-
code: line.trim(),
13-
num: i + 1,
14-
}))
15-
.filter(line => !line.code)
16-
.map(line => line.num)
10+
const emptyLines: number[] = []
11+
12+
lines.forEach((line, i) => {
13+
if (!line.trim())
14+
emptyLines.push(i + 1)
15+
})
1716

1817
return emptyLines
1918
}

packages/eslint-plugin/rules/multiline-comment-style/multiline-comment-style.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -475,8 +475,14 @@ export default createRule<RuleOptions, MessageIds>({
475475

476476
return commentGroups
477477
}, [])
478-
.filter(commentGroup => !(commentGroup.length === 1 && isSingleLine(commentGroup[0])))
479-
.forEach(commentGroupCheckers[option])
478+
.forEach((commentGroup) => {
479+
if (commentGroup.length === 1 && isSingleLine(commentGroup[0]))
480+
return
481+
482+
const check = commentGroupCheckers[option]
483+
484+
check(commentGroup)
485+
})
480486
},
481487
}
482488
},

packages/eslint-plugin/rules/no-extra-parens/no-extra-parens.ts

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -796,9 +796,10 @@ export default createRule<RuleOptions, MessageIds>({
796796
report(node.callee)
797797
}
798798
}
799-
node.arguments
800-
.filter(arg => hasExcessParensWithPrecedence(arg, PRECEDENCE_OF_ASSIGNMENT_EXPR))
801-
.forEach(report)
799+
node.arguments.forEach((arg) => {
800+
if (hasExcessParensWithPrecedence(arg, PRECEDENCE_OF_ASSIGNMENT_EXPR))
801+
report(arg)
802+
})
802803
}
803804

804805
if (isTypeAssertion(node.callee)) {
@@ -924,13 +925,16 @@ export default createRule<RuleOptions, MessageIds>({
924925
? { ...element, type: AST_NODE_TYPES.FunctionExpression as any }
925926
: element,
926927
)
927-
.filter((e): e is NonNullable<typeof e> => !!e && hasExcessParensWithPrecedence(e, PRECEDENCE_OF_ASSIGNMENT_EXPR))
928-
.forEach(report)
928+
.forEach((ele) => {
929+
if (!!ele && hasExcessParensWithPrecedence(ele, PRECEDENCE_OF_ASSIGNMENT_EXPR))
930+
report(ele)
931+
})
929932
},
930933
ArrayPattern(node) {
931-
node.elements
932-
.filter((e): e is NonNullable<typeof e> => !!e && canBeAssignmentTarget(e) && hasExcessParens(e))
933-
.forEach(report)
934+
node.elements.forEach((ele) => {
935+
if (!!ele && canBeAssignmentTarget(ele) && hasExcessParens(ele))
936+
report(ele)
937+
})
934938
},
935939
ArrowFunctionExpression(node) {
936940
if (isTypeAssertion(node.body))
@@ -1326,18 +1330,26 @@ export default createRule<RuleOptions, MessageIds>({
13261330
},
13271331
'NewExpression': checkCallNew,
13281332
ObjectExpression(node) {
1329-
node.properties
1330-
.filter((property): property is Tree.Property => property.type === 'Property' && property.value && hasExcessParensWithPrecedence(property.value, PRECEDENCE_OF_ASSIGNMENT_EXPR))
1331-
.forEach(property => report(property.value))
1333+
node.properties.forEach((property) => {
1334+
if (
1335+
property.type === 'Property'
1336+
&& property.value
1337+
&& hasExcessParensWithPrecedence(property.value, PRECEDENCE_OF_ASSIGNMENT_EXPR)
1338+
) {
1339+
report(property.value)
1340+
}
1341+
})
13321342
},
13331343
ObjectPattern(node) {
1334-
node.properties
1335-
.filter((property) => {
1336-
const value = property.value
1337-
1338-
return value && canBeAssignmentTarget(value) && hasExcessParens(value)
1339-
})
1340-
.forEach(property => report(property.value!))
1344+
node.properties.forEach(({ value }) => {
1345+
if (
1346+
value
1347+
&& canBeAssignmentTarget(value)
1348+
&& hasExcessParens(value)
1349+
) {
1350+
report(value)
1351+
}
1352+
})
13411353
},
13421354
Property(node) {
13431355
if (node.computed) {
@@ -1374,9 +1386,10 @@ export default createRule<RuleOptions, MessageIds>({
13741386
SequenceExpression(node) {
13751387
const precedenceOfNode = precedence(node)
13761388

1377-
node.expressions
1378-
.filter(e => hasExcessParensWithPrecedence(e, precedenceOfNode))
1379-
.forEach(report)
1389+
node.expressions.forEach((expression) => {
1390+
if (hasExcessParensWithPrecedence(expression, precedenceOfNode))
1391+
report(expression)
1392+
})
13801393
},
13811394
SpreadElement(node) {
13821395
if (isTypeAssertion(node.argument))
@@ -1399,9 +1412,10 @@ export default createRule<RuleOptions, MessageIds>({
13991412
report(node.discriminant)
14001413
},
14011414
TemplateLiteral(node) {
1402-
node.expressions
1403-
.filter(e => e && hasExcessParens(e))
1404-
.forEach(report)
1415+
node.expressions.forEach((expression) => {
1416+
if (hasExcessParens(expression))
1417+
report(expression)
1418+
})
14051419
},
14061420
ThrowStatement(node) {
14071421
if (!node.argument || isTypeAssertion(node.argument))

packages/eslint-plugin/rules/spaced-comment/spaced-comment.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,11 @@ export default createRule<RuleOptions, MessageIds>({
371371
Program() {
372372
const comments = sourceCode.getAllComments()
373373

374-
comments.filter(token => !isHashbangComment(token)).forEach(checkCommentForSpace)
374+
comments.forEach((comment) => {
375+
if (!isHashbangComment(comment))
376+
checkCommentForSpace(comment)
377+
},
378+
)
375379
},
376380
}
377381
},

0 commit comments

Comments
 (0)