Skip to content

Commit 82b3aa9

Browse files
gitimyannickcr
authored andcommitted
Fix display-name when JSON style is used for defining components (fixes #590)
1 parent 750f979 commit 82b3aa9

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

lib/rules/display-name.js

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,25 @@ module.exports = Components.detect(function(context, components, utils) {
2424
* @returns {Boolean} True if we are declaring a display name, false if not.
2525
*/
2626
function isDisplayNameDeclaration(node) {
27-
// Special case for class properties
28-
// (babel-eslint does not expose property name so we have to rely on tokens)
29-
if (node.type === 'ClassProperty') {
30-
var tokens = sourceCode.getFirstTokens(node, 2);
31-
if (
32-
tokens[0].value === 'displayName' ||
33-
(tokens[1] && tokens[1].value === 'displayName')
34-
) {
35-
return true;
36-
}
37-
return false;
27+
switch (node.type) {
28+
// Special case for class properties
29+
// (babel-eslint does not expose property name so we have to rely on tokens)
30+
case 'ClassProperty':
31+
var tokens = sourceCode.getFirstTokens(node, 2);
32+
if (
33+
tokens[0].value === 'displayName' ||
34+
(tokens[1] && tokens[1].value === 'displayName')
35+
) {
36+
return true;
37+
}
38+
return false;
39+
case 'Identifier':
40+
return node.name === 'displayName';
41+
case 'Literal':
42+
return node.value === 'displayName';
43+
default:
44+
return false;
3845
}
39-
40-
return Boolean(
41-
node &&
42-
node.name === 'displayName'
43-
);
4446
}
4547

4648
/**

tests/lib/rules/display-name.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,16 @@ ruleTester.run('display-name', rule, {
153153
'});'
154154
].join('\n'),
155155
parserOptions: parserOptions
156+
}, {
157+
code: [
158+
'module.exports = React.createClass({',
159+
' "displayName": "Hello",',
160+
' "render": function() {',
161+
' return <div>Hello {this.props.name}</div>;',
162+
' }',
163+
'});'
164+
].join('\n'),
165+
parserOptions: parserOptions
156166
}, {
157167
code: [
158168
'var Hello = React.createClass({',

0 commit comments

Comments
 (0)