Skip to content

Commit 3cb4c9c

Browse files
committed
refactor: use selectors instead of code
1 parent 61d945f commit 3cb4c9c

File tree

7 files changed

+16
-57
lines changed

7 files changed

+16
-57
lines changed

lib/helpers/call-expression.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,4 @@ const {
1313

1414
exports.isMethod = (node, name) => "callee" in node && node.callee.type === MEMBER_EXPRESSION && node.callee.property.name === name;
1515

16-
exports.getParent = (node) => node.callee.object;
17-
1816
exports.isOnObject = (node, name) => "object" in node.callee && node.callee.object.type === IDENTIFIER && node.callee.object.name === name;

lib/type.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,3 @@
77
exports.MEMBER_EXPRESSION = "MemberExpression";
88
exports.ARROW_FUNCTION_EXPRESSION = "ArrowFunctionExpression";
99
exports.IDENTIFIER = "Identifier";
10-
exports.SPREAD_ELEMENT = "SpreadElement";

rules/avoid-reverse.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44
*/
55
"use strict";
66

7-
const {
8-
isMethod,
9-
getParent
10-
} = require("../lib/helpers/call-expression"),
7+
const { isMethod } = require("../lib/helpers/call-expression"),
118

129
REPLACEMENTS = {
1310
indexOf: "lastIndexOf",
@@ -27,16 +24,12 @@ module.exports = {
2724
},
2825
create(context) {
2926
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;
3130
if(Object.keys(REPLACEMENTS).every((m) => !isMethod(node, m))) {
3231
return;
3332
}
34-
35-
const parent = getParent(node);
36-
if(!isMethod(parent, 'reverse')) {
37-
return;
38-
}
39-
4033
const reversed = REPLACEMENTS[node.callee.property.name];
4134

4235
context.report({

rules/from-map.js

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@
44
*/
55
"use strict";
66

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");
138

149
module.exports = {
1510
meta: {
@@ -22,16 +17,10 @@ module.exports = {
2217
},
2318
create(context) {
2419
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;
3524

3625
context.report({
3726
node: callee.property,

rules/prefer-array-from.js

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
*/
55
"use strict";
66

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+
};
1411

1512
module.exports = {
1613
meta: {
@@ -23,13 +20,10 @@ module.exports = {
2320
},
2421
create(context) {
2522
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;
3025
context.report({
3126
node,
32-
loc: node.loc,
3327
message: "Use Array.from to convert from iterable to array",
3428
fix(fixer) {
3529
const sourceCode = context.getSourceCode();

test/helpers-call-expression.js

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import test from 'ava';
22
import {
3-
isMethod, getParent, isOnObject
3+
isMethod, isOnObject
44
} from '../lib/helpers/call-expression';
55
import {
66
MEMBER_EXPRESSION, IDENTIFIER
@@ -39,15 +39,6 @@ test('not is method', (t) => {
3939
}));
4040
});
4141

42-
test('get parent', (t) => {
43-
const parent = 'foo';
44-
t.is(getParent({
45-
callee: {
46-
object: parent
47-
}
48-
}), parent);
49-
});
50-
5142
test('is on object', (t) => {
5243
const name = 'test';
5344
t.true(isOnObject({

test/type.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
import test from 'ava';
22
import {
3-
SPREAD_ELEMENT,
43
ARROW_FUNCTION_EXPRESSION,
54
MEMBER_EXPRESSION,
65
IDENTIFIER
76
} from '../lib/type';
87

9-
test('Spread element', (t) => {
10-
t.is(SPREAD_ELEMENT, "SpreadElement");
11-
});
12-
138
test('Arrow function expression', (t) => {
149
t.is(ARROW_FUNCTION_EXPRESSION, "ArrowFunctionExpression");
1510
});

0 commit comments

Comments
 (0)