Skip to content

Commit 1ab838c

Browse files
committed
Merge pull request #119 from rpl/fix/displayName-and-propTypes-on-jsx-false
Fix detection of missing displayName and propTypes when ecmaFeatures.jsx is false
2 parents a00bc6e + 8626f72 commit 1ab838c

File tree

4 files changed

+43
-0
lines changed

4 files changed

+43
-0
lines changed

lib/rules/display-name.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@ module.exports = function(context) {
117117
}
118118
markDisplayNameAsDeclared(node);
119119
});
120+
121+
if (componentUtil.isComponentDefinition(node)) {
122+
componentList.set(context, node, {
123+
isReactComponent: true
124+
});
125+
}
120126
},
121127

122128
'Program:exit': function() {

lib/rules/prop-types.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,12 @@ module.exports = function(context) {
509509
}
510510
markPropTypesAsDeclared(node, property.value);
511511
});
512+
513+
if (componentUtil.isComponentDefinition(node)) {
514+
componentList.set(context, node, {
515+
isReactComponent: true
516+
});
517+
}
512518
},
513519

514520
'Program:exit': function() {

tests/lib/rules/display-name.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,20 @@ eslintTester.addRuleTest('lib/rules/display-name', {
8989
}],
9090

9191
invalid: [{
92+
code: [
93+
'var Hello = React.createClass({',
94+
' render: function() {',
95+
' return React.createElement("div", {}, "text content");',
96+
' }',
97+
'});'
98+
].join('\n'),
99+
ecmaFeatures: {
100+
jsx: false
101+
},
102+
errors: [{
103+
message: 'Component definition is missing display name'
104+
}]
105+
}, {
92106
code: [
93107
'var Hello = React.createClass({',
94108
' render: function() {',

tests/lib/rules/prop-types.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,23 @@ eslintTester.addRuleTest('lib/rules/prop-types', {
420420

421421
invalid: [
422422
{
423+
code: [
424+
'var Hello = React.createClass({',
425+
' render: function() {',
426+
' return React.createElement("div", {}, this.props.name);',
427+
' }',
428+
'});'
429+
].join('\n'),
430+
ecmaFeatures: {
431+
jsx: false
432+
},
433+
errors: [{
434+
message: '\'name\' is missing in props validation',
435+
line: 3,
436+
column: 53,
437+
type: 'Identifier'
438+
}]
439+
}, {
423440
code: [
424441
'var Hello = React.createClass({',
425442
' render: function() {',

0 commit comments

Comments
 (0)