From 36574609a41fdf1ec93384e4e117af6b9da3e727 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 14 Jul 2022 19:02:23 +0800 Subject: [PATCH 1/3] `prefer-spread`: Ignore `Array#join().concat()` and `(a + b).concat()` --- rules/prefer-spread.js | 33 ++++++++++++++++++-------- test/prefer-spread.mjs | 7 ++++++ test/snapshots/prefer-spread.mjs.md | 16 +++++++++++++ test/snapshots/prefer-spread.mjs.snap | Bin 7203 -> 7259 bytes 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/rules/prefer-spread.js b/rules/prefer-spread.js index 53a8a3416b..70cc4a2731 100644 --- a/rules/prefer-spread.js +++ b/rules/prefer-spread.js @@ -11,6 +11,7 @@ const { removeMethodCall, } = require('./fix/index.js'); const {isLiteral} = require('./ast/index.js'); +const isMethodNamed = require('./utils/is-method-named.js'); const ERROR_ARRAY_FROM = 'array-from'; const ERROR_ARRAY_CONCAT = 'array-concat'; @@ -44,15 +45,7 @@ const arrayFromCallSelector = [ '[arguments.0.type!="ObjectExpression"]', ].join(''); -const arrayConcatCallSelector = [ - methodCallSelector('concat'), - not( - [ - 'Literal', - 'TemplateLiteral', - ].map(type => `[callee.object.type="${type}"]`), - ), -].join(''); +const arrayConcatCallSelector = methodCallSelector('concat'); const arraySliceCallSelector = [ methodCallSelector({ @@ -320,6 +313,26 @@ function isClassName(node) { return /^[A-Z]./.test(name) && name.toUpperCase() !== name; } +function isNotArray(node, scope) { + if ( + node.type === 'TemplateLiteral' + || node.type === 'Literal' + || node.type === 'BinaryExpression' + || isClassName(node) + // `foo.join()` + || (isMethodNamed(node, 'join') && node.arguments.length <= 1) + ) { + return true; + } + + const staticValue = getStaticValue(node, scope); + if (staticValue && !Array.isArray(staticValue.value)) { + return true; + } + + return false; +} + /** @param {import('eslint').Rule.RuleContext} context */ const create = context => { const sourceCode = context.getSourceCode(); @@ -335,7 +348,7 @@ const create = context => { [arrayConcatCallSelector](node) { const {object} = node.callee; - if (isClassName(object)) { + if (isNotArray(object, context.getScope())) { return; } diff --git a/test/prefer-spread.mjs b/test/prefer-spread.mjs index 6fd0816a79..036f87cd46 100644 --- a/test/prefer-spread.mjs +++ b/test/prefer-spread.mjs @@ -180,6 +180,11 @@ test.snapshot({ 'Foo.concat(1)', 'FooBar.concat(1)', 'global.Buffer.concat([])', + // #1809 + '["1", "2"].join(",").concat("...")', + 'foo.join(",").concat("...")', + 'foo.join().concat(bar)', + '(a + b).concat(c)', ], invalid: [ '[1].concat(2)', @@ -288,6 +293,8 @@ test.snapshot({ const baz = [2]; call(foo, ...[bar].concat(baz)); `, + // This not considered `Array#join()` since there are more than one arguments + 'foo.join(foo, bar).concat("...")', ], }); diff --git a/test/snapshots/prefer-spread.mjs.md b/test/snapshots/prefer-spread.mjs.md index 9cef52beb0..984d0ab21b 100644 --- a/test/snapshots/prefer-spread.mjs.md +++ b/test/snapshots/prefer-spread.mjs.md @@ -2034,6 +2034,22 @@ Generated by [AVA](https://avajs.dev). | ^^^^^^ Prefer the spread operator over \`Array#concat(…)\`.␊ ` +## Invalid #68 + 1 | foo.join(foo, bar).concat("...") + +> Output + + `␊ + 1 | [...foo.join(foo, bar), "..."]␊ + ` + +> Error 1/1 + + `␊ + > 1 | foo.join(foo, bar).concat("...")␊ + | ^^^^^^ Prefer the spread operator over \`Array#concat(…)\`.␊ + ` + ## Invalid #1 1 | array.slice() diff --git a/test/snapshots/prefer-spread.mjs.snap b/test/snapshots/prefer-spread.mjs.snap index c8103015ae3f17a4e60fefbe840e88ecd06d7c0b..3d06834a1a6b01a286b3c4a4b59eb4712c61a0f8 100644 GIT binary patch literal 7259 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 literal 7203 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 l#uuvW#G8%R0nzPYZ#0QFaj(007sY`Yr$f From b7fd2e435f04d80c094aa9490f366a48aa9ea2c0 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 14 Jul 2022 19:08:21 +0800 Subject: [PATCH 2/3] Typo --- test/prefer-spread.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/prefer-spread.mjs b/test/prefer-spread.mjs index 036f87cd46..e98ef2500e 100644 --- a/test/prefer-spread.mjs +++ b/test/prefer-spread.mjs @@ -293,7 +293,7 @@ test.snapshot({ const baz = [2]; call(foo, ...[bar].concat(baz)); `, - // This not considered `Array#join()` since there are more than one arguments + // This not considered `Array#join()` since there are more than one argument 'foo.join(foo, bar).concat("...")', ], }); From 795fa3bacd65acc8217a3db92b2b6f52425c45cd Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 14 Jul 2022 19:19:57 +0800 Subject: [PATCH 3/3] Linting --- rules/prefer-spread.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/prefer-spread.js b/rules/prefer-spread.js index 70cc4a2731..1436ee23bf 100644 --- a/rules/prefer-spread.js +++ b/rules/prefer-spread.js @@ -1,6 +1,6 @@ 'use strict'; const {isParenthesized, getStaticValue, isCommaToken, hasSideEffect} = require('eslint-utils'); -const {methodCallSelector, not} = require('./selectors/index.js'); +const {methodCallSelector} = require('./selectors/index.js'); const needsSemicolon = require('./utils/needs-semicolon.js'); const {getParenthesizedRange, getParenthesizedText} = require('./utils/parentheses.js'); const shouldAddParenthesesToSpreadElementArgument = require('./utils/should-add-parentheses-to-spread-element-argument.js');