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: [