5
5
*/
6
6
'use strict' ;
7
7
8
- var util = require ( 'util' ) ;
9
8
var doctrine = require ( 'doctrine' ) ;
10
9
var variableUtil = require ( './variable' ) ;
11
10
var pragmaUtil = require ( './pragma' ) ;
@@ -140,7 +139,7 @@ function componentRule(rule, context) {
140
139
var hoc = pragmaUtil . getHocFromContext ( context ) ;
141
140
var createClass = pragmaUtil . getCreateClassFromContext ( context ) ;
142
141
var pragma = pragmaUtil . getFromContext ( context ) ;
143
- var sourceCode = context . getSourceCode ( ) ;
142
+ const sourceCode = context . sourceCode || context . getSourceCode ( ) ;
144
143
var components = new Components ( ) ;
145
144
146
145
// Utilities for component detection
@@ -340,11 +339,11 @@ function componentRule(rule, context) {
340
339
*
341
340
* @returns {ASTNode } component node, null if we are not in a component
342
341
*/
343
- getParentComponent : function ( ) {
342
+ getParentComponent : function ( node ) {
344
343
return (
345
- utils . getParentES6Component ( ) ||
346
- utils . getParentES5Component ( ) ||
347
- utils . getParentStatelessComponent ( )
344
+ utils . getParentES6Component ( node ) ||
345
+ utils . getParentES5Component ( node ) ||
346
+ utils . getParentStatelessComponent ( node )
348
347
) ;
349
348
} ,
350
349
@@ -353,12 +352,12 @@ function componentRule(rule, context) {
353
352
*
354
353
* @returns {ASTNode|Null } component node, null if we are not in a component
355
354
*/
356
- getParentES5Component : function ( ) {
357
- var scope = context . getScope ( ) ;
355
+ getParentES5Component : function ( node ) {
356
+ let scope = sourceCode . getScope ? sourceCode . getScope ( node ) : context . getScope ( ) ;
358
357
while ( scope ) {
359
- var node = scope . block && scope . block . parent && scope . block . parent . parent ;
360
- if ( node && ( utils . isES5Component ( node ) || utils . isKindComponent ( node ) ) ) {
361
- return node ;
358
+ var parentNode = scope . block && scope . block . parent && scope . block . parent . parent ;
359
+ if ( parentNode && ( utils . isES5Component ( parentNode ) || utils . isKindComponent ( parentNode ) ) ) {
360
+ return parentNode ;
362
361
}
363
362
scope = scope . upper ;
364
363
}
@@ -370,42 +369,42 @@ function componentRule(rule, context) {
370
369
*
371
370
* @returns {ASTNode|Null } component node, null if we are not in a component
372
371
*/
373
- getParentES6Component : function ( ) {
374
- var scope = context . getScope ( ) ;
372
+ getParentES6Component : function ( node ) {
373
+ let scope = sourceCode . getScope ? sourceCode . getScope ( node ) : context . getScope ( ) ;
375
374
while ( scope && scope . type !== 'class' ) {
376
375
scope = scope . upper ;
377
376
}
378
- var node = scope && scope . block ;
379
- if ( ! node || ! utils . isES6Component ( node ) ) {
377
+ let parentNode = scope && scope . block ;
378
+ if ( ! parentNode || ! utils . isES6Component ( parentNode ) ) {
380
379
return null ;
381
380
}
382
- return node ;
381
+ return parentNode ;
383
382
} ,
384
383
385
384
/**
386
385
* Get the parent stateless component node from the current scope
387
386
*
388
387
* @returns {ASTNode|Null } component node, null if we are not in a component
389
388
*/
390
- getParentStatelessComponent : function ( ) {
391
- var scope = context . getScope ( ) ;
389
+ getParentStatelessComponent : function ( node ) {
390
+ let scope = sourceCode . getScope ? sourceCode . getScope ( node ) : context . getScope ( ) ;
392
391
while ( scope ) {
393
- var node = scope . block ;
394
- var isClass = node . type === 'ClassExpression' ;
395
- var isFunction = / F u n c t i o n / . test ( node . type ) ; // Functions
396
- var isMethod = node . parent && node . parent . type === 'MethodDefinition' ; // Classes methods
397
- var isArgument = node . parent && node . parent . type === 'CallExpression' ; // Arguments (callback, etc.)
392
+ var parentNode = scope . block ;
393
+ var isClass = parentNode . type === 'ClassExpression' ;
394
+ var isFunction = / F u n c t i o n / . test ( parentNode . type ) ; // Functions
395
+ var isMethod = parentNode . parent && parentNode . parent . type === 'MethodDefinition' ; // Classes methods
396
+ var isArgument = parentNode . parent && parentNode . parent . type === 'CallExpression' ; // Arguments (callback, etc.)
398
397
// Stop moving up if we reach a class or an argument (like a callback)
399
398
if ( isClass || isArgument ) {
400
399
return null ;
401
400
}
402
401
// Return the node if it is a function that is not a class method
403
402
if ( isFunction && ! isMethod ) {
404
403
// if stateless function is an Enact kind computed property, return the kind
405
- if ( utils . isComputedKindProp ( node ) || utils . isHandlersKindProp ( node ) ) {
406
- return ( node . parent . parent . parent . parent ) ;
404
+ if ( utils . isComputedKindProp ( parentNode ) || utils . isHandlersKindProp ( parentNode ) ) {
405
+ return ( parentNode . parent . parent . parent . parent ) ;
407
406
} else {
408
- return node ;
407
+ return parentNode ;
409
408
}
410
409
}
411
410
scope = scope . upper ;
@@ -426,6 +425,7 @@ function componentRule(rule, context) {
426
425
var l ;
427
426
var componentName ;
428
427
var componentNode ;
428
+ let nodeParam = node ;
429
429
// Get the component path
430
430
var componentPath = [ ] ;
431
431
while ( node ) {
@@ -446,7 +446,7 @@ function componentRule(rule, context) {
446
446
return null ;
447
447
}
448
448
var variableInScope ;
449
- var variables = variableUtil . variablesInScope ( context ) ;
449
+ var variables = variableUtil . variablesInScope ( sourceCode , context , nodeParam ) ;
450
450
for ( i = 0 , j = variables . length ; i < j ; i ++ ) {
451
451
if ( variables [ i ] . name === variableName ) {
452
452
variableInScope = variables [ i ] ;
@@ -534,7 +534,7 @@ function componentRule(rule, context) {
534
534
} ,
535
535
536
536
'ClassProperty, PropertyDefinition' : function ( node ) {
537
- node = utils . getParentComponent ( ) ;
537
+ node = utils . getParentComponent ( node ) ;
538
538
if ( ! node ) {
539
539
return ;
540
540
}
@@ -549,7 +549,7 @@ function componentRule(rule, context) {
549
549
} ,
550
550
551
551
FunctionExpression : function ( node ) {
552
- var component = utils . getParentComponent ( ) ;
552
+ var component = utils . getParentComponent ( node ) ;
553
553
if (
554
554
! component ||
555
555
( component . parent && component . parent . type === 'JSXExpressionContainer' )
@@ -562,15 +562,15 @@ function componentRule(rule, context) {
562
562
} ,
563
563
564
564
FunctionDeclaration : function ( node ) {
565
- node = utils . getParentComponent ( ) ;
565
+ node = utils . getParentComponent ( node ) ;
566
566
if ( ! node ) {
567
567
return ;
568
568
}
569
569
components . add ( node , 1 ) ;
570
570
} ,
571
571
572
572
ArrowFunctionExpression : function ( node ) {
573
- var component = utils . getParentComponent ( ) ;
573
+ var component = utils . getParentComponent ( node ) ;
574
574
if (
575
575
! component ||
576
576
( component . parent && component . parent . type === 'JSXExpressionContainer' )
@@ -587,7 +587,7 @@ function componentRule(rule, context) {
587
587
} ,
588
588
589
589
ThisExpression : function ( node ) {
590
- var component = utils . getParentComponent ( ) ;
590
+ var component = utils . getParentComponent ( node ) ;
591
591
if ( ! component || ! / F u n c t i o n / . test ( component . type ) || ! node . parent . property ) {
592
592
return ;
593
593
}
@@ -603,9 +603,11 @@ function componentRule(rule, context) {
603
603
if ( ! utils . isReturningJSX ( node ) ) {
604
604
return ;
605
605
}
606
- node = utils . getParentComponent ( ) ;
606
+ let scope = sourceCode . getScope ? sourceCode . getScope ( node ) : context . getScope ( ) ;
607
+
608
+ node = utils . getParentComponent ( node ) ;
609
+
607
610
if ( ! node ) {
608
- var scope = context . getScope ( ) ;
609
611
components . add ( scope . block , 1 ) ;
610
612
return ;
611
613
}
0 commit comments