@@ -200,39 +200,6 @@ module.exports = {
200
200
} ) ;
201
201
}
202
202
203
- /**
204
- * Extracts a DefaultProp from an ObjectExpression node.
205
- * @param {ASTNode } objectExpression ObjectExpression node.
206
- * @returns {Object|string } Object representation of a defaultProp, to be consumed by
207
- * `addDefaultPropsToComponent`, or string "unresolved", if the defaultProps
208
- * from this ObjectExpression can't be resolved.
209
- */
210
- function getDefaultPropsFromObjectExpression ( objectExpression ) {
211
- const hasSpread = objectExpression . properties . find ( property => property . type === 'ExperimentalSpreadProperty' || property . type === 'SpreadElement' ) ;
212
-
213
- if ( hasSpread ) {
214
- return 'unresolved' ;
215
- }
216
-
217
- return objectExpression . properties . map ( defaultProp => ( {
218
- name : defaultProp . key . name ,
219
- node : defaultProp
220
- } ) ) ;
221
- }
222
-
223
- /**
224
- * Marks a component's DefaultProps declaration as "unresolved". A component's DefaultProps is
225
- * marked as "unresolved" if we cannot safely infer the values of its defaultProps declarations
226
- * without risking false negatives.
227
- * @param {Object } component The component to mark.
228
- * @returns {void }
229
- */
230
- function markDefaultPropsAsUnresolved ( component ) {
231
- components . set ( component . node , {
232
- defaultProps : 'unresolved'
233
- } ) ;
234
- }
235
-
236
203
/**
237
204
* Adds propTypes to the component passed in.
238
205
* @param {ASTNode } component The component to add the propTypes to.
@@ -247,31 +214,6 @@ module.exports = {
247
214
} ) ;
248
215
}
249
216
250
- /**
251
- * Adds defaultProps to the component passed in.
252
- * @param {ASTNode } component The component to add the defaultProps to.
253
- * @param {String[]|String } defaultProps defaultProps to add to the component or the string "unresolved"
254
- * if this component has defaultProps that can't be resolved.
255
- * @returns {void }
256
- */
257
- function addDefaultPropsToComponent ( component , defaultProps ) {
258
- // Early return if this component's defaultProps is already marked as "unresolved".
259
- if ( component . defaultProps === 'unresolved' ) {
260
- return ;
261
- }
262
-
263
- if ( defaultProps === 'unresolved' ) {
264
- markDefaultPropsAsUnresolved ( component ) ;
265
- return ;
266
- }
267
-
268
- const defaults = component . defaultProps || [ ] ;
269
-
270
- components . set ( component . node , {
271
- defaultProps : defaults . concat ( defaultProps )
272
- } ) ;
273
- }
274
-
275
217
/**
276
218
* Tries to find a props type annotation in a stateless component.
277
219
* @param {ASTNode } node The AST node to look for a props type annotation.
@@ -322,8 +264,9 @@ module.exports = {
322
264
return ;
323
265
}
324
266
325
- defaultProps . forEach ( defaultProp => {
326
- const prop = propFromName ( propTypes , defaultProp . name ) ;
267
+ Object . keys ( defaultProps ) . forEach ( defaultPropName => {
268
+ const defaultProp = defaultProps [ defaultPropName ] ;
269
+ const prop = propFromName ( propTypes , defaultPropName ) ;
327
270
328
271
if ( prop && ( allowRequiredDefaults || ! prop . isRequired ) ) {
329
272
return ;
@@ -333,13 +276,13 @@ module.exports = {
333
276
context . report (
334
277
defaultProp . node ,
335
278
'defaultProp "{{name}}" defined for isRequired propType.' ,
336
- { name : defaultProp . name }
279
+ { name : defaultPropName }
337
280
) ;
338
281
} else {
339
282
context . report (
340
283
defaultProp . node ,
341
284
'defaultProp "{{name}}" has no corresponding propTypes declaration.' ,
342
- { name : defaultProp . name }
285
+ { name : defaultPropName }
343
286
) ;
344
287
}
345
288
} ) ;
@@ -352,9 +295,8 @@ module.exports = {
352
295
return {
353
296
MemberExpression : function ( node ) {
354
297
const isPropType = propsUtil . isPropTypesDeclaration ( node ) ;
355
- const isDefaultProp = propsUtil . isDefaultPropsDeclaration ( node ) ;
356
298
357
- if ( ! isPropType && ! isDefaultProp ) {
299
+ if ( ! isPropType ) {
358
300
return ;
359
301
}
360
302
@@ -375,21 +317,8 @@ module.exports = {
375
317
// MyComponent.propTypes = myPropTypes;
376
318
if ( node . parent . type === 'AssignmentExpression' ) {
377
319
const expression = resolveNodeValue ( node . parent . right ) ;
378
- if ( ! expression || expression . type !== 'ObjectExpression' ) {
379
- // If a value can't be found, we mark the defaultProps declaration as "unresolved", because
380
- // we should ignore this component and not report any errors for it, to avoid false-positives
381
- // with e.g. external defaultProps declarations.
382
- if ( isDefaultProp ) {
383
- markDefaultPropsAsUnresolved ( component ) ;
384
- }
385
-
386
- return ;
387
- }
388
-
389
- if ( isPropType ) {
320
+ if ( expression && expression . type === 'ObjectExpression' ) {
390
321
addPropTypesToComponent ( component , getPropTypesFromObjectExpression ( expression ) ) ;
391
- } else {
392
- addDefaultPropsToComponent ( component , getDefaultPropsFromObjectExpression ( expression ) ) ;
393
322
}
394
323
395
324
return ;
@@ -399,20 +328,11 @@ module.exports = {
399
328
// MyComponent.propTypes.baz = React.PropTypes.string;
400
329
if ( node . parent . type === 'MemberExpression' && node . parent . parent &&
401
330
node . parent . parent . type === 'AssignmentExpression' ) {
402
- if ( isPropType ) {
403
- addPropTypesToComponent ( component , [ {
404
- name : node . parent . property . name ,
405
- isRequired : propsUtil . isRequiredPropType ( node . parent . parent . right ) ,
406
- node : node . parent . parent
407
- } ] ) ;
408
- } else {
409
- addDefaultPropsToComponent ( component , [ {
410
- name : node . parent . property . name ,
411
- node : node . parent . parent
412
- } ] ) ;
413
- }
414
-
415
- return ;
331
+ addPropTypesToComponent ( component , [ {
332
+ name : node . parent . property . name ,
333
+ isRequired : propsUtil . isRequiredPropType ( node . parent . parent . right ) ,
334
+ node : node . parent . parent
335
+ } ] ) ;
416
336
}
417
337
} ,
418
338
@@ -438,9 +358,8 @@ module.exports = {
438
358
}
439
359
440
360
const isPropType = propsUtil . isPropTypesDeclaration ( node ) ;
441
- const isDefaultProp = propsUtil . isDefaultPropsDeclaration ( node ) ;
442
361
443
- if ( ! isPropType && ! isDefaultProp ) {
362
+ if ( ! isPropType ) {
444
363
return ;
445
364
}
446
365
@@ -460,11 +379,7 @@ module.exports = {
460
379
return ;
461
380
}
462
381
463
- if ( isPropType ) {
464
- addPropTypesToComponent ( component , getPropTypesFromObjectExpression ( expression ) ) ;
465
- } else {
466
- addDefaultPropsToComponent ( component , getDefaultPropsFromObjectExpression ( expression ) ) ;
467
- }
382
+ addPropTypesToComponent ( component , getPropTypesFromObjectExpression ( expression ) ) ;
468
383
} ,
469
384
470
385
// e.g.:
@@ -495,9 +410,8 @@ module.exports = {
495
410
496
411
const propName = astUtil . getPropertyName ( node ) ;
497
412
const isPropType = propName === 'propTypes' ;
498
- const isDefaultProp = propName === 'defaultProps' || propName === 'getDefaultProps' ;
499
413
500
- if ( ! isPropType && ! isDefaultProp ) {
414
+ if ( ! isPropType ) {
501
415
return ;
502
416
}
503
417
@@ -512,11 +426,7 @@ module.exports = {
512
426
return ;
513
427
}
514
428
515
- if ( isPropType ) {
516
- addPropTypesToComponent ( component , getPropTypesFromObjectExpression ( expression ) ) ;
517
- } else {
518
- addDefaultPropsToComponent ( component , getDefaultPropsFromObjectExpression ( expression ) ) ;
519
- }
429
+ addPropTypesToComponent ( component , getPropTypesFromObjectExpression ( expression ) ) ;
520
430
} ,
521
431
522
432
// e.g.:
@@ -547,25 +457,11 @@ module.exports = {
547
457
}
548
458
549
459
const isPropType = propsUtil . isPropTypesDeclaration ( property ) ;
550
- const isDefaultProp = propsUtil . isDefaultPropsDeclaration ( property ) ;
551
-
552
- if ( ! isPropType && ! isDefaultProp ) {
553
- return ;
554
- }
555
460
556
461
if ( isPropType && property . value . type === 'ObjectExpression' ) {
557
462
addPropTypesToComponent ( component , getPropTypesFromObjectExpression ( property . value ) ) ;
558
463
return ;
559
464
}
560
-
561
- if ( isDefaultProp && property . value . type === 'FunctionExpression' ) {
562
- const returnStatement = utils . findReturnStatement ( property ) ;
563
- if ( ! returnStatement || returnStatement . argument . type !== 'ObjectExpression' ) {
564
- return ;
565
- }
566
-
567
- addDefaultPropsToComponent ( component , getDefaultPropsFromObjectExpression ( returnStatement . argument ) ) ;
568
- }
569
465
} ) ;
570
466
} ,
571
467
0 commit comments