From d9d21934427ee3c710d37aa341483dc0b82f12d4 Mon Sep 17 00:00:00 2001 From: Chiawen Chen Date: Sun, 20 Oct 2019 18:43:53 +0800 Subject: [PATCH] [eslint] enable eslint-plugin-eslint-plugin --- .eslintrc | 3 +- lib/rules/jsx-child-element-spacing.js | 2 +- package.json | 1 + .../rules/default-props-match-prop-types.js | 45 ++++++++++--------- tests/lib/rules/destructuring-assignment.js | 18 +++----- tests/lib/rules/jsx-curly-brace-presence.js | 3 +- tests/lib/rules/jsx-curly-spacing.js | 9 ++-- tests/lib/rules/jsx-no-undef.js | 3 +- .../lib/rules/jsx-one-expression-per-line.js | 20 +-------- tests/lib/rules/jsx-pascal-case.js | 7 ++- tests/lib/rules/jsx-wrap-multilines.js | 2 +- .../no-redundant-should-component-update.js | 9 ++-- tests/lib/rules/no-typos.js | 29 +----------- tests/lib/rules/no-unused-prop-types.js | 34 -------------- tests/lib/rules/prop-types.js | 3 +- tests/lib/rules/react-in-jsx-scope.js | 5 ++- tests/lib/rules/require-default-props.js | 20 +-------- 17 files changed, 63 insertions(+), 150 deletions(-) diff --git a/.eslintrc b/.eslintrc index a221189379..4d2d2a26fb 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,6 +1,7 @@ { "root": true, - "extends": "airbnb-base", + "extends": ["airbnb-base", "plugin:eslint-plugin/recommended"], + "plugins": ["eslint-plugin"], "env": { "es6": true, "node": true diff --git a/lib/rules/jsx-child-element-spacing.js b/lib/rules/jsx-child-element-spacing.js index 0d0756fef0..6c78257626 100644 --- a/lib/rules/jsx-child-element-spacing.js +++ b/lib/rules/jsx-child-element-spacing.js @@ -45,7 +45,7 @@ module.exports = { recommended: false, url: docsUrl('jsx-child-element-spacing') }, - fixable: false, + fixable: null, schema: [ { type: 'object', diff --git a/package.json b/package.json index 64c0ffd72d..e88979f187 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "dependencies": { "array-includes": "^3.0.3", "doctrine": "^2.1.0", + "eslint-plugin-eslint-plugin": "^2.1.0", "has": "^1.0.3", "jsx-ast-utils": "^2.2.1", "object.entries": "^1.1.0", diff --git a/tests/lib/rules/default-props-match-prop-types.js b/tests/lib/rules/default-props-match-prop-types.js index 5e244cbec7..9b449f0ae3 100644 --- a/tests/lib/rules/default-props-match-prop-types.js +++ b/tests/lib/rules/default-props-match-prop-types.js @@ -268,7 +268,8 @@ ruleTester.run('default-props-match-prop-types', rule, { 'Greeting.defaultProps = {', ' foo: "foo"', '};' - ].join('\n') + ].join('\n'), + parser: parsers.BABEL_ESLINT }, { code: [ @@ -530,7 +531,8 @@ ruleTester.run('default-props-match-prop-types', rule, { ' ...defaults,', ' bar: "bar"', '};' - ].join('\n') + ].join('\n'), + parser: parsers.BABEL_ESLINT }, // @@ -845,6 +847,26 @@ ruleTester.run('default-props-match-prop-types', rule, { column: 3 }] }, + { + code: [ + 'function MyStatelessComponent({ foo, bar }) {', + ' return
{foo}{bar}
;', + '}', + 'MyStatelessComponent.propTypes = {', + ' foo: React.PropTypes.string,', + ' bar: React.PropTypes.string.isRequired', + '};', + 'MyStatelessComponent.defaultProps = {', + ' baz: "baz"', + '};' + ].join('\n'), + errors: [{ + message: 'defaultProp "baz" has no corresponding propTypes declaration.', + line: 9, + column: 3 + }], + parser: parsers.BABEL_ESLINT + }, { code: [ 'function MyStatelessComponent({ foo, bar }) {', @@ -1348,25 +1370,6 @@ ruleTester.run('default-props-match-prop-types', rule, { column: 5 }] }, - { - code: [ - 'function MyStatelessComponent({ foo, bar }) {', - ' return
{foo}{bar}
;', - '}', - 'MyStatelessComponent.propTypes = {', - ' foo: React.PropTypes.string,', - ' bar: React.PropTypes.string.isRequired', - '};', - 'MyStatelessComponent.defaultProps = {', - ' baz: "baz"', - '};' - ].join('\n'), - errors: [{ - message: 'defaultProp "baz" has no corresponding propTypes declaration.', - line: 9, - column: 3 - }] - }, { code: [ 'class Greeting extends React.Component {', diff --git a/tests/lib/rules/destructuring-assignment.js b/tests/lib/rules/destructuring-assignment.js index 5aa5d2873b..b8eaefe620 100644 --- a/tests/lib/rules/destructuring-assignment.js +++ b/tests/lib/rules/destructuring-assignment.js @@ -21,15 +21,6 @@ const parserOptions = { const ruleTester = new RuleTester({parserOptions}); ruleTester.run('destructuring-assignment', rule, { valid: [{ - code: `const Foo = class extends React.PureComponent { - render() { - const { foo } = this.props; - return
{foo}
; - } - };`, - options: ['always'], - parser: parsers.BABEL_ESLINT - }, { code: `const MyComponent = ({ id, className }) => (
);` @@ -102,15 +93,16 @@ ruleTester.run('destructuring-assignment', rule, { return
{foo}
; } };`, - options: ['always'], - parser: parsers.BABEL_ESLINT + options: ['always'] }, { code: `const Foo = class extends React.PureComponent { render() { const { foo } = this.props; return
{foo}
; } - };` + };`, + options: ['always'], + parser: parsers.BABEL_ESLINT }, { code: `const Foo = class extends React.PureComponent { render() { @@ -119,7 +111,7 @@ ruleTester.run('destructuring-assignment', rule, { } };`, options: ['always'], - parser: parsers.BABEL_ESLINT + parser: parsers.TYPESCRIPT_ESLINT }, { code: `const MyComponent = (props) => { const { h, i } = hi; diff --git a/tests/lib/rules/jsx-curly-brace-presence.js b/tests/lib/rules/jsx-curly-brace-presence.js index c6dce207d0..1e137a6c8e 100755 --- a/tests/lib/rules/jsx-curly-brace-presence.js +++ b/tests/lib/rules/jsx-curly-brace-presence.js @@ -508,7 +508,8 @@ ruleTester.run('jsx-curly-brace-presence', rule, { code: `foo`, output: `foo`, options: [{props: 'always'}], - errors: [{message: missingCurlyMessage}] + errors: [{message: missingCurlyMessage}], + parser: parsers.BABEL_ESLINT }, { code: 'foo bar ', diff --git a/tests/lib/rules/jsx-curly-spacing.js b/tests/lib/rules/jsx-curly-spacing.js index 859ac71365..4a38804354 100644 --- a/tests/lib/rules/jsx-curly-spacing.js +++ b/tests/lib/rules/jsx-curly-spacing.js @@ -405,7 +405,8 @@ ruleTester.run('jsx-curly-spacing', rule, { '...bar', '} />;' ].join('\n'), - options: [{attributes: {when: 'never'}}] + options: [{attributes: {when: 'never'}}], + parser: parsers.BABEL_ESLINT }, { code: [ '{bar}', options: [{attributes: {when: 'always'}}] - }, { - code: '{bar}', - options: [{attributes: {when: 'always'}}] }, { code: [ '', @@ -630,7 +628,8 @@ ruleTester.run('jsx-curly-spacing', rule, { '...bar', '} />;' ].join('\n'), - options: ['always'] + options: ['always'], + parser: parsers.BABEL_ESLINT }, { code: [ ');' }, { - code: '/*eslint no-undef:1*/ var React, App; React.render();' + code: '/*eslint no-undef:1*/ var React, App; React.render();', + parser: parsers.BABEL_ESLINT }, { code: '/*eslint no-undef:1*/ var React; React.render();' }, { diff --git a/tests/lib/rules/jsx-one-expression-per-line.js b/tests/lib/rules/jsx-one-expression-per-line.js index 2778d16e42..92c3e93898 100644 --- a/tests/lib/rules/jsx-one-expression-per-line.js +++ b/tests/lib/rules/jsx-one-expression-per-line.js @@ -522,23 +522,6 @@ ruleTester.run('jsx-one-expression-per-line', rule, { ].join('\n'), errors: [{message: '` bar` must be placed on a new line'}], parserOptions - }, { - code: [ - '
', - ' foo {"bar"}', - '
' - ].join('\n'), - output: [ - '
', - ' foo ', - '{\' \'}', - '{"bar"}', - '
' - ].join('\n'), - errors: [ - {message: '`{"bar"}` must be placed on a new line'} - ], - parserOptions }, { code: [ '
', @@ -705,7 +688,8 @@ ruleTester.run('jsx-one-expression-per-line', rule, { '' ].join('\n'), errors: [{message: '`Foo` must be placed on a new line'}], - parserOptions + parserOptions, + parser: parsers.BABEL_ESLINT }, { code: [ '', diff --git a/tests/lib/rules/jsx-pascal-case.js b/tests/lib/rules/jsx-pascal-case.js index f0965730f2..f15c9b633d 100644 --- a/tests/lib/rules/jsx-pascal-case.js +++ b/tests/lib/rules/jsx-pascal-case.js @@ -12,6 +12,8 @@ const RuleTester = require('eslint').RuleTester; const rule = require('../../../lib/rules/jsx-pascal-case'); +const parsers = require('../../helpers/parsers'); + const parserOptions = { ecmaVersion: 2018, sourceType: 'module', @@ -46,6 +48,9 @@ ruleTester.run('jsx-pascal-case', rule, { code: '' }, { code: '' + }, { + code: '', + parser: parsers.BABEL_ESLINT }, { code: '', options: [{allowAllCaps: true}] @@ -59,8 +64,6 @@ ruleTester.run('jsx-pascal-case', rule, { }, { code: '', options: [{ignore: ['IGNORED']}] - }, { - code: '' }, { code: '<$ />' }, { diff --git a/tests/lib/rules/jsx-wrap-multilines.js b/tests/lib/rules/jsx-wrap-multilines.js index cdf0718689..ff43136f2b 100644 --- a/tests/lib/rules/jsx-wrap-multilines.js +++ b/tests/lib/rules/jsx-wrap-multilines.js @@ -1083,7 +1083,7 @@ ruleTester.run('jsx-wrap-multilines', rule, { ] }, { code: DECLARATION_TERNARY_PAREN_FRAGMENT, - parser: parsers.BABEL_ESLINT, + parser: parsers.TYPESCRIPT_ESLINT, output: addNewLineSymbols(DECLARATION_TERNARY_PAREN_FRAGMENT), options: [{declaration: 'parens-new-line'}], errors: [ diff --git a/tests/lib/rules/no-redundant-should-component-update.js b/tests/lib/rules/no-redundant-should-component-update.js index 34c9724413..de3a37518b 100644 --- a/tests/lib/rules/no-redundant-should-component-update.js +++ b/tests/lib/rules/no-redundant-should-component-update.js @@ -44,22 +44,23 @@ ruleTester.run('no-redundant-should-component-update', rule, { { code: ` class Foo extends React.Component { - shouldComponentUpdate = () => { + shouldComponentUpdate() { return true; } } `, - parser: parsers.BABEL_ESLINT, - parserOptions + parserOptions, + parser: parsers.BABEL_ESLINT }, { code: ` class Foo extends React.Component { - shouldComponentUpdate() { + shouldComponentUpdate = () => { return true; } } `, + parser: parsers.BABEL_ESLINT, parserOptions }, { diff --git a/tests/lib/rules/no-typos.js b/tests/lib/rules/no-typos.js index 0a001e304e..24e982fd08 100644 --- a/tests/lib/rules/no-typos.js +++ b/tests/lib/rules/no-typos.js @@ -333,19 +333,6 @@ ruleTester.run('no-typos', rule, { `, parser: parsers.BABEL_ESLINT, parserOptions - }, { - code: ` - import PropTypes from "prop-types"; - class Component extends React.Component {}; - Component.propTypes = { - a: PropTypes.oneOf([ - 'hello', - 'hi' - ]) - } - `, - parser: parsers.BABEL_ESLINT, - parserOptions }, { code: ` import PropTypes from "prop-types"; @@ -406,21 +393,6 @@ ruleTester.run('no-typos', rule, { } `, parserOptions - }, { - code: ` - import PropTypes from "prop-types"; - class Component extends React.Component {}; - Component.childContextTypes = { - a: PropTypes.string, - b: PropTypes.string.isRequired, - c: PropTypes.shape({ - d: PropTypes.string, - e: PropTypes.number.isRequired, - }).isRequired - } - `, - parser: parsers.BABEL_ESLINT, - parserOptions }, { code: ` import PropTypes from "prop-types"; @@ -1366,6 +1338,7 @@ ruleTester.run('no-typos', rule, { }).isrequired } `, + parser: parsers.BABEL_ESLINT, parserOptions, errors: [{ message: 'Typo in prop type chain qualifier: isrequired' diff --git a/tests/lib/rules/no-unused-prop-types.js b/tests/lib/rules/no-unused-prop-types.js index df76b3117e..0b32121c48 100644 --- a/tests/lib/rules/no-unused-prop-types.js +++ b/tests/lib/rules/no-unused-prop-types.js @@ -5025,40 +5025,6 @@ ruleTester.run('no-unused-prop-types', rule, { errors: [{ message: '\'lastname\' PropType is defined but prop is never used' }] - }, { - code: [ - 'type Person = {', - ' ...data,', - ' lastname: string', - '};', - 'class Hello extends React.Component {', - ' props: Person;', - ' render () {', - ' return
Hello {this.props.firstname}
;', - ' }', - '}' - ].join('\n'), - parser: parsers.BABEL_ESLINT, - errors: [{ - message: '\'lastname\' PropType is defined but prop is never used' - }] - }, { - code: [ - 'type Person = {|', - ' ...data,', - ' lastname: string', - '|};', - 'class Hello extends React.Component {', - ' props: Person;', - ' render () {', - ' return
Hello {this.props.firstname}
;', - ' }', - '}' - ].join('\n'), - parser: parsers.BABEL_ESLINT, - errors: [{ - message: '\'lastname\' PropType is defined but prop is never used' - }] }, { code: [ 'class Hello extends React.Component {', diff --git a/tests/lib/rules/prop-types.js b/tests/lib/rules/prop-types.js index 7f533b4d26..b55fd6e0db 100755 --- a/tests/lib/rules/prop-types.js +++ b/tests/lib/rules/prop-types.js @@ -1448,7 +1448,8 @@ ruleTester.run('prop-types', rule, { ' }', '});' ].join('\n'), - options: [{skipUndeclared: true}] + options: [{skipUndeclared: true}], + parser: parsers.BABEL_ESLINT }, { code: [ 'class Hello extends React.Component {', diff --git a/tests/lib/rules/react-in-jsx-scope.js b/tests/lib/rules/react-in-jsx-scope.js index 4371074d48..47f206ddf3 100644 --- a/tests/lib/rules/react-in-jsx-scope.js +++ b/tests/lib/rules/react-in-jsx-scope.js @@ -41,7 +41,10 @@ ruleTester.run('react-in-jsx-scope', rule, { {code: 'var React; ;'}, {code: 'var React, App, a=1; ;'}, {code: 'var React, App, a=1; function elem() { return ; }'}, - {code: 'var React, App; ;'}, + { + code: 'var React, App; ;', + parser: parsers.BABEL_ESLINT + }, {code: '/** @jsx Foo */ var Foo, App; ;'}, {code: '/** @jsx Foo.Bar */ var Foo, App; ;'}, { diff --git a/tests/lib/rules/require-default-props.js b/tests/lib/rules/require-default-props.js index e537414f2c..c691961ed7 100644 --- a/tests/lib/rules/require-default-props.js +++ b/tests/lib/rules/require-default-props.js @@ -514,7 +514,8 @@ ruleTester.run('require-default-props', rule, { ' ...defaults,', ' bar: "bar"', '};' - ].join('\n') + ].join('\n'), + parser: parsers.BABEL_ESLINT }, // @@ -1789,23 +1790,6 @@ ruleTester.run('require-default-props', rule, { column: 47 }] }, - { - code: [ - 'type Props = {', - ' foo?: string', - '};', - - 'function Hello(props: Props) {', - ' return
Hello {props.foo}
;', - '}' - ].join('\n'), - parser: parsers.BABEL_ESLINT, - errors: [{ - message: 'propType "foo" is not required, but has no corresponding defaultProps declaration.', - line: 2, - column: 3 - }] - }, { code: [ 'type Props = {',