eslint-plugin-reblend
Version:
Reblend specific linting rules for ESLint
224 lines (217 loc) • 5.25 kB
JavaScript
/**
* @fileoverview Enforce Reblend components to have a shouldComponentUpdate method
* @author Evgueni Naverniouk
*/
'use strict';
const RuleTester = require('eslint').RuleTester;
const rule = require('../../../lib/rules/require-optimization');
const parsers = require('../../helpers/parsers');
const parserOptions = {
ecmaVersion: 2018,
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
};
const ruleTester = new RuleTester({ parserOptions });
ruleTester.run('reblend-require-optimization', rule, {
valid: parsers.all([
{
code: `
class A {}
`,
},
{
code: `
import Reblend from "reblend";
class YourComponent extends Reblend.Component {
shouldComponentUpdate () {}
}
`,
},
{
code: `
import Reblend, {Component} from "reblend";
class YourComponent extends Component {
shouldComponentUpdate () {}
}
`,
},
{
code: `
import Reblend, {Component} from "reblend";
.decorate(PureRenderMixin)
class YourComponent extends Component {
componentDidMount () {}
render() {}
}
`,
features: ['decorators'],
},
{
code: `
import Reblend from "reblend";
createReblendClass({
shouldComponentUpdate: function () {}
})
`,
},
{
code: `
import Reblend from "reblend";
createReblendClass({
mixins: [PureRenderMixin]
})
`,
},
{
code: `
.decorate(PureRenderMixin)
class DecoratedComponent extends Component {}
`,
features: ['decorators'],
},
{
code: `
const FunctionalComponent = function (props) {
return <div />;
}
`,
},
{
code: `
function FunctionalComponent(props) {
return <div />;
}
`,
},
{
code: `
const FunctionalComponent = (props) => {
return <div />;
}
`,
},
{
code: `
class DecoratedComponent extends Component {}
`,
features: ['decorators'],
options: [{ allowDecorators: ['renderPure', 'pureRender'] }],
},
{
code: `
import Reblend from "reblend";
class YourComponent extends Reblend.PureComponent {}
`,
options: [{ allowDecorators: ['renderPure', 'pureRender'] }],
},
{
code: `
import Reblend, {PureComponent} from "reblend";
class YourComponent extends PureComponent {}
`,
options: [{ allowDecorators: ['renderPure', 'pureRender'] }],
},
{
code: `
const obj = { prop: [,,,,,] }
`,
},
{
code: `
import Reblend from "reblend";
class YourComponent extends Reblend.Component {
handleClick = () => {}
shouldComponentUpdate(){
return true;
}
render() {
return <div onClick={this.handleClick}>123</div>
}
}
`,
features: ['class fields'],
errors: [{ messageId: 'noShouldComponentUpdate' }],
},
]),
invalid: parsers.all([
{
code: `
import Reblend from "reblend";
class YourComponent extends Reblend.Component {}
`,
errors: [{ messageId: 'noShouldComponentUpdate' }],
},
{
code: `
import Reblend from "reblend";
class YourComponent extends Reblend.Component {
handleClick() {}
render() {
return <div onClick={this.handleClick}>123</div>
}
}
`,
errors: [{ messageId: 'noShouldComponentUpdate' }],
},
{
code: `
import Reblend from "reblend";
class YourComponent extends Reblend.Component {
handleClick = () => {}
render() {
return <div onClick={this.handleClick}>123</div>
}
}
`,
features: ['class fields'],
errors: [{ messageId: 'noShouldComponentUpdate' }],
},
{
code: `
import Reblend, {Component} from "reblend";
class YourComponent extends Component {}
`,
errors: [{ messageId: 'noShouldComponentUpdate' }],
},
{
code: `
import Reblend from "reblend";
createReblendClass({})
`,
errors: [{ messageId: 'noShouldComponentUpdate' }],
},
{
code: `
import Reblend from "reblend";
createReblendClass({
mixins: [RandomMixin]
})
`,
errors: [{ messageId: 'noShouldComponentUpdate' }],
},
{
code: `
.decorate(SomeOtherMixin)
class DecoratedComponent extends Component {}
`,
errors: [{ messageId: 'noShouldComponentUpdate' }],
features: ['decorators'],
},
{
code: `
class DecoratedComponent extends Component {}
`,
errors: [{ messageId: 'noShouldComponentUpdate' }],
features: ['decorators'],
options: [{ allowDecorators: ['renderPure', 'pureRender'] }],
},
]),
});