6
6
7
7
//TODO no works.
8
8
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 ;
14
14
15
15
module . exports = {
16
16
meta : {
@@ -36,10 +36,15 @@ module.exports = {
36
36
}
37
37
} ) ;
38
38
} ,
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
+ ) {
43
48
context . report ( {
44
49
node : node . parent . parent ,
45
50
message : "Use flat to flatten an array" ,
0 commit comments