Skip to content

Commit 1b83214

Browse files
committed
Move duplicated getPropertyName to util function
1 parent 4e21d41 commit 1b83214

7 files changed

+44
-82
lines changed

lib/rules/default-props-match-prop-types.js

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const has = require('has');
99
const Components = require('../util/Components');
1010
const variableUtil = require('../util/variable');
1111
const annotations = require('../util/annotations');
12+
const astUtil = require('../util/ast');
1213

1314
// ------------------------------------------------------------------------------
1415
// Rule Definition
@@ -38,27 +39,13 @@ module.exports = {
3839
const allowRequiredDefaults = configuration.allowRequiredDefaults || false;
3940
const propWrapperFunctions = new Set(context.settings.propWrapperFunctions || []);
4041

41-
/**
42-
* Get properties name
43-
* @param {Object} node - Property.
44-
* @returns {String} Property name.
45-
*/
46-
function getPropertyName(node) {
47-
if (node.key || ['MethodDefinition', 'Property'].indexOf(node.type) !== -1) {
48-
return node.key.name;
49-
} else if (node.type === 'MemberExpression') {
50-
return node.property.name;
51-
}
52-
return '';
53-
}
54-
5542
/**
5643
* Checks if the Identifier node passed in looks like a propTypes declaration.
5744
* @param {ASTNode} node The node to check. Must be an Identifier node.
5845
* @returns {Boolean} `true` if the node is a propTypes declaration, `false` if not
5946
*/
6047
function isPropTypesDeclaration(node) {
61-
return getPropertyName(node) === 'propTypes';
48+
return astUtil.getPropertyName(node) === 'propTypes';
6249
}
6350

6451
/**
@@ -67,7 +54,7 @@ module.exports = {
6754
* @returns {Boolean} `true` if the node is a defaultProps declaration, `false` if not
6855
*/
6956
function isDefaultPropsDeclaration(node) {
70-
const propName = getPropertyName(node);
57+
const propName = astUtil.getPropertyName(node);
7158
return (propName === 'defaultProps' || propName === 'getDefaultProps');
7259
}
7360

@@ -336,7 +323,7 @@ module.exports = {
336323
}
337324

338325
function isPropTypeAnnotation(node) {
339-
return (getPropertyName(node) === 'props' && !!node.typeAnnotation);
326+
return (astUtil.getPropertyName(node) === 'props' && !!node.typeAnnotation);
340327
}
341328

342329
function propFromName(propTypes, name) {
@@ -528,7 +515,7 @@ module.exports = {
528515
return;
529516
}
530517

531-
const propName = getPropertyName(node);
518+
const propName = astUtil.getPropertyName(node);
532519
const isPropType = propName === 'propTypes';
533520
const isDefaultProp = propName === 'defaultProps' || propName === 'getDefaultProps';
534521

lib/rules/no-redundant-should-component-update.js

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
'use strict';
55

66
const Components = require('../util/Components');
7+
const astUtil = require('../util/ast');
78

89
function errorMessage(node) {
910
return `${node} does not need shouldComponentUpdate when extending React.PureComponent.`;
@@ -24,18 +25,6 @@ module.exports = {
2425
},
2526

2627
create: Components.detect((context, components, utils) => {
27-
/**
28-
* Get properties name
29-
* @param {Object} node - Property.
30-
* @returns {String} Property name.
31-
*/
32-
function getPropertyName(node) {
33-
if (node.key) {
34-
return node.key.name;
35-
}
36-
return '';
37-
}
38-
3928
/**
4029
* Get properties for a given AST node
4130
* @param {ASTNode} node The AST node being checked.
@@ -59,7 +48,7 @@ module.exports = {
5948
function hasShouldComponentUpdate(node) {
6049
const properties = getComponentProperties(node);
6150
return properties.some(property => {
62-
const name = getPropertyName(property);
51+
const name = astUtil.getPropertyName(property);
6352
return name === 'shouldComponentUpdate';
6453
});
6554
}

lib/rules/prefer-stateless-function.js

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
const has = require('has');
1010
const Components = require('../util/Components');
1111
const versionUtil = require('../util/version');
12+
const astUtil = require('../util/ast');
1213

1314
// ------------------------------------------------------------------------------
1415
// Rule Definition
@@ -43,15 +44,6 @@ module.exports = {
4344
// Public
4445
// --------------------------------------------------------------------------
4546

46-
/**
47-
* Get properties name
48-
* @param {Object} node - Property.
49-
* @returns {String} Property name.
50-
*/
51-
function getPropertyName(node) {
52-
return node.key.name;
53-
}
54-
5547
/**
5648
* Get properties for a given AST node
5749
* @param {ASTNode} node The AST node being checked.
@@ -205,7 +197,7 @@ module.exports = {
205197
function hasOtherProperties(node) {
206198
const properties = getComponentProperties(node);
207199
return properties.some(property => {
208-
const name = getPropertyName(property);
200+
const name = astUtil.getPropertyName(property);
209201
const isDisplayName = name === 'displayName';
210202
const isPropTypes = name === 'propTypes' || name === 'props' && property.typeAnnotation;
211203
const contextTypes = name === 'contextTypes';
@@ -311,7 +303,7 @@ module.exports = {
311303
}
312304
// Ignore `props` and `context`
313305
const useThis = node.id.properties.some(property => {
314-
const name = getPropertyName(property);
306+
const name = astUtil.getPropertyName(property);
315307
return name !== 'props' && name !== 'context';
316308
});
317309
if (!useThis) {

lib/rules/require-default-props.js

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const has = require('has');
88
const Components = require('../util/Components');
99
const variableUtil = require('../util/variable');
1010
const annotations = require('../util/annotations');
11+
const astUtil = require('../util/ast');
1112

1213
const QUOTES_REGEX = /^["']|["']$/g;
1314

@@ -29,27 +30,13 @@ module.exports = {
2930
const sourceCode = context.getSourceCode();
3031
const propWrapperFunctions = new Set(context.settings.propWrapperFunctions || []);
3132

32-
/**
33-
* Get properties name
34-
* @param {Object} node - Property.
35-
* @returns {String} Property name.
36-
*/
37-
function getPropertyName(node) {
38-
if (node.key || ['MethodDefinition', 'Property'].indexOf(node.type) !== -1) {
39-
return node.key.name;
40-
} else if (node.type === 'MemberExpression') {
41-
return node.property.name;
42-
}
43-
return '';
44-
}
45-
4633
/**
4734
* Checks if the Identifier node passed in looks like a propTypes declaration.
4835
* @param {ASTNode} node The node to check. Must be an Identifier node.
4936
* @returns {Boolean} `true` if the node is a propTypes declaration, `false` if not
5037
*/
5138
function isPropTypesDeclaration(node) {
52-
return getPropertyName(node) === 'propTypes';
39+
return astUtil.getPropertyName(node) === 'propTypes';
5340
}
5441

5542
/**
@@ -58,7 +45,7 @@ module.exports = {
5845
* @returns {Boolean} `true` if the node is a defaultProps declaration, `false` if not
5946
*/
6047
function isDefaultPropsDeclaration(node) {
61-
return (getPropertyName(node) === 'defaultProps' || getPropertyName(node) === 'getDefaultProps');
48+
return (astUtil.getPropertyName(node) === 'defaultProps' || astUtil.getPropertyName(node) === 'getDefaultProps');
6249
}
6350

6451
/**
@@ -306,7 +293,7 @@ module.exports = {
306293
}
307294

308295
function isPropTypeAnnotation(node) {
309-
return (getPropertyName(node) === 'props' && !!node.typeAnnotation);
296+
return (astUtil.getPropertyName(node) === 'props' && !!node.typeAnnotation);
310297
}
311298

312299
/**
@@ -483,8 +470,8 @@ module.exports = {
483470
return;
484471
}
485472

486-
const isPropType = getPropertyName(node) === 'propTypes';
487-
const isDefaultProp = getPropertyName(node) === 'defaultProps' || getPropertyName(node) === 'getDefaultProps';
473+
const isPropType = astUtil.getPropertyName(node) === 'propTypes';
474+
const isDefaultProp = astUtil.getPropertyName(node) === 'defaultProps' || astUtil.getPropertyName(node) === 'getDefaultProps';
488475

489476
if (!isPropType && !isDefaultProp) {
490477
return;

lib/rules/require-render-return.js

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
const has = require('has');
88
const Components = require('../util/Components');
9+
const astUtil = require('../util/ast');
910

1011
// ------------------------------------------------------------------------------
1112
// Rule Definition
@@ -48,23 +49,6 @@ module.exports = {
4849
}
4950
}
5051

51-
/**
52-
* Get properties name
53-
* @param {Object} node - Property.
54-
* @returns {String} Property name.
55-
*/
56-
function getPropertyName(node) {
57-
// Special case for class properties
58-
// (babel-eslint does not expose property name so we have to rely on tokens)
59-
if (node.type === 'ClassProperty') {
60-
const tokens = context.getFirstTokens(node, 2);
61-
return tokens[1] && tokens[1].type === 'Identifier' ? tokens[1].value : tokens[0].value;
62-
} else if (['MethodDefinition', 'Property'].indexOf(node.type) !== -1) {
63-
return node.key.name;
64-
}
65-
return '';
66-
}
67-
6852
/**
6953
* Check if a given AST node has a render method
7054
* @param {ASTNode} node The AST node being checked.
@@ -73,7 +57,7 @@ module.exports = {
7357
function hasRenderMethod(node) {
7458
const properties = getComponentProperties(node);
7559
for (let i = 0, j = properties.length; i < j; i++) {
76-
if (getPropertyName(properties[i]) !== 'render' || !properties[i].value) {
60+
if (astUtil.getPropertyName(properties[i]) !== 'render' || !properties[i].value) {
7761
continue;
7862
}
7963
return /FunctionExpression$/.test(properties[i].value.type);
@@ -91,7 +75,7 @@ module.exports = {
9175
}
9276
if (
9377
!/(MethodDefinition|(Class)?Property)$/.test(ancestors[i].type) ||
94-
getPropertyName(ancestors[i]) !== 'render' ||
78+
astUtil.getPropertyName(ancestors[i]) !== 'render' ||
9579
depth > 1
9680
) {
9781
continue;
@@ -101,7 +85,7 @@ module.exports = {
10185
},
10286

10387
ArrowFunctionExpression: function(node) {
104-
if (node.expression === false || getPropertyName(node.parent) !== 'render') {
88+
if (node.expression === false || astUtil.getPropertyName(node.parent) !== 'render') {
10589
return;
10690
}
10791
markReturnStatementPresent(node);

lib/rules/sort-comp.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const has = require('has');
88
const util = require('util');
99

1010
const Components = require('../util/Components');
11+
const astUtil = require('../util/ast');
1112

1213
/**
1314
* Get the methods order from the default config and the user config
@@ -203,7 +204,7 @@ module.exports = {
203204
return 'setter functions';
204205
}
205206

206-
return node.key.name;
207+
return astUtil.getPropertyName(node);
207208
}
208209

209210
/**

lib/util/ast.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @fileoverview Utility functions for AST
3+
*/
4+
'use strict';
5+
6+
/**
7+
* Get properties name
8+
* @param {Object} node - Property.
9+
* @returns {String} Property name.
10+
*/
11+
function getPropertyName(node) {
12+
if (node.key || ['MethodDefinition', 'Property'].indexOf(node.type) !== -1) {
13+
return node.key.name;
14+
} else if (node.type === 'MemberExpression') {
15+
return node.property.name;
16+
}
17+
return '';
18+
}
19+
20+
module.exports = {
21+
getPropertyName: getPropertyName
22+
};

0 commit comments

Comments
 (0)