Skip to content

Commit 70bf28d

Browse files
committed
Fix component detection to ignore functions expression without a parent component
1 parent 7ed3b29 commit 70bf28d

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

lib/util/Components.js

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -483,14 +483,16 @@ function componentRule(rule, context) {
483483
},
484484

485485
FunctionExpression: function(node) {
486-
node = utils.getParentComponent();
486+
var component = utils.getParentComponent();
487487
if (
488-
!node ||
489-
(node.parent && node.parent.type === 'JSXExpressionContainer')
488+
!component ||
489+
(component.parent && component.parent.type === 'JSXExpressionContainer')
490490
) {
491+
// Ban the node if we cannot find a parent component
492+
components.add(node, 0);
491493
return;
492494
}
493-
components.add(node, 1);
495+
components.add(component, 1);
494496
},
495497

496498
FunctionDeclaration: function(node) {
@@ -502,17 +504,19 @@ function componentRule(rule, context) {
502504
},
503505

504506
ArrowFunctionExpression: function(node) {
505-
node = utils.getParentComponent();
507+
var component = utils.getParentComponent();
506508
if (
507-
!node ||
508-
(node.parent && node.parent.type === 'JSXExpressionContainer')
509+
!component ||
510+
(component.parent && component.parent.type === 'JSXExpressionContainer')
509511
) {
512+
// Ban the node if we cannot find a parent component
513+
components.add(node, 0);
510514
return;
511515
}
512-
if (node.expression && utils.isReturningJSX(node)) {
513-
components.add(node, 2);
516+
if (component.expression && utils.isReturningJSX(component)) {
517+
components.add(component, 2);
514518
} else {
515-
components.add(node, 1);
519+
components.add(component, 1);
516520
}
517521
},
518522

tests/lib/rules/display-name.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,26 @@ ruleTester.run('display-name', rule, {
358358
'module.exports = someDecorator;'
359359
].join('\n'),
360360
parser: 'babel-eslint'
361+
}, {
362+
code: [
363+
'const element = (',
364+
' <Media query={query} render={() => {',
365+
' renderWasCalled = true',
366+
' return <div/>',
367+
' }}/>',
368+
')'
369+
].join('\n'),
370+
parser: 'babel-eslint'
371+
}, {
372+
code: [
373+
'const element = (',
374+
' <Media query={query} render={function() {',
375+
' renderWasCalled = true',
376+
' return <div/>',
377+
' }}/>',
378+
')'
379+
].join('\n'),
380+
parser: 'babel-eslint'
361381
}
362382
],
363383

0 commit comments

Comments
 (0)