@@ -154,7 +154,7 @@ module.exports = {
154154 while ( node ) {
155155 const component = components . get ( node ) ;
156156
157- const isDeclared = component && component . confidence == = 2
157+ const isDeclared = component && component . confidence > = 2
158158 && internalIsDeclaredInComponent ( component . declaredPropTypes || { } , names ) ;
159159
160160 if ( isDeclared ) {
@@ -176,6 +176,7 @@ module.exports = {
176176 && ! isIgnored ( propType . allNames [ 0 ] )
177177 && ! isDeclaredInComponent ( component . node , propType . allNames )
178178 ) ) ;
179+
179180 undeclareds . forEach ( ( propType ) => {
180181 report ( context , messages . missingPropType , 'missingPropType' , {
181182 node : propType . node ,
@@ -186,13 +187,32 @@ module.exports = {
186187 } ) ;
187188 }
188189
190+ /**
191+ * @param {Object } curComponent The current component to process
192+ * @param {Object } prevComponent The prev component to process
193+ * @returns {Boolean } True if the component is nested False if not.
194+ */
195+ function checkNestedComponent ( curComponent , prevComponent ) {
196+ if ( curComponent . node . callee && curComponent . node . callee . name === 'memo' && prevComponent ) {
197+ const prevComponentRange = prevComponent . node . range ;
198+ const currentComponentRange = curComponent . node . arguments [ 0 ] . range ;
199+
200+ if ( prevComponentRange [ 0 ] === currentComponentRange [ 0 ]
201+ && prevComponentRange [ 1 ] === currentComponentRange [ 1 ] ) {
202+ return true ;
203+ }
204+ }
205+ return false ;
206+ }
207+
189208 return {
190209 'Program:exit' ( ) {
191210 const list = components . list ( ) ;
192211 // Report undeclared proptypes for all classes
193212 values ( list )
194213 . filter ( ( component ) => mustBeValidated ( component ) )
195- . forEach ( ( component ) => {
214+ . forEach ( ( component , index , array ) => {
215+ if ( checkNestedComponent ( component , array [ index - 1 ] ) ) return ;
196216 reportUndeclaredPropTypes ( component ) ;
197217 } ) ;
198218 } ,
0 commit comments