From bebddcfcace009510f5e1ac1b9490b546b67b607 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 25 Jan 2021 10:02:19 +0800 Subject: [PATCH] Fix "spread all suggestion" --- rules/prefer-spread.js | 5 ++++- test/prefer-spread.js | 3 ++- test/snapshots/prefer-spread.js.md | 32 +++++++++++++++++++++------ test/snapshots/prefer-spread.js.snap | Bin 4082 -> 4084 bytes 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/rules/prefer-spread.js b/rules/prefer-spread.js index 7542a07125..d20eb043b2 100644 --- a/rules/prefer-spread.js +++ b/rules/prefer-spread.js @@ -313,7 +313,10 @@ const create = context => { ) })); - if (fixableArgumentsAfterFirstArgument.length < restArguments.length) { + if ( + fixableArgumentsAfterFirstArgument.length < restArguments.length && + !restArguments.some(({type}) => type !== 'SpreadElement') + ) { problem.suggest.push({ messageId: SUGGESTION_CONCAT_SPREAD_ALL_ARGUMENTS, fix: fixConcat( diff --git a/test/prefer-spread.js b/test/prefer-spread.js index 5d065158f0..0b7883d4d9 100644 --- a/test/prefer-spread.js +++ b/test/prefer-spread.js @@ -227,6 +227,7 @@ test.snapshot({ ) `, '[].concat((a.b.c), 2)', - '[].concat(a.b(), 2)' + '[].concat(a.b(), 2)', + 'foo.concat(bar, 2, 3, ...baz)' ] }); diff --git a/test/snapshots/prefer-spread.js.md b/test/snapshots/prefer-spread.js.md index 720f171a20..04ffb6e979 100644 --- a/test/snapshots/prefer-spread.js.md +++ b/test/snapshots/prefer-spread.js.md @@ -1008,20 +1008,16 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^ Prefer the spread operator over `Array#concat(…)`.␊ ␊ --------------------------------------------------------------------------------␊ - Suggestion 1/4: First argument is an `array`.␊ + Suggestion 1/3: First argument is an `array`.␊ 1 | [...foo, ...bar, 2, 3].concat(baz)␊ ␊ --------------------------------------------------------------------------------␊ - Suggestion 2/4: First argument is not an `array`.␊ + Suggestion 2/3: First argument is not an `array`.␊ 1 | [...foo, bar, 2, 3].concat(baz)␊ ␊ --------------------------------------------------------------------------------␊ - Suggestion 3/4: Test first argument with `Array.isArray(…)`.␊ + Suggestion 3/3: Test first argument with `Array.isArray(…)`.␊ 1 | [...foo, ...(Array.isArray(bar) ? bar : [bar]), 2, 3].concat(baz)␊ - ␊ - --------------------------------------------------------------------------------␊ - Suggestion 4/4: Spread all unknown arguments`.␊ - 1 | [...foo, ...bar, 2, 3, ...baz]␊ ` ## Invalid #33 @@ -1326,3 +1322,25 @@ Generated by [AVA](https://avajs.dev). Suggestion 2/2: First argument is not an `array`.␊ 1 | [a.b(), 2]␊ ` + +## Invalid #50 + 1 | foo.concat(bar, 2, 3, ...baz) + +> Error 1/1 + + `␊ + > 1 | foo.concat(bar, 2, 3, ...baz)␊ + | ^^^^^^ Prefer the spread operator over `Array#concat(…)`.␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 1/3: First argument is an `array`.␊ + 1 | [...foo, ...bar, 2, 3].concat(...baz)␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 2/3: First argument is not an `array`.␊ + 1 | [...foo, bar, 2, 3].concat(...baz)␊ + ␊ + --------------------------------------------------------------------------------␊ + Suggestion 3/3: Test first argument with `Array.isArray(…)`.␊ + 1 | [...foo, ...(Array.isArray(bar) ? bar : [bar]), 2, 3].concat(...baz)␊ + ` diff --git a/test/snapshots/prefer-spread.js.snap b/test/snapshots/prefer-spread.js.snap index 36a7f7fe3f968b0c95a886211df810c99b9bef3a..0ba03cf4617451cff3bfc7b93d29fa29b3e94491 100644 GIT binary patch literal 4084 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 literal 4082 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 kn}6(PCQtJaBMp=@O7pc|%95i{&R$*We{h