Skip to content

Commit 577cf06

Browse files
committed
Merge pull request jsx-eslint#206 from epmatsw/render-with-createElement
Treat component with render which returns createElement as Valid
2 parents 6a5d08d + 2a0d7f4 commit 577cf06

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

lib/util/component.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,18 @@ function isReactComponent(context, node) {
2525
while (scope.upper && scope.type !== 'function') {
2626
scope = scope.upper;
2727
}
28-
29-
var isComponentRender =
28+
var returnsJSX =
29+
node.argument &&
30+
node.argument.type === 'JSXElement'
31+
;
32+
var returnsReactCreateElement =
3033
node.argument &&
31-
node.argument.type === 'JSXElement' &&
34+
node.argument.callee &&
35+
node.argument.callee.property &&
36+
node.argument.callee.property.name === 'createElement'
37+
;
38+
var isComponentRender =
39+
(returnsJSX || returnsReactCreateElement) &&
3240
scope.block.parent.key && scope.block.parent.key.name === 'render'
3341
;
3442
var isEmptyComponentRender =

tests/lib/rules/sort-comp.js

+14
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,20 @@ ruleTester.run('sort-comp', rule, {
205205
jsx: true
206206
},
207207
errors: [{message: 'render must be placed after displayName'}]
208+
}, {
209+
// Must run rule when render uses createElement instead of JSX
210+
code: [
211+
'var Hello = React.createClass({',
212+
' render: function() {',
213+
' return React.createElement("div", null, "Hello");',
214+
' },',
215+
' displayName : \'Hello\',',
216+
'});'
217+
].join('\n'),
218+
ecmaFeatures: {
219+
jsx: true
220+
},
221+
errors: [{message: 'render must be placed after displayName'}]
208222
}, {
209223
// Must force a custom method to be placed before render
210224
code: [

0 commit comments

Comments
 (0)