Skip to content

Commit 53f32af

Browse files
committed
Fix never option of prefer-es6-class
1 parent 9ba1910 commit 53f32af

File tree

2 files changed

+57
-9
lines changed

2 files changed

+57
-9
lines changed

lib/rules/prefer-es6-class.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @fileoverview Prefer es6 class instead of createClass for React Component
2+
* @fileoverview Enforce ES5 or ES6 class for React Components
33
* @author Dan Hamilton
44
*/
55
'use strict';
@@ -17,11 +17,16 @@ module.exports = Components.detect(function(context, components, utils) {
1717
ObjectExpression: function(node) {
1818
if (utils.isES5Component(node) && configuration === 'always') {
1919
context.report(node, 'Component should use es6 class instead of createClass');
20-
} else if (utils.isES6Component(node) && configuration === 'never') {
20+
}
21+
},
22+
ClassDeclaration: function(node) {
23+
if (utils.isES6Component(node) && configuration === 'never') {
2124
context.report(node, 'Component should use createClass instead of es6 class');
2225
}
2326
}
2427
};
2528
});
2629

27-
module.exports.schema = [];
30+
module.exports.schema = [{
31+
enum: ['always', 'never']
32+
}];

tests/lib/rules/prefer-es6-class.js

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ ruleTester.run('prefer-es6-class', rule, {
3838
'Hello.displayName = \'Hello\''
3939
].join('\n'),
4040
parserOptions: parserOptions
41-
},
42-
{
41+
}, {
4342
code: [
4443
'export default class Hello extends React.Component {',
4544
' render() {',
@@ -49,15 +48,33 @@ ruleTester.run('prefer-es6-class', rule, {
4948
'Hello.displayName = \'Hello\''
5049
].join('\n'),
5150
parserOptions: parserOptions
52-
},
53-
{
51+
}, {
5452
code: [
5553
'var Hello = "foo";',
5654
'module.exports = {};'
5755
].join('\n'),
5856
parserOptions: parserOptions
59-
}
60-
],
57+
}, {
58+
code: [
59+
'var Hello = React.createClass({',
60+
' render: function() {',
61+
' return <div>Hello {this.props.name}</div>;',
62+
' }',
63+
'});'
64+
].join('\n'),
65+
options: ['never'],
66+
parserOptions: parserOptions
67+
}, {
68+
code: [
69+
'class Hello extends React.Component {',
70+
' render() {',
71+
' return <div>Hello {this.props.name}</div>;',
72+
' }',
73+
'}'
74+
].join('\n'),
75+
options: ['always'],
76+
parserOptions: parserOptions
77+
}],
6178

6279
invalid: [{
6380
code: [
@@ -72,5 +89,31 @@ ruleTester.run('prefer-es6-class', rule, {
7289
errors: [{
7390
message: 'Component should use es6 class instead of createClass'
7491
}]
92+
}, {
93+
code: [
94+
'var Hello = React.createClass({',
95+
' render: function() {',
96+
' return <div>Hello {this.props.name}</div>;',
97+
' }',
98+
'});'
99+
].join('\n'),
100+
options: ['always'],
101+
parserOptions: parserOptions,
102+
errors: [{
103+
message: 'Component should use es6 class instead of createClass'
104+
}]
105+
}, {
106+
code: [
107+
'class Hello extends React.Component {',
108+
' render() {',
109+
' return <div>Hello {this.props.name}</div>;',
110+
' }',
111+
'}'
112+
].join('\n'),
113+
options: ['never'],
114+
parserOptions: parserOptions,
115+
errors: [{
116+
message: 'Component should use createClass instead of es6 class'
117+
}]
75118
}
76119
]});

0 commit comments

Comments
 (0)