From df1ff1c8ad8c6dd1ec42fe91774a808f0119758e Mon Sep 17 00:00:00 2001 From: Michael Blumberg <53262733+MichaelBlm@users.noreply.github.com> Date: Wed, 3 Apr 2024 08:20:52 -0700 Subject: [PATCH] `prefer-spread`: Fix it to not report on optional chaining (#2304) --- rules/prefer-spread.js | 6 +++-- test/prefer-spread.mjs | 2 ++ test/snapshots/prefer-spread.mjs.md | 35 ++++++++++++++++++++------ test/snapshots/prefer-spread.mjs.snap | Bin 5907 -> 5960 bytes 4 files changed, 34 insertions(+), 9 deletions(-) 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 d930ba9778cbe48e640392b1ab342b963c5c7ac8..51b79f8dd23377011b8266ea9bd09c8cddccd13c 100644 GIT binary patch literal 5960 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 literal 5907 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