Skip to content

Commit dcf01a6

Browse files
committed
Fix ES5 components detection from nested functions (fixes #287)
1 parent 728df92 commit dcf01a6

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

lib/util/Components.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,14 @@ function componentRule(rule, context) {
179179
*/
180180
getParentES5Component: function() {
181181
var scope = context.getScope();
182-
var node = scope.block && scope.block.parent && scope.block.parent.parent;
183-
if (!node || !context.react.isES5Component(node)) {
184-
return null;
182+
while (scope) {
183+
var node = scope.block && scope.block.parent && scope.block.parent.parent;
184+
if (node && context.react.isES5Component(node)) {
185+
return node;
186+
}
187+
scope = scope.upper;
185188
}
186-
return node;
189+
return null;
187190
},
188191

189192
/**

tests/lib/rules/no-multi-comp.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
var rule = require('../../../lib/rules/no-multi-comp');
1212
var RuleTester = require('eslint').RuleTester;
1313

14+
require('babel-eslint');
15+
1416
// ------------------------------------------------------------------------------
1517
// Tests
1618
// ------------------------------------------------------------------------------
@@ -42,6 +44,24 @@ ruleTester.run('no-multi-comp', rule, {
4244
classes: true,
4345
jsx: true
4446
}
47+
}, {
48+
code: [
49+
'var Heading = React.createClass({',
50+
' render: function() {',
51+
' return (',
52+
' <div>',
53+
' {this.props.buttons.map(function(button, index) {',
54+
' return <Button {...button} key={index}/>;',
55+
' })}',
56+
' </div>',
57+
' );',
58+
' }',
59+
'});'
60+
].join('\r'),
61+
ecmaFeatures: {
62+
classes: true,
63+
jsx: true
64+
}
4565
}],
4666

4767
invalid: [{

0 commit comments

Comments
 (0)