Skip to content

Commit c019113

Browse files
authored
fix: Additional checks for prefer-flat (#46)
* fix: Additional checks prefer-flat * fix: Additional checks prefer-flat * fix: Additional checks prefer-flat
1 parent 2133139 commit c019113

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

rules/prefer-flat.js

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66

77
//TODO no works.
88

9-
const firstElement = (arr) => {
10-
const [ el ] = arr;
11-
return el;
12-
},
13-
SECOND = 1;
9+
const
10+
firstElement = ([ first ]) => first,
11+
secondElement = ([
12+
, second
13+
]) => second;
1414

1515
module.exports = {
1616
meta: {
@@ -36,10 +36,15 @@ module.exports = {
3636
}
3737
});
3838
},
39-
'CallExpression[callee.type="MemberExpression"][callee.property.name="reduce"] > *:function > CallExpression[callee.type="MemberExpression"][callee.property.name="concat"]'(node) {
40-
if(node.parent.parent.arguments.length > SECOND && node.parent.parent.arguments[SECOND].type === "ArrayExpression" &&
41-
firstElement(node.arguments).name === node.parent.params[SECOND].name &&
42-
node.callee.object.name === firstElement(node.parent.params).name) {
39+
'CallExpression[callee.type="MemberExpression"][callee.property.name="reduce"][arguments.length=2][arguments.1.type=ArrayExpression][arguments.1.elements.length=0] > *:function[params.length=2][params.0.type=Identifier][params.1.type=Identifier] > CallExpression[callee.type="MemberExpression"][callee.property.name="concat"][arguments.length=1][arguments.0.type=Identifier]'(node) {
40+
const reduceCallbackParams = node.parent.params;
41+
42+
// arr.reducer((a, b) => a.concat(b), [])
43+
// "concat" function must be called on "a" and concat argument must be "b".
44+
if(
45+
firstElement(node.arguments).name === secondElement(reduceCallbackParams).name &&
46+
node.callee.object.name === firstElement(reduceCallbackParams).name
47+
) {
4348
context.report({
4449
node: node.parent.parent,
4550
message: "Use flat to flatten an array",

test/rules/prefer-flat.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ ruleTester.run('prefer-flat', rule, {
1212
valid: [
1313
'array.flat()',
1414
'array.reduce((p, n) => n.concat(p), [])',
15-
'array.reduce((p, n) => n + p, 0)'
15+
'array.reduce((p, n) => n + p, 0)',
16+
'array.reduce((p, []) => p.concat({}), [])',
17+
'array.reduce((p, n) => p.concat(n), [1])',
18+
'array.reduce((p, n) => p.concat(n))',
19+
'array.reduce((p, n) => p.concat(n, n), [])'
1620
],
1721
invalid: [
1822
{

0 commit comments

Comments
 (0)