@@ -28,72 +28,67 @@ module.exports = {
28
28
} ,
29
29
30
30
create ( context ) {
31
- return {
32
- FunctionDeclaration ( node ) {
33
- const fnName = node . id . name ;
34
- const isReactComponent = fnName [ 0 ] === fnName [ 0 ] . toUpperCase ( ) ;
35
- const returnStatement = astUtil . findReturnStatement ( node ) ;
31
+ const handleFunctionalComponents = ( node ) => {
32
+ const fnName = ( node . id && node . id . name ) || node . parent . id . name ;
33
+ const isReactComponent = fnName [ 0 ] === fnName [ 0 ] . toUpperCase ( ) ;
34
+ const returnStatement = astUtil . findReturnStatement ( node ) ;
36
35
37
- if ( ! isReactComponent ) return ;
36
+ if ( ! isReactComponent ) return ;
38
37
39
- const variables = variableUtil . variablesInScope ( context ) ;
40
- const returnNode = returnStatement && returnStatement . argument ;
41
- const returnIdentifierName = returnNode && returnNode . name ;
42
- const returnIdentifierVar = variableUtil . getVariable (
43
- variables ,
44
- returnIdentifierName
45
- ) ;
46
- const returnIdentifierValue = ( ( ) => {
47
- if ( ! returnNode ) return undefined ;
38
+ const variables = variableUtil . variablesInScope ( context ) ;
39
+ const returnNode = returnStatement && returnStatement . argument ;
40
+ const returnIdentifierName = returnNode && returnNode . name ;
41
+ const returnIdentifierVar = variableUtil . getVariable (
42
+ variables ,
43
+ returnIdentifierName
44
+ ) ;
45
+ const returnIdentifierValue = ( ( ) => {
46
+ if ( ! returnNode ) return undefined ;
47
+ if (
48
+ returnIdentifierVar
49
+ && returnIdentifierVar . defs
50
+ && returnIdentifierVar . defs [ 0 ]
51
+ ) {
52
+ const value = returnIdentifierVar . defs [ 0 ] . node . init ;
48
53
if (
49
- returnIdentifierVar
50
- && returnIdentifierVar . defs
51
- && returnIdentifierVar . defs [ 0 ]
54
+ returnIdentifierVar . defs [ 0 ] . node . type === 'VariableDeclarator'
55
+ && value === null
52
56
) {
53
- const value = returnIdentifierVar . defs [ 0 ] . node . init ;
54
- if (
55
- returnIdentifierVar . defs [ 0 ] . node . type === 'VariableDeclarator'
56
- && value === null
57
- ) {
58
- return undefined ;
59
- }
60
- return value ;
57
+ return undefined ;
61
58
}
59
+ return value ;
60
+ }
62
61
63
- if ( returnNode . type === 'ArrayExpression' ) {
64
- return returnNode . elements ;
65
- }
62
+ if ( returnNode . type === 'ArrayExpression' ) {
63
+ return returnNode . elements ;
64
+ }
66
65
67
- if ( returnNode . type === 'JSXElement' ) {
68
- return returnNode ;
69
- }
66
+ if ( returnNode . type === 'JSXElement' ) {
67
+ return returnNode ;
68
+ }
70
69
71
- return returnNode . value ;
72
- } ) ( ) ;
70
+ return returnNode . value ;
71
+ } ) ( ) ;
73
72
74
- // console.log('DEBUG', returnIdentifierValue);
73
+ const returnsArrayHavingUndefined = Array . isArray ( returnIdentifierValue )
74
+ && returnIdentifierValue . some ( ( el ) => el . type === 'Identifier' && el . name === 'undefined' ) ;
75
75
76
- const returnsArrayHavingUndefined = Array . isArray ( returnIdentifierValue )
77
- && returnIdentifierValue . some ( ( el ) => el . type === 'Identifier' && el . name === 'undefined' ) ;
76
+ if (
77
+ ! returnStatement
78
+ || returnIdentifierName === 'undefined'
79
+ || returnIdentifierValue === undefined
80
+ || ( returnIdentifierValue && returnIdentifierValue . name === 'undefined' )
81
+ || returnsArrayHavingUndefined
82
+ ) {
83
+ report ( context , messages . returnsUndefined , 'returnsUndefined' , {
84
+ node,
85
+ } ) ;
86
+ }
87
+ } ;
78
88
79
- if (
80
- ! returnStatement
81
- || returnIdentifierName === 'undefined'
82
- || returnIdentifierValue === undefined
83
- || ( returnIdentifierValue && returnIdentifierValue . name === 'undefined' )
84
- || returnsArrayHavingUndefined
85
- ) {
86
- report ( context , messages . returnsUndefined , 'returnsUndefined' , {
87
- node,
88
- } ) ;
89
- }
90
- } ,
91
- // FunctionExpression(node) {
92
- // // console.log('DEBUG fn expression', node);
93
- // },
94
- // ArrowFunctionExpression(node) {
95
- // // console.log('DEBUG fn arrow function', node);
96
- // },
89
+ return {
90
+ FunctionDeclaration : handleFunctionalComponents ,
91
+ ArrowFunctionExpression : handleFunctionalComponents ,
97
92
} ;
98
93
} ,
99
94
} ;
0 commit comments