Skip to content

Commit 8f81fee

Browse files
authored
Refactor prefer-node-remove with selector (#517)
1 parent d2fbee0 commit 8f81fee

File tree

2 files changed

+20
-23
lines changed

2 files changed

+20
-23
lines changed

rules/prefer-node-remove.js

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
'use strict';
22
const getDocumentationUrl = require('./utils/get-documentation-url');
33
const isValueNotUsable = require('./utils/is-value-not-usable');
4+
const methodSelector = require('./utils/method-selector');
45

5-
const getMethodName = callee => {
6-
const {property} = callee;
7-
8-
if (property.type === 'Identifier') {
9-
return property.name;
10-
}
11-
12-
return null;
13-
};
6+
const selector = methodSelector({
7+
name: 'removeChild',
8+
length: 1
9+
});
1410

1511
const getCallerName = callee => {
1612
const {object} = callee;
@@ -46,22 +42,12 @@ const getArgumentName = arguments_ => {
4642

4743
const create = context => {
4844
return {
49-
CallExpression(node) {
45+
[selector](node) {
5046
const {callee} = node;
5147

52-
if (
53-
node.arguments.length === 0 ||
54-
callee.type !== 'MemberExpression' ||
55-
callee.computed
56-
) {
57-
return;
58-
}
59-
60-
const methodName = getMethodName(callee);
6148
const callerName = getCallerName(callee);
6249

6350
if (
64-
methodName === 'removeChild' &&
6551
(callerName === 'parentNode' || callerName === 'parentElement')
6652
) {
6753
const argumentName = getArgumentName(node.arguments);

test/prefer-node-remove.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,20 @@ ruleTester.run('prefer-node-remove', rule, {
2626
'this.remove()',
2727
'remove()',
2828
'foo.parentNode.removeChild(\'bar\')',
29-
'foo.parentNode[\'bar\'](foo)',
30-
'foo.parentNode[removeChild](foo)',
31-
'foo.parentNode.removeChild()'
29+
// Not `CallExpression`
30+
'new foo.parentNode.removeChild(foo);',
31+
// Not `MemberExpression`
32+
'removeChild(foo);',
33+
// `callee.property` is not a `Identifier`
34+
'foo.parentNode[\'removeChild\'](foo);',
35+
// Computed
36+
'foo.parentNode[removeChild](foo);',
37+
// Not `removeChild`
38+
'foo.parentNode.foo(foo);',
39+
// More or less argument(s)
40+
'foo.parentNode.removeChild(foo, two);',
41+
'foo.parentNode.removeChild();',
42+
'foo.parentNode.removeChild(...argumentsArray)'
3243
],
3344
invalid: [
3445
invalidTestCase(

0 commit comments

Comments
 (0)