File tree Expand file tree Collapse file tree 7 files changed +16
-57
lines changed Expand file tree Collapse file tree 7 files changed +16
-57
lines changed Original file line number Diff line number Diff line change @@ -13,6 +13,4 @@ const {
13
13
14
14
exports . isMethod = ( node , name ) => "callee" in node && node . callee . type === MEMBER_EXPRESSION && node . callee . property . name === name ;
15
15
16
- exports . getParent = ( node ) => node . callee . object ;
17
-
18
16
exports . isOnObject = ( node , name ) => "object" in node . callee && node . callee . object . type === IDENTIFIER && node . callee . object . name === name ;
Original file line number Diff line number Diff line change 7
7
exports . MEMBER_EXPRESSION = "MemberExpression" ;
8
8
exports . ARROW_FUNCTION_EXPRESSION = "ArrowFunctionExpression" ;
9
9
exports . IDENTIFIER = "Identifier" ;
10
- exports . SPREAD_ELEMENT = "SpreadElement" ;
Original file line number Diff line number Diff line change 4
4
*/
5
5
"use strict" ;
6
6
7
- const {
8
- isMethod,
9
- getParent
10
- } = require ( "../lib/helpers/call-expression" ) ,
7
+ const { isMethod } = require ( "../lib/helpers/call-expression" ) ,
11
8
12
9
REPLACEMENTS = {
13
10
indexOf : "lastIndexOf" ,
@@ -27,16 +24,12 @@ module.exports = {
27
24
} ,
28
25
create ( context ) {
29
26
return {
30
- "CallExpression:exit" ( node ) {
27
+ 'CallExpression[callee.type="MemberExpression"] > MemberExpression > CallExpression[callee.property.name="reverse"]' ( node ) {
28
+ const parent = node ;
29
+ node = parent . parent . parent ;
31
30
if ( Object . keys ( REPLACEMENTS ) . every ( ( m ) => ! isMethod ( node , m ) ) ) {
32
31
return ;
33
32
}
34
-
35
- const parent = getParent ( node ) ;
36
- if ( ! isMethod ( parent , 'reverse' ) ) {
37
- return ;
38
- }
39
-
40
33
const reversed = REPLACEMENTS [ node . callee . property . name ] ;
41
34
42
35
context . report ( {
Original file line number Diff line number Diff line change 4
4
*/
5
5
"use strict" ;
6
6
7
- const {
8
- isMethod,
9
- getParent,
10
- isOnObject
11
- } = require ( "../lib/helpers/call-expression" ) ,
12
- { ARROW_FUNCTION_EXPRESSION } = require ( "../lib/type" ) ;
7
+ const { ARROW_FUNCTION_EXPRESSION } = require ( "../lib/type" ) ;
13
8
14
9
module . exports = {
15
10
meta : {
@@ -22,16 +17,10 @@ module.exports = {
22
17
} ,
23
18
create ( context ) {
24
19
return {
25
- "CallExpression:exit" ( node ) {
26
- if ( ! isMethod ( node , "map" ) ) {
27
- return ;
28
- }
29
- const { callee } = node ,
30
- parent = getParent ( node ) ;
31
-
32
- if ( ! isMethod ( parent , "from" ) || ! isOnObject ( parent , "Array" ) ) {
33
- return ;
34
- }
20
+ 'CallExpression[callee.type="MemberExpression"] > MemberExpression[property.name="map"] > CallExpression[callee.type="MemberExpression"][callee.property.name="from"][callee.object.type="Identifier"][callee.object.name="Array"]' ( node ) {
21
+ const parent = node ,
22
+ callee = node . parent ;
23
+ node = callee . parent ;
35
24
36
25
context . report ( {
37
26
node : callee . property ,
Original file line number Diff line number Diff line change 4
4
*/
5
5
"use strict" ;
6
6
7
- const { SPREAD_ELEMENT } = require ( "../lib/type" ) ,
8
-
9
- SINGLE_ELEMENT = 1 ,
10
- firstElement = ( arr ) => {
11
- const [ el ] = arr ;
12
- return el ;
13
- } ;
7
+ const firstElement = ( arr ) => {
8
+ const [ el ] = arr ;
9
+ return el ;
10
+ } ;
14
11
15
12
module . exports = {
16
13
meta : {
@@ -23,13 +20,10 @@ module.exports = {
23
20
} ,
24
21
create ( context ) {
25
22
return {
26
- "ArrayExpression:exit" ( node ) {
27
- if ( node . elements . length !== SINGLE_ELEMENT || firstElement ( node . elements ) . type !== SPREAD_ELEMENT ) {
28
- return ;
29
- }
23
+ "ArrayExpression > SpreadElement:first-child:last-child" ( node ) {
24
+ node = node . parent ;
30
25
context . report ( {
31
26
node,
32
- loc : node . loc ,
33
27
message : "Use Array.from to convert from iterable to array" ,
34
28
fix ( fixer ) {
35
29
const sourceCode = context . getSourceCode ( ) ;
Original file line number Diff line number Diff line change 1
1
import test from 'ava' ;
2
2
import {
3
- isMethod , getParent , isOnObject
3
+ isMethod , isOnObject
4
4
} from '../lib/helpers/call-expression' ;
5
5
import {
6
6
MEMBER_EXPRESSION , IDENTIFIER
@@ -39,15 +39,6 @@ test('not is method', (t) => {
39
39
} ) ) ;
40
40
} ) ;
41
41
42
- test ( 'get parent' , ( t ) => {
43
- const parent = 'foo' ;
44
- t . is ( getParent ( {
45
- callee : {
46
- object : parent
47
- }
48
- } ) , parent ) ;
49
- } ) ;
50
-
51
42
test ( 'is on object' , ( t ) => {
52
43
const name = 'test' ;
53
44
t . true ( isOnObject ( {
Original file line number Diff line number Diff line change 1
1
import test from 'ava' ;
2
2
import {
3
- SPREAD_ELEMENT ,
4
3
ARROW_FUNCTION_EXPRESSION ,
5
4
MEMBER_EXPRESSION ,
6
5
IDENTIFIER
7
6
} from '../lib/type' ;
8
7
9
- test ( 'Spread element' , ( t ) => {
10
- t . is ( SPREAD_ELEMENT , "SpreadElement" ) ;
11
- } ) ;
12
-
13
8
test ( 'Arrow function expression' , ( t ) => {
14
9
t . is ( ARROW_FUNCTION_EXPRESSION , "ArrowFunctionExpression" ) ;
15
10
} ) ;
You can’t perform that action at this time.
0 commit comments