Skip to content

Commit 2d7a205

Browse files
committed
fix: properly fix avoiding reverse for (last)indexOf
1 parent 9ffee6d commit 2d7a205

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

rules/avoid-reverse.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const { isMethod } = require("../lib/helpers/call-expression"),
99
REPLACEMENTS = {
1010
indexOf: "lastIndexOf",
1111
reduce: "reduceRight",
12-
// lastIndexOf: "indexOf", would need some more logic for the auto fixer (array.length - array.lastIndefOf)
12+
lastIndexOf: "indexOf",
1313
reduceRight: "reduce"
1414
};
1515

@@ -40,6 +40,15 @@ module.exports = {
4040
},
4141
message: `Prefer using ${reversed} over reversing the array and ${node.callee.property.name}`,
4242
fix(fixer) {
43+
if(reversed === "lastIndexOf" || reversed === "indexOf") {
44+
return [
45+
fixer.insertTextBefore(parent.callee, `${parent.callee.object.name}.length - 1 - `),
46+
fixer.replaceTextRange([
47+
parent.callee.property.start,
48+
node.callee.property.end
49+
], reversed)
50+
];
51+
}
4352
return fixer.replaceTextRange([
4453
parent.callee.property.start,
4554
node.callee.property.end

test/rules/avoid-reverse.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ ruleTester.run('avoid-reverse', rule, {
2525
column: 7,
2626
line: 1
2727
} ],
28-
output: 'array.lastIndexOf(1)'
28+
output: 'array.length - 1 - array.lastIndexOf(1)'
2929
},
3030
{
3131
code: 'array.reverse().lastIndexOf(1)',
@@ -34,7 +34,7 @@ ruleTester.run('avoid-reverse', rule, {
3434
column: 7,
3535
line: 1
3636
} ],
37-
output: 'array.indexOf(1)'
37+
output: 'array.length - 1 - array.indexOf(1)'
3838
},
3939
{
4040
code: 'array.reverse().reduce((p, c) => p + c, 0)',

0 commit comments

Comments
 (0)