diff --git a/rules/prefer-spread.js b/rules/prefer-spread.js index 6a158289eb..27a7921a38 100644 --- a/rules/prefer-spread.js +++ b/rules/prefer-spread.js @@ -6,6 +6,7 @@ const { needsSemicolon, isNodeMatches, isMethodNamed, + hasOptionalChainElement, } = require('./utils/index.js'); const {removeMethodCall} = require('./fix/index.js'); const {isLiteral, isMethodCall} = require('./ast/index.js'); @@ -403,7 +404,8 @@ const create = context => { optionalCall: false, optionalMember: false, }) - && node.callee.object.type !== 'ArrayExpression' + && !isArrayLiteral(node.callee.object) + && !hasOptionalChainElement(node.callee.object) )) { return; } @@ -476,7 +478,7 @@ const create = context => { const resultBySpread = [...value]; hasSameResult = resultBySplit.length === resultBySpread.length - && resultBySplit.every((character, index) => character === resultBySpread[index]); + && resultBySplit.every((character, index) => character === resultBySpread[index]); } const problem = { diff --git a/test/prefer-spread.mjs b/test/prefer-spread.mjs index 7c7eec961b..83edafc383 100644 --- a/test/prefer-spread.mjs +++ b/test/prefer-spread.mjs @@ -312,6 +312,7 @@ test.snapshot({ 'buffer.slice()', 'file.slice()', 'class A {foo() {this.slice()}}', + 'scopeManager?.scopes.slice()', ], invalid: [ 'array.slice()', @@ -320,6 +321,7 @@ test.snapshot({ 'array.slice().slice(1)', 'const copy = array.slice()', '(( (( (( array )).slice ))() ))', + '(scopeManager?.scopes).slice()', // Semicolon outdent` bar() diff --git a/test/snapshots/prefer-spread.mjs.md b/test/snapshots/prefer-spread.mjs.md index 7b8a812b48..86770d14cb 100644 --- a/test/snapshots/prefer-spread.mjs.md +++ b/test/snapshots/prefer-spread.mjs.md @@ -2464,7 +2464,28 @@ Generated by [AVA](https://avajs.dev). | ^^^^^ Prefer the spread operator over \`Array#slice()\`.␊ ` -## invalid(7): bar() foo.slice() +## invalid(7): (scopeManager?.scopes).slice() + +> Input + + `␊ + 1 | (scopeManager?.scopes).slice()␊ + ` + +> Output + + `␊ + 1 | [...(scopeManager?.scopes)]␊ + ` + +> Error 1/1 + + `␊ + > 1 | (scopeManager?.scopes).slice()␊ + | ^^^^^ Prefer the spread operator over \`Array#slice()\`.␊ + ` + +## invalid(8): bar() foo.slice() > Input @@ -2488,7 +2509,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^ Prefer the spread operator over \`Array#slice()\`.␊ ` -## invalid(8): "".slice() +## invalid(9): "".slice() > Input @@ -2509,7 +2530,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^ Prefer the spread operator over \`Array#slice()\`.␊ ` -## invalid(9): new Uint8Array([10, 20, 30, 40, 50]).slice() +## invalid(10): new Uint8Array([10, 20, 30, 40, 50]).slice() > Input @@ -2530,7 +2551,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^ Prefer the spread operator over \`Array#slice()\`.␊ ` -## invalid(10): array.slice(0) +## invalid(11): array.slice(0) > Input @@ -2551,7 +2572,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^ Prefer the spread operator over \`Array#slice()\`.␊ ` -## invalid(11): array.slice(0b0) +## invalid(12): array.slice(0b0) > Input @@ -2572,7 +2593,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^ Prefer the spread operator over \`Array#slice()\`.␊ ` -## invalid(12): array.slice(0.00) +## invalid(13): array.slice(0.00) > Input @@ -2593,7 +2614,7 @@ Generated by [AVA](https://avajs.dev). | ^^^^^ Prefer the spread operator over \`Array#slice()\`.␊ ` -## invalid(13): array.slice(0.00, ) +## invalid(14): array.slice(0.00, ) > Input diff --git a/test/snapshots/prefer-spread.mjs.snap b/test/snapshots/prefer-spread.mjs.snap index d930ba9778..51b79f8dd2 100644 Binary files a/test/snapshots/prefer-spread.mjs.snap and b/test/snapshots/prefer-spread.mjs.snap differ