Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c019113

Browse files
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-
constfirstElement=(arr)=>{
10-
const[el]=arr;
11-
returnel;
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)

AltStyle によって変換されたページ (->オリジナル) /