@@ -155,10 +155,33 @@ module.exports = {
155
155
}
156
156
}
157
157
158
+ const childrenToArraySelector = `:matches(
159
+ CallExpression
160
+ [callee.object.object.name=${ reactPragma } ]
161
+ [callee.object.property.name=Children]
162
+ [callee.property.name=toArray],
163
+ CallExpression
164
+ [callee.object.name=Children]
165
+ [callee.property.name=toArray]
166
+ )` . replace ( / \s / g, '' ) ;
167
+ let isWithinChildrenToArray = false ;
168
+
158
169
const seen = new WeakSet ( ) ;
159
170
160
171
return {
172
+ [ childrenToArraySelector ] ( ) {
173
+ isWithinChildrenToArray = true ;
174
+ } ,
175
+
176
+ [ `${ childrenToArraySelector } :exit` ] ( ) {
177
+ isWithinChildrenToArray = false ;
178
+ } ,
179
+
161
180
'ArrayExpression, JSXElement > JSXElement' ( node ) {
181
+ if ( isWithinChildrenToArray ) {
182
+ return ;
183
+ }
184
+
162
185
const jsx = ( node . type === 'ArrayExpression' ? node . elements : node . parent . children ) . filter ( ( x ) => x && x . type === 'JSXElement' ) ;
163
186
if ( jsx . length === 0 ) {
164
187
return ;
@@ -205,7 +228,7 @@ module.exports = {
205
228
} ,
206
229
207
230
JSXFragment ( node ) {
208
- if ( ! checkFragmentShorthand ) {
231
+ if ( ! checkFragmentShorthand || isWithinChildrenToArray ) {
209
232
return ;
210
233
}
211
234
@@ -226,6 +249,10 @@ module.exports = {
226
249
CallExpression[callee.type="OptionalMemberExpression"][callee.property.name="map"],\
227
250
OptionalCallExpression[callee.type="MemberExpression"][callee.property.name="map"],\
228
251
OptionalCallExpression[callee.type="OptionalMemberExpression"][callee.property.name="map"]' ( node ) {
252
+ if ( isWithinChildrenToArray ) {
253
+ return ;
254
+ }
255
+
229
256
const fn = node . arguments . length > 0 && node . arguments [ 0 ] ;
230
257
if ( ! fn || ! astUtil . isFunctionLikeExpression ( fn ) ) {
231
258
return ;
@@ -238,6 +265,10 @@ module.exports = {
238
265
239
266
// Array.from
240
267
'CallExpression[callee.type="MemberExpression"][callee.property.name="from"]' ( node ) {
268
+ if ( isWithinChildrenToArray ) {
269
+ return ;
270
+ }
271
+
241
272
const fn = node . arguments . length > 1 && node . arguments [ 1 ] ;
242
273
if ( ! astUtil . isFunctionLikeExpression ( fn ) ) {
243
274
return ;
0 commit comments