Skip to content

Commit b69abae

Browse files
author
Roy Sutton
committed
Update for Node 4
Enact-DCO-1.0-Signed-off-by: Roy Sutton [email protected]
1 parent 0b2c3e2 commit b69abae

File tree

1 file changed

+43
-50
lines changed

1 file changed

+43
-50
lines changed

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

Lines changed: 43 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55
*/
66
'use strict';
77

8-
var has = require('has');
9-
var find = require('array.prototype.find');
10-
var Components = require('../util/Components');
11-
var variableUtil = require('../util/variable');
12-
var annotations = require('../util/annotations');
8+
const has = require('has');
9+
const Components = require('../util/Components');
10+
const variableUtil = require('../util/variable');
11+
const annotations = require('../util/annotations');
1312

1413
// ------------------------------------------------------------------------------
1514
// Rule Definition
@@ -36,8 +35,8 @@ module.exports = {
3635

3736
create: Components.detect(function(context, components, utils) {
3837

39-
var configuration = context.options[0] || {};
40-
var allowRequiredDefaults = configuration.allowRequiredDefaults || false;
38+
const configuration = context.options[0] || {};
39+
const allowRequiredDefaults = configuration.allowRequiredDefaults || false;
4140

4241
/**
4342
* Get properties name
@@ -52,7 +51,7 @@ module.exports = {
5251
// Special case for class properties
5352
// (babel-eslint@5 does not expose property name so we have to rely on tokens)
5453
} else if (node.type === 'ClassProperty') {
55-
var tokens = context.getFirstTokens(node, 2);
54+
const tokens = context.getFirstTokens(node, 2);
5655
return tokens[1] && tokens[1].type === 'Identifier' ? tokens[1].value : tokens[0].value;
5756
}
5857
return '';
@@ -73,7 +72,7 @@ module.exports = {
7372
* @returns {Boolean} `true` if the node is a defaultProps declaration, `false` if not
7473
*/
7574
function isDefaultPropsDeclaration(node) {
76-
var propName = getPropertyName(node);
75+
const propName = getPropertyName(node);
7776
return (propName === 'defaultProps' || propName === 'getDefaultProps');
7877
}
7978

@@ -92,9 +91,7 @@ module.exports = {
9291
* @returns {ASTNode|null} Return null if the variable could not be found, ASTNode otherwise.
9392
*/
9493
function findVariableByName(name) {
95-
var variable = find(variableUtil.variablesInScope(context), function(item) {
96-
return item.name === name;
97-
});
94+
const variable = variableUtil.variablesInScope(context).find((item) => item.name === name);
9895

9996
if (!variable || !variable.defs[0] || !variable.defs[0].node) {
10097
return null;
@@ -151,7 +148,7 @@ module.exports = {
151148
* @returns {Object[]} Array of PropType object representations, to be consumed by `addPropTypesToComponent`.
152149
*/
153150
function getPropTypesFromObjectExpression(objectExpression) {
154-
var props = objectExpression.properties.filter(function(property) {
151+
const props = objectExpression.properties.filter(function(property) {
155152
return property.type !== 'ExperimentalSpreadProperty';
156153
});
157154

@@ -170,11 +167,11 @@ module.exports = {
170167
* @returns {Object[]} Array of PropType object representations, to be consumed by `addPropTypesToComponent`.
171168
*/
172169
function getPropTypesFromTypeAnnotation(node) {
173-
var properties;
170+
let properties;
174171

175172
switch (node.typeAnnotation.type) {
176173
case 'GenericTypeAnnotation':
177-
var annotation = resolveGenericTypeAnnotation(node.typeAnnotation);
174+
let annotation = resolveGenericTypeAnnotation(node.typeAnnotation);
178175

179176
if (annotation && annotation.id) {
180177
annotation = findVariableByName(annotation.id.name);
@@ -184,7 +181,7 @@ module.exports = {
184181
break;
185182

186183
case 'UnionTypeAnnotation':
187-
var union = resolveUnionTypeAnnotation(node.typeAnnotation);
184+
const union = resolveUnionTypeAnnotation(node.typeAnnotation);
188185
properties = union.reduce(function(acc, curr) {
189186
if (!curr) {
190187
return acc;
@@ -203,14 +200,14 @@ module.exports = {
203200
break;
204201
}
205202

206-
var props = properties.filter(function(property) {
203+
const props = properties.filter(function(property) {
207204
return property.type === 'ObjectTypeProperty';
208205
});
209206

210207
return props.map(function(property) {
211208
// the `key` property is not present in ObjectTypeProperty nodes, so we need to get the key name manually.
212-
var tokens = context.getFirstTokens(property, 1);
213-
var name = tokens[0].value;
209+
const tokens = context.getFirstTokens(property, 1);
210+
const name = tokens[0].value;
214211

215212
return {
216213
name: name,
@@ -228,9 +225,7 @@ module.exports = {
228225
* from this ObjectExpression can't be resolved.
229226
*/
230227
function getDefaultPropsFromObjectExpression(objectExpression) {
231-
var hasSpread = find(objectExpression.properties, function(property) {
232-
return property.type === 'ExperimentalSpreadProperty';
233-
});
228+
const hasSpread = objectExpression.properties.find(property => property.type === 'ExperimentalSpreadProperty');
234229

235230
if (hasSpread) {
236231
return 'unresolved';
@@ -264,7 +259,7 @@ module.exports = {
264259
* @returns {void}
265260
*/
266261
function addPropTypesToComponent(component, propTypes) {
267-
var props = component.propTypes || [];
262+
const props = component.propTypes || [];
268263

269264
components.set(component.node, {
270265
propTypes: props.concat(propTypes)
@@ -289,7 +284,7 @@ module.exports = {
289284
return;
290285
}
291286

292-
var defaults = component.defaultProps || [];
287+
const defaults = component.defaultProps || [];
293288

294289
components.set(component.node, {
295290
defaultProps: defaults.concat(defaultProps)
@@ -307,7 +302,7 @@ module.exports = {
307302
}
308303

309304
// find component this props annotation belongs to
310-
var component = components.get(utils.getParentStatelessComponent());
305+
const component = components.get(utils.getParentStatelessComponent());
311306
if (!component) {
312307
return;
313308
}
@@ -317,7 +312,7 @@ module.exports = {
317312

318313
function handlePropTypeAnnotationClassProperty(node) {
319314
// find component this props annotation belongs to
320-
var component = components.get(utils.getParentES6Component());
315+
const component = components.get(utils.getParentES6Component());
321316
if (!component) {
322317
return;
323318
}
@@ -330,9 +325,7 @@ module.exports = {
330325
}
331326

332327
function propFromName(propTypes, name) {
333-
return find(propTypes, function (prop) {
334-
return prop.name === name;
335-
});
328+
return propTypes.find(prop => prop.name === name);
336329
}
337330

338331
/**
@@ -350,7 +343,7 @@ module.exports = {
350343
}
351344

352345
defaultProps.forEach(function(defaultProp) {
353-
var prop = propFromName(propTypes, defaultProp.name);
346+
const prop = propFromName(propTypes, defaultProp.name);
354347

355348
if (prop && (allowRequiredDefaults || !prop.isRequired)) {
356349
return;
@@ -378,15 +371,15 @@ module.exports = {
378371

379372
return {
380373
MemberExpression: function(node) {
381-
var isPropType = isPropTypesDeclaration(node);
382-
var isDefaultProp = isDefaultPropsDeclaration(node);
374+
const isPropType = isPropTypesDeclaration(node);
375+
const isDefaultProp = isDefaultPropsDeclaration(node);
383376

384377
if (!isPropType && !isDefaultProp) {
385378
return;
386379
}
387380

388381
// find component this propTypes/defaultProps belongs to
389-
var component = utils.getRelatedComponent(node);
382+
const component = utils.getRelatedComponent(node);
390383
if (!component) {
391384
return;
392385
}
@@ -402,7 +395,7 @@ module.exports = {
402395
// MyComponent.propTypes = myPropTypes;
403396
if (node.parent.type === 'AssignmentExpression') {
404397

405-
var expression = resolveNodeValue(node.parent.right);
398+
const expression = resolveNodeValue(node.parent.right);
406399
if (!expression || expression.type !== 'ObjectExpression') {
407400
// If a value can't be found, we mark the defaultProps declaration as "unresolved", because
408401
// we should ignore this component and not report any errors for it, to avoid false-positives
@@ -466,25 +459,25 @@ module.exports = {
466459
return;
467460
}
468461

469-
var isPropType = isPropTypesDeclaration(node);
470-
var isDefaultProp = isDefaultPropsDeclaration(node);
462+
const isPropType = isPropTypesDeclaration(node);
463+
const isDefaultProp = isDefaultPropsDeclaration(node);
471464

472465
if (!isPropType && !isDefaultProp) {
473466
return;
474467
}
475468

476469
// find component this propTypes/defaultProps belongs to
477-
var component = components.get(utils.getParentES6Component());
470+
const component = components.get(utils.getParentES6Component());
478471
if (!component) {
479472
return;
480473
}
481474

482-
var returnStatement = utils.findReturnStatement(node);
475+
const returnStatement = utils.findReturnStatement(node);
483476
if (!returnStatement) {
484477
return;
485478
}
486479

487-
var expression = resolveNodeValue(returnStatement.argument);
480+
const expression = resolveNodeValue(returnStatement.argument);
488481
if (!expression || expression.type !== 'ObjectExpression') {
489482
return;
490483
}
@@ -522,21 +515,21 @@ module.exports = {
522515
return;
523516
}
524517

525-
var propName = getPropertyName(node);
526-
var isPropType = propName === 'propTypes';
527-
var isDefaultProp = propName === 'defaultProps' || propName === 'getDefaultProps';
518+
const propName = getPropertyName(node);
519+
const isPropType = propName === 'propTypes';
520+
const isDefaultProp = propName === 'defaultProps' || propName === 'getDefaultProps';
528521

529522
if (!isPropType && !isDefaultProp) {
530523
return;
531524
}
532525

533526
// find component this propTypes/defaultProps belongs to
534-
var component = components.get(utils.getParentES6Component());
527+
const component = components.get(utils.getParentES6Component());
535528
if (!component) {
536529
return;
537530
}
538531

539-
var expression = resolveNodeValue(node.value);
532+
const expression = resolveNodeValue(node.value);
540533
if (!expression || expression.type !== 'ObjectExpression') {
541534
return;
542535
}
@@ -564,7 +557,7 @@ module.exports = {
564557
// });
565558
ObjectExpression: function(node) {
566559
// find component this propTypes/defaultProps belongs to
567-
var component = utils.isES5Component(node) && components.get(node);
560+
const component = utils.isES5Component(node) && components.get(node);
568561
if (!component) {
569562
return;
570563
}
@@ -575,8 +568,8 @@ module.exports = {
575568
return;
576569
}
577570

578-
var isPropType = isPropTypesDeclaration(property);
579-
var isDefaultProp = isDefaultPropsDeclaration(property);
571+
const isPropType = isPropTypesDeclaration(property);
572+
const isDefaultProp = isDefaultPropsDeclaration(property);
580573

581574
if (!isPropType && !isDefaultProp) {
582575
return;
@@ -588,7 +581,7 @@ module.exports = {
588581
}
589582

590583
if (isDefaultProp && property.value.type === 'FunctionExpression') {
591-
var returnStatement = utils.findReturnStatement(property);
584+
const returnStatement = utils.findReturnStatement(property);
592585
if (!returnStatement || returnStatement.argument.type !== 'ObjectExpression') {
593586
return;
594587
}
@@ -604,9 +597,9 @@ module.exports = {
604597
FunctionExpression: handleStatelessComponent,
605598

606599
'Program:exit': function() {
607-
var list = components.list();
600+
const list = components.list();
608601

609-
for (var component in list) {
602+
for (let component in list) {
610603
if (!has(list, component)) {
611604
continue;
612605
}

0 commit comments

Comments
 (0)