Skip to content

Commit

Permalink
prefer-at: Improve fix (#1901)
Browse files Browse the repository at this point in the history
  • Loading branch information
fisker committed Sep 19, 2022
1 parent 70e5bdd commit 1c457bb
Show file tree
Hide file tree
Showing 4 changed files with 112 additions and 25 deletions.
19 changes: 19 additions & 0 deletions rules/prefer-at.js
Expand Up @@ -179,6 +179,25 @@ function create(context) {
yield removeLengthNode(lengthNode, fixer, sourceCode);
}

// Only remove space for `foo[foo.length - 1]`
if (
indexNode.type === 'BinaryExpression'
&& indexNode.operator === '-'
&& indexNode.left === lengthNode
&& indexNode.right.type === 'Literal'
&& /^\d+$/.test(indexNode.right.raw)
) {
const numberNode = indexNode.right;
const tokenBefore = sourceCode.getTokenBefore(numberNode);
if (
tokenBefore.type === 'Punctuator'
&& tokenBefore.value === '-'
&& /^\s+$/.test(sourceCode.text.slice(tokenBefore.range[1], numberNode.range[0]))
) {
yield fixer.removeRange([tokenBefore.range[1], numberNode.range[0]]);
}
}

const openingBracketToken = sourceCode.getTokenBefore(indexNode, isOpeningBracketToken);
yield fixer.replaceText(openingBracketToken, '.at(');

Expand Down
4 changes: 4 additions & 0 deletions test/prefer-at.mjs
Expand Up @@ -21,6 +21,10 @@ test.snapshot({
],
invalid: [
'array[array.length - 1];',
'array[array.length -1];',
'array[array.length - /* comment */ 1];',
'array[array.length - 1.];',
'array[array.length - 0b1];',
'array[array.length - 9];',
'array[0][array[0].length - 1];',
'array[(( array.length )) - 1];',
Expand Down
114 changes: 89 additions & 25 deletions test/snapshots/prefer-at.mjs.md
Expand Up @@ -10,7 +10,7 @@ Generated by [AVA](https://avajs.dev).
> Output
`␊
1 | array.at(- 1);␊
1 | array.at(-1);␊
`

> Error 1/1
Expand All @@ -21,12 +21,76 @@ Generated by [AVA](https://avajs.dev).
`

## Invalid #2
1 | array[array.length -1];

> Output
`␊
1 | array.at(-1);␊
`

> Error 1/1
`␊
> 1 | array[array.length -1];␊
| ^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #3
1 | array[array.length - /* comment */ 1];

> Output
`␊
1 | array.at(- /* comment */ 1);␊
`

> Error 1/1
`␊
> 1 | array[array.length - /* comment */ 1];␊
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #4
1 | array[array.length - 1.];

> Output
`␊
1 | array.at(- 1.);␊
`

> Error 1/1
`␊
> 1 | array[array.length - 1.];␊
| ^^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #5
1 | array[array.length - 0b1];

> Output
`␊
1 | array.at(- 0b1);␊
`

> Error 1/1
`␊
> 1 | array[array.length - 0b1];␊
| ^^^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #6
1 | array[array.length - 9];

> Output
`␊
1 | array.at(- 9);␊
1 | array.at(-9);␊
`

> Error 1/1
Expand All @@ -36,13 +100,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #3
## Invalid #7
1 | array[0][array[0].length - 1];

> Output
`␊
1 | array[0].at(- 1);␊
1 | array[0].at(-1);␊
`

> Error 1/1
Expand All @@ -52,13 +116,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #4
## Invalid #8
1 | array[(( array.length )) - 1];

> Output
`␊
1 | array.at(- 1);␊
1 | array.at(-1);␊
`

> Error 1/1
Expand All @@ -68,7 +132,7 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #5
## Invalid #9
1 | array[array.length - (( 1 ))];

> Output
Expand All @@ -84,13 +148,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #6
## Invalid #10
1 | array[(( array.length - 1 ))];

> Output
`␊
1 | array.at((( - 1 )));␊
1 | array.at((( -1 )));␊
`

> Error 1/1
Expand All @@ -100,13 +164,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #7
## Invalid #11
1 | (( array ))[array.length - 1];

> Output
`␊
1 | (( array )).at(- 1);␊
1 | (( array )).at(-1);␊
`

> Error 1/1
Expand All @@ -116,13 +180,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #8
## Invalid #12
1 | (( array[array.length - 1] ));

> Output
`␊
1 | (( array.at(- 1) ));␊
1 | (( array.at(-1) ));␊
`

> Error 1/1
Expand All @@ -132,13 +196,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #9
## Invalid #13
1 | array[array.length - 1].pop().shift()[0];

> Output
`␊
1 | array.at(- 1).pop().shift()[0];␊
1 | array.at(-1).pop().shift()[0];␊
`

> Error 1/1
Expand All @@ -148,13 +212,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #10
## Invalid #14
1 | a = array[array.length - 1]

> Output
`␊
1 | a = array.at(- 1)␊
1 | a = array.at(-1)␊
`

> Error 1/1
Expand All @@ -164,13 +228,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #11
## Invalid #15
1 | const a = array[array.length - 1]

> Output
`␊
1 | const a = array.at(- 1)␊
1 | const a = array.at(-1)␊
`

> Error 1/1
Expand All @@ -180,13 +244,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #12
## Invalid #16
1 | const {a = array[array.length - 1]} = {}

> Output
`␊
1 | const {a = array.at(- 1)} = {}␊
1 | const {a = array.at(-1)} = {}␊
`

> Error 1/1
Expand All @@ -196,13 +260,13 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #13
## Invalid #17
1 | typeof array[array.length - 1]

> Output
`␊
1 | typeof array.at(- 1)␊
1 | typeof array.at(-1)␊
`

> Error 1/1
Expand All @@ -212,7 +276,7 @@ Generated by [AVA](https://avajs.dev).
| ^^^^^^^^^^^^^^^^ Prefer \`.at(…)\` over \`[….length - index]\`.␊
`

## Invalid #14
## Invalid #18
1 | function foo() {return arguments[arguments.length - 1]}

> Error 1/1
Expand Down Expand Up @@ -1108,7 +1172,7 @@ Generated by [AVA](https://avajs.dev).
> Output
`␊
1 | array.at(- 1)␊
1 | array.at(-1)␊
`

> Error 1/1
Expand Down
Binary file modified test/snapshots/prefer-at.mjs.snap
Binary file not shown.

0 comments on commit 1c457bb

Please sign in to comment.