@@ -259,20 +259,29 @@ function componentRule(rule, context) {
259
259
const utils = {
260
260
261
261
/**
262
- * Check if the node is a React ES5 component
262
+ * Check if an ObjectExpression is a React ES5 component
263
263
*
264
264
* @param {ASTNode } node The AST node being checked.
265
265
* @returns {Boolean } True if the node is a React ES5 component, false if not
266
266
*/
267
267
isES5Component ( node ) {
268
- if ( ! node . parent ) {
268
+ if ( ! node . parent || ! node . parent . callee ) {
269
269
return false ;
270
270
}
271
- return new RegExp ( `^(${ pragma } \\.)?${ createClass } $` ) . test ( sourceCode . getText ( node . parent . callee ) ) ;
271
+ const callee = node . parent . callee ;
272
+ // React.createClass({})
273
+ if ( callee . type === 'MemberExpression' ) {
274
+ return callee . object . name === pragma && callee . property . name === createClass ;
275
+ }
276
+ // createClass({})
277
+ if ( callee . type === 'Identifier' ) {
278
+ return callee . name === createClass ;
279
+ }
280
+ return false ;
272
281
} ,
273
282
274
283
/**
275
- * Check if the node is a React ES6 component
284
+ * Check if a class is a React ES6 component
276
285
*
277
286
* @param {ASTNode } node The AST node being checked.
278
287
* @returns {Boolean } True if the node is a React ES6 component, false if not
@@ -285,7 +294,14 @@ function componentRule(rule, context) {
285
294
if ( ! node . superClass ) {
286
295
return false ;
287
296
}
288
- return new RegExp ( `^(${ pragma } \\.)?(Pure)?Component$` ) . test ( sourceCode . getText ( node . superClass ) ) ;
297
+ if ( node . superClass . type === 'MemberExpression' ) {
298
+ return node . superClass . object . name === pragma
299
+ && / ^ ( P u r e ) ? C o m p o n e n t $ / . test ( node . superClass . property . name ) ;
300
+ }
301
+ if ( node . superClass . type === 'Identifier' ) {
302
+ return / ^ ( P u r e ) ? C o m p o n e n t $ / . test ( node . superClass . name ) ;
303
+ }
304
+ return false ;
289
305
} ,
290
306
291
307
/**
0 commit comments