@@ -35,9 +35,8 @@ module.exports = {
35
35
*/
36
36
/** @type {Map<FunctionDeclaration | FunctionExpression | ArrowFunctionExpression | Program, ScopePropsReferences> } */
37
37
const setupScopePropsReferenceIds = new Map ( )
38
- const outerExpressionTypes = new Set ( [
38
+ const wrapperExpressionTypes = new Set ( [
39
39
'ArrayExpression' ,
40
- 'CallExpression' ,
41
40
'ObjectExpression'
42
41
] )
43
42
@@ -68,27 +67,11 @@ module.exports = {
68
67
69
68
const rightNode = utils . skipChainExpression ( right )
70
69
71
- if ( outerExpressionTypes . has ( rightNode . type ) ) {
72
- const propRefs = [ ...propsReferences . refs . values ( ) ]
73
- const isPropsMemberAccessed = propRefs . some ( ( props ) => {
74
- const isPropsInCallExpression = utils . inRange ( rightNode . range , props )
75
-
76
- if ( isPropsInCallExpression ) {
77
- const isPropMemberExpression =
78
- props . parent . type === 'MemberExpression' &&
79
- props . parent . object === props
80
-
81
- if ( isPropMemberExpression ) {
82
- return true
83
- }
84
- }
85
-
86
- return false
87
- } )
88
-
89
- if ( isPropsMemberAccessed ) {
90
- return report ( left , 'getProperty' , propsReferences . scopeName )
91
- }
70
+ if (
71
+ wrapperExpressionTypes . has ( rightNode . type ) &&
72
+ isPropsMemberAccessed ( rightNode , propsReferences )
73
+ ) {
74
+ return report ( rightNode , 'getProperty' , propsReferences . scopeName )
92
75
}
93
76
94
77
if (
@@ -108,6 +91,34 @@ module.exports = {
108
91
report ( left , 'getProperty' , propsReferences . scopeName )
109
92
}
110
93
}
94
+ /**
95
+ * @param {Expression } node
96
+ * @param {ScopePropsReferences } propsReferences
97
+ */
98
+ function isPropsMemberAccessed ( node , propsReferences ) {
99
+ const propRefs = [ ...propsReferences . refs . values ( ) ]
100
+ const isMemberAccessed = propRefs . some ( ( props ) => {
101
+ const isPropsInExpressionRange = utils . inRange ( node . range , props )
102
+
103
+ if ( isPropsInExpressionRange ) {
104
+ const isPropsMemberExpression =
105
+ props . parent . type === 'MemberExpression' &&
106
+ props . parent . object === props
107
+
108
+ if ( isPropsMemberExpression ) {
109
+ return true
110
+ }
111
+ }
112
+
113
+ return false
114
+ } )
115
+
116
+ if ( isMemberAccessed ) {
117
+ return true
118
+ }
119
+
120
+ return false
121
+ }
111
122
/**
112
123
* @typedef {object } ScopeStack
113
124
* @property {ScopeStack | null } upper
@@ -182,6 +193,26 @@ module.exports = {
182
193
183
194
setupScopePropsReferenceIds . delete ( node )
184
195
} ,
196
+ /**
197
+ * @param {CallExpression } node
198
+ */
199
+ CallExpression ( node ) {
200
+ if ( ! scopeStack ) {
201
+ return
202
+ }
203
+
204
+ const propsReferenceIds = setupScopePropsReferenceIds . get (
205
+ scopeStack . scopeNode
206
+ )
207
+
208
+ if ( ! propsReferenceIds ) {
209
+ return
210
+ }
211
+
212
+ if ( isPropsMemberAccessed ( node , propsReferenceIds ) ) {
213
+ report ( node , 'getProperty' , propsReferenceIds . scopeName )
214
+ }
215
+ } ,
185
216
/**
186
217
* @param {VariableDeclarator } node
187
218
*/
0 commit comments