diff --git a/lib/rules/sort-comp.js b/lib/rules/sort-comp.js
index 4c324ec75b..dd52b1ef41 100644
--- a/lib/rules/sort-comp.js
+++ b/lib/rules/sort-comp.js
@@ -291,6 +291,7 @@ module.exports = {
*/
function getComponentProperties(node) {
switch (node.type) {
+ case 'ClassExpression':
case 'ClassDeclaration':
return node.body.body;
case 'ObjectExpression':
diff --git a/tests/lib/rules/sort-comp.js b/tests/lib/rules/sort-comp.js
index 0ccf42f7da..3ab036d74c 100644
--- a/tests/lib/rules/sort-comp.js
+++ b/tests/lib/rules/sort-comp.js
@@ -248,6 +248,34 @@ ruleTester.run('sort-comp', rule, {
'render'
]
}]
+ }, {
+ // Non-react classes should be ignored, even in expressions
+ code: [
+ 'return class Hello {',
+ ' render() {',
+ ' return
{this.props.text}
;',
+ ' }',
+ ' props: { text: string };',
+ ' constructor() {}',
+ ' state: Object = {};',
+ '}'
+ ].join('\n'),
+ parser: 'babel-eslint',
+ parserOptions: parserOptions
+ }, {
+ // Non-react classes should be ignored, even in expressions
+ code: [
+ 'return class {',
+ ' render() {',
+ ' return {this.props.text}
;',
+ ' }',
+ ' props: { text: string };',
+ ' constructor() {}',
+ ' state: Object = {};',
+ '}'
+ ].join('\n'),
+ parser: 'babel-eslint',
+ parserOptions: parserOptions
}],
invalid: [{
@@ -286,6 +314,20 @@ ruleTester.run('sort-comp', rule, {
].join('\n'),
parserOptions: parserOptions,
errors: [{message: 'render should be placed after onClick'}]
+ }, {
+ // Must force a custom method to be placed before render, even in function
+ code: [
+ 'var Hello = () => {',
+ ' return class Test extends React.Component {',
+ ' render () {',
+ ' return Hello
;',
+ ' }',
+ ' onClick () {}',
+ ' }',
+ '};'
+ ].join('\n'),
+ parserOptions: parserOptions,
+ errors: [{message: 'render should be placed after onClick'}]
}, {
// Must force a custom method to be placed after render if no 'everything-else' group is specified
code: [