@@ -155,10 +155,33 @@ module.exports = {
155155 }
156156 }
157157
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+
158169 const seen = new WeakSet ( ) ;
159170
160171 return {
172+ [ childrenToArraySelector ] ( ) {
173+ isWithinChildrenToArray = true ;
174+ } ,
175+
176+ [ `${ childrenToArraySelector } :exit` ] ( ) {
177+ isWithinChildrenToArray = false ;
178+ } ,
179+
161180 'ArrayExpression, JSXElement > JSXElement' ( node ) {
181+ if ( isWithinChildrenToArray ) {
182+ return ;
183+ }
184+
162185 const jsx = ( node . type === 'ArrayExpression' ? node . elements : node . parent . children ) . filter ( ( x ) => x && x . type === 'JSXElement' ) ;
163186 if ( jsx . length === 0 ) {
164187 return ;
@@ -205,7 +228,7 @@ module.exports = {
205228 } ,
206229
207230 JSXFragment ( node ) {
208- if ( ! checkFragmentShorthand ) {
231+ if ( ! checkFragmentShorthand || isWithinChildrenToArray ) {
209232 return ;
210233 }
211234
@@ -226,6 +249,10 @@ module.exports = {
226249 CallExpression[callee.type="OptionalMemberExpression"][callee.property.name="map"],\
227250 OptionalCallExpression[callee.type="MemberExpression"][callee.property.name="map"],\
228251 OptionalCallExpression[callee.type="OptionalMemberExpression"][callee.property.name="map"]' ( node ) {
252+ if ( isWithinChildrenToArray ) {
253+ return ;
254+ }
255+
229256 const fn = node . arguments . length > 0 && node . arguments [ 0 ] ;
230257 if ( ! fn || ! astUtil . isFunctionLikeExpression ( fn ) ) {
231258 return ;
@@ -238,6 +265,10 @@ module.exports = {
238265
239266 // Array.from
240267 'CallExpression[callee.type="MemberExpression"][callee.property.name="from"]' ( node ) {
268+ if ( isWithinChildrenToArray ) {
269+ return ;
270+ }
271+
241272 const fn = node . arguments . length > 1 && node . arguments [ 1 ] ;
242273 if ( ! astUtil . isFunctionLikeExpression ( fn ) ) {
243274 return ;
0 commit comments