Clean up @babel/eslint-plugin (#10756)

* Clean up @babel/eslint-plugin

* Add directory field to package.json

* Update eslint/babel-eslint-plugin/README.md

Co-Authored-By: Huáng Jùnliàng <jlhwung@gmail.com>

* Incorporate feedback :)
This commit is contained in:
Kai Cataldo 2019-11-25 17:15:34 -05:00 committed by Huáng Jùnliàng
parent e81bbd69b3
commit 7f732ad019
26 changed files with 139 additions and 150 deletions

View File

@ -1,24 +1,22 @@
# eslint-plugin-babel # @babel/eslint-plugin
An `eslint` plugin companion to `babel-eslint`. `babel-eslint` does a great job at adapting `eslint` Companion rules for `@babel/eslint-parser`. `@babel/eslint-parser` does a great job at adapting `eslint`
for use with Babel, but it can't change the built in rules to support experimental features. for use with Babel, but it can't change the built in rules to support experimental features.
`eslint-plugin-babel` re-implements problematic rules so they do not give false positives or negatives. `@babel/eslint-plugin` re-implements problematic rules so they do not give false positives or negatives.
> Requires Node 4 or greater > Requires Node 10.9 or greater
### Install ### Install
```sh ```sh
npm install eslint-plugin-babel --save-dev npm install @babel/eslint-plugin --save-dev
``` ```
Load the plugin in your `.eslintrc` file: Load the plugin in your `.eslintrc.json` file:
```json ```json
{ {
"plugins": [ "plugins": ["@babel/eslint-plugin"]
"babel"
]
} }
``` ```
@ -28,14 +26,14 @@ original ones as well!).
```json ```json
{ {
"rules": { "rules": {
"babel/new-cap": 1, "babel/new-cap": "error",
"babel/camelcase": 1, "babel/camelcase": "error",
"babel/no-invalid-this": 1, "babel/no-invalid-this": "error",
"babel/object-curly-spacing": 1, "babel/object-curly-spacing": "error",
"babel/quotes": 1, "babel/quotes": "error",
"babel/semi": 1, "babel/semi": "error",
"babel/no-unused-expressions": 1, "babel/no-unused-expressions": "error",
"babel/valid-typeof": 1 "babel/valid-typeof": "error"
} }
} }
``` ```

View File

@ -1,11 +1,12 @@
{ {
"name": "eslint-plugin-babel", "name": "@babel/eslint-plugin",
"version": "5.3.0", "version": "0.0.0",
"description": "an eslint rule plugin companion to babel-eslint", "description": "Companion rules for @babel/eslint-parser",
"main": "lib/index.js", "main": "lib/index.js",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/babel/eslint-plugin-babel.git" "url": "git+https://github.com/babel/babel.git",
"directory": "eslint/babel-eslint-plugin"
}, },
"keywords": [ "keywords": [
"babel", "babel",
@ -18,12 +19,12 @@
"license": "MIT", "license": "MIT",
"private": true, "private": true,
"engines": { "engines": {
"node": ">=4" "node": ">=10.9"
}, },
"bugs": { "bugs": {
"url": "https://github.com/babel/eslint-plugin-babel/issues" "url": "https://github.com/babel/babel/issues"
}, },
"homepage": "https://github.com/babel/eslint-plugin-babel#readme", "homepage": "https://github.com/babel/babel/tree/master/eslint/babel-eslint-plugin",
"peerDependencies": { "peerDependencies": {
"eslint": ">=4.0.0" "eslint": ">=4.0.0"
}, },

View File

@ -1,38 +1,52 @@
"use strict"; import arrayBracketSpacing from "./rules/array-bracket-spacing";
import arrowParens from "./rules/arrow-parens";
import flowObjectType from "./rules/flow-object-type";
import funcParamsCommaDangle from "./rules/func-params-comma-dangle";
import generatorStarSpacing from "./rules/generator-star-spacing";
import newCap from "./rules/new-cap";
import camelcase from "./rules/camelcase";
import noAwaitInLoop from "./rules/no-await-in-loop";
import noInvalidThis from "./rules/no-invalid-this";
import noUnusedExpressions from "./rules/no-unused-expressions";
import objectCurlySpacing from "./rules/object-curly-spacing";
import objectShorthand from "./rules/object-shorthand";
import quotes from "./rules/quotes";
import semi from "./rules/semi";
import validTypeof from "./rules/valid-typeof";
module.exports = { module.exports = {
rules: { rules: {
"array-bracket-spacing": require("./rules/array-bracket-spacing"), "array-bracket-spacing": arrayBracketSpacing,
"arrow-parens": require("./rules/arrow-parens"), "arrow-parens": arrowParens,
"flow-object-type": require("./rules/flow-object-type"), "flow-object-type": flowObjectType,
"func-params-comma-dangle": require("./rules/func-params-comma-dangle"), "func-params-comma-dangle": funcParamsCommaDangle,
"generator-star-spacing": require("./rules/generator-star-spacing"), "generator-star-spacing": generatorStarSpacing,
"new-cap": require("./rules/new-cap"), "new-cap": newCap,
camelcase: require("./rules/camelcase"), camelcase,
"no-await-in-loop": require("./rules/no-await-in-loop"), "no-await-in-loop": noAwaitInLoop,
"no-invalid-this": require("./rules/no-invalid-this"), "no-invalid-this": noInvalidThis,
"no-unused-expressions": require("./rules/no-unused-expressions"), "no-unused-expressions": noUnusedExpressions,
"object-curly-spacing": require("./rules/object-curly-spacing"), "object-curly-spacing": objectCurlySpacing,
"object-shorthand": require("./rules/object-shorthand"), "object-shorthand": objectShorthand,
quotes: require("./rules/quotes"), quotes,
semi: require("./rules/semi"), semi,
"valid-typeof": require("./rules/valid-typeof"), "valid-typeof": validTypeof,
}, },
rulesConfig: { rulesConfig: {
"array-bracket-spacing": 0, "array-bracket-spacing": "off",
"arrow-parens": 0, "arrow-parens": "off",
camelcase: 0, camelcase: "off",
"flow-object-type": 0, "flow-object-type": "off",
"func-params-comma-dangle": 0, "func-params-comma-dangle": "off",
"generator-star-spacing": 0, "generator-star-spacing": "off",
"new-cap": 0, "new-cap": "off",
"no-await-in-loop": 0, "no-await-in-loop": "off",
"no-invalid-this": 0, "no-invalid-this": "off",
"no-unused-expressions": 0, "no-unused-expressions": "off",
"object-curly-spacing": 0, "object-curly-spacing": "off",
"object-shorthand": 0, "object-shorthand": "off",
quotes: 0, quotes: "off",
semi: 0, semi: "off",
"valid-typeof": 0, "valid-typeof": "off",
}, },
}; };

View File

@ -1,7 +1,6 @@
"use strict";
let isWarnedForDeprecation = false; let isWarnedForDeprecation = false;
module.exports = {
export default {
meta: { meta: {
deprecated: true, deprecated: true,
schema: [ schema: [
@ -25,9 +24,9 @@ module.exports = {
}, },
], ],
}, },
create: function() { create() {
return { return {
Program: function() { Program() {
if ( if (
isWarnedForDeprecation || isWarnedForDeprecation ||
/=-(f|-format)=/.test(process.argv.join("=")) /=-(f|-format)=/.test(process.argv.join("="))

View File

@ -1,7 +1,6 @@
"use strict";
let isWarnedForDeprecation = false; let isWarnedForDeprecation = false;
module.exports = {
export default {
meta: { meta: {
deprecated: true, deprecated: true,
schema: [ schema: [
@ -10,9 +9,9 @@ module.exports = {
}, },
], ],
}, },
create: function() { create() {
return { return {
Program: function() { Program() {
if ( if (
isWarnedForDeprecation || isWarnedForDeprecation ||
/=-(f|-format)=/.test(process.argv.join("=")) /=-(f|-format)=/.test(process.argv.join("="))

View File

@ -9,7 +9,7 @@
// Rule Definition // Rule Definition
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
module.exports = { export default {
meta: { meta: {
docs: { docs: {
description: "enforce camelcase naming convention", description: "enforce camelcase naming convention",

View File

@ -1,7 +1,6 @@
"use strict";
let isWarnedForDeprecation = false; let isWarnedForDeprecation = false;
module.exports = {
export default {
meta: { meta: {
deprecated: true, deprecated: true,
schema: [ schema: [
@ -10,9 +9,9 @@ module.exports = {
}, },
], ],
}, },
create: function() { create() {
return { return {
Program: function() { Program() {
if ( if (
isWarnedForDeprecation || isWarnedForDeprecation ||
/=-(f|-format)=/.test(process.argv.join("=")) /=-(f|-format)=/.test(process.argv.join("="))
@ -24,7 +23,7 @@ module.exports = {
"The babel/flow-object-type rule is deprecated. Please " + "The babel/flow-object-type rule is deprecated. Please " +
"use the flowtype/object-type-delimiter rule instead.\n" + "use the flowtype/object-type-delimiter rule instead.\n" +
// eslint-disable-next-line // eslint-disable-next-line
"Check out https://github.com/gajus/eslint-plugin-flowtype#eslint-plugin-flowtype-rules-object-type-delimiter" "Check out https://github.com/gajus/eslint-plugin-flowtype#eslint-plugin-flowtype-rules-object-type-delimiter",
); );
isWarnedForDeprecation = true; isWarnedForDeprecation = true;

View File

@ -1,7 +1,6 @@
"use strict";
let isWarnedForDeprecation = false; let isWarnedForDeprecation = false;
module.exports = {
export default {
meta: { meta: {
deprecated: true, deprecated: true,
schema: [ schema: [
@ -10,9 +9,9 @@ module.exports = {
}, },
], ],
}, },
create: function() { create() {
return { return {
Program: function() { Program() {
if ( if (
isWarnedForDeprecation || isWarnedForDeprecation ||
/=-(f|-format)=/.test(process.argv.join("=")) /=-(f|-format)=/.test(process.argv.join("="))

View File

@ -1,7 +1,6 @@
"use strict";
let isWarnedForDeprecation = false; let isWarnedForDeprecation = false;
module.exports = {
export default {
meta: { meta: {
deprecated: true, deprecated: true,
schema: [ schema: [
@ -22,9 +21,9 @@ module.exports = {
}, },
], ],
}, },
create: function() { create() {
return { return {
Program: function() { Program() {
if ( if (
isWarnedForDeprecation || isWarnedForDeprecation ||
/=-(f|-format)=/.test(process.argv.join("=")) /=-(f|-format)=/.test(process.argv.join("="))

View File

@ -1,7 +1,6 @@
"use strict"; import ruleComposer from "eslint-rule-composer";
import eslint from "eslint";
const ruleComposer = require("eslint-rule-composer");
const eslint = require("eslint");
const newCapRule = new eslint.Linter().getRules().get("new-cap"); const newCapRule = new eslint.Linter().getRules().get("new-cap");
/** /**
@ -13,7 +12,7 @@ function isDecorator(node) {
return node.parent.type === "Decorator"; return node.parent.type === "Decorator";
} }
module.exports = ruleComposer.filterReports( export default ruleComposer.filterReports(
newCapRule, newCapRule,
problem => !isDecorator(problem.node), problem => !isDecorator(problem.node),
); );

View File

@ -1,14 +1,13 @@
"use strict";
let isWarnedForDeprecation = false; let isWarnedForDeprecation = false;
module.exports = {
export default {
meta: { meta: {
deprecated: true, deprecated: true,
schema: [], schema: [],
}, },
create: function() { create() {
return { return {
Program: function() { Program() {
if ( if (
isWarnedForDeprecation || isWarnedForDeprecation ||
/=-(f|-format)=/.test(process.argv.join("=")) /=-(f|-format)=/.test(process.argv.join("="))

View File

@ -1,10 +1,9 @@
"use strict"; import ruleComposer from "eslint-rule-composer";
import eslint from "eslint";
const ruleComposer = require("eslint-rule-composer");
const eslint = require("eslint");
const noInvalidThisRule = new eslint.Linter().getRules().get("no-invalid-this"); const noInvalidThisRule = new eslint.Linter().getRules().get("no-invalid-this");
module.exports = ruleComposer.filterReports(noInvalidThisRule, problem => { export default ruleComposer.filterReports(noInvalidThisRule, problem => {
let inClassProperty = false; let inClassProperty = false;
let node = problem.node; let node = problem.node;

View File

@ -1,7 +1,6 @@
"use strict"; import ruleComposer from "eslint-rule-composer";
import eslint from "eslint";
const ruleComposer = require("eslint-rule-composer");
const eslint = require("eslint");
const rule = new eslint.Linter().getRules().get("no-unused-expressions"); const rule = new eslint.Linter().getRules().get("no-unused-expressions");
/** /**
@ -57,7 +56,7 @@ function isOptionalCallExpression(node) {
); );
} }
module.exports = ruleComposer.filterReports( export default ruleComposer.filterReports(
rule, rule,
problem => problem =>
!isInDoStatement(problem.node) && !isOptionalCallExpression(problem.node), !isInDoStatement(problem.node) && !isOptionalCallExpression(problem.node),

View File

@ -1,12 +1,11 @@
"use strict"; import ruleComposer from "eslint-rule-composer";
import eslint from "eslint";
const ruleComposer = require("eslint-rule-composer");
const eslint = require("eslint");
const objectCurlySpacingRule = new eslint.Linter() const objectCurlySpacingRule = new eslint.Linter()
.getRules() .getRules()
.get("object-curly-spacing"); .get("object-curly-spacing");
module.exports = ruleComposer.filterReports( export default ruleComposer.filterReports(
objectCurlySpacingRule, objectCurlySpacingRule,
(problem, metadata) => { (problem, metadata) => {
const node = problem.node; const node = problem.node;

View File

@ -1,7 +1,6 @@
"use strict";
let isWarnedForDeprecation = false; let isWarnedForDeprecation = false;
module.exports = {
export default {
meta: { meta: {
deprecated: true, deprecated: true,
schema: [ schema: [
@ -10,9 +9,9 @@ module.exports = {
}, },
], ],
}, },
create: function() { create() {
return { return {
Program: function() { Program() {
if ( if (
isWarnedForDeprecation || isWarnedForDeprecation ||
/=-(f|-format)=/.test(process.argv.join("=")) /=-(f|-format)=/.test(process.argv.join("="))

View File

@ -1,10 +1,9 @@
"use strict"; import ruleComposer from "eslint-rule-composer";
import eslint from "eslint";
const ruleComposer = require("eslint-rule-composer");
const eslint = require("eslint");
const quotesRule = new eslint.Linter().getRules().get("quotes"); const quotesRule = new eslint.Linter().getRules().get("quotes");
module.exports = ruleComposer.filterReports(quotesRule, problem => { export default ruleComposer.filterReports(quotesRule, problem => {
// Workaround for JSX fragment syntax until // Workaround for JSX fragment syntax until
// https://github.com/eslint/eslint/issues/9662 // https://github.com/eslint/eslint/issues/9662
if (problem.node.parent.type === "JSXFragment") { if (problem.node.parent.type === "JSXFragment") {

View File

@ -1,7 +1,6 @@
"use strict"; import ruleComposer from "eslint-rule-composer";
import eslint from "eslint";
const ruleComposer = require("eslint-rule-composer");
const eslint = require("eslint");
const semiRule = new eslint.Linter().getRules().get("semi"); const semiRule = new eslint.Linter().getRules().get("semi");
const OPT_OUT_PATTERN = /^[-[(/+`]/; // One of [(/+-` const OPT_OUT_PATTERN = /^[-[(/+`]/; // One of [(/+-`
@ -104,7 +103,7 @@ const semiRuleWithClassProperty = ruleComposer.joinReports([
}), }),
]); ]);
module.exports = ruleComposer.filterReports( export default ruleComposer.filterReports(
semiRuleWithClassProperty, semiRuleWithClassProperty,
problem => { problem => {
const node = problem.node; const node = problem.node;

View File

@ -1,9 +1,8 @@
"use strict"; import ruleComposer from "eslint-rule-composer";
import eslint from "eslint";
const ruleComposer = require("eslint-rule-composer");
const eslint = require("eslint");
const validTypeOf = new eslint.Linter().getRules().get("valid-typeof"); const validTypeOf = new eslint.Linter().getRules().get("valid-typeof");
module.exports = ruleComposer.filterReports(validTypeOf, problem => { export default ruleComposer.filterReports(validTypeOf, problem => {
return problem.node.value !== "bigint"; return problem.node.value !== "bigint";
}); });

View File

@ -3,14 +3,12 @@
* @author Nicholas C. Zakas * @author Nicholas C. Zakas
*/ */
"use strict";
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Requirements // Requirements
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
const rule = require("../../src/rules/camelcase"), import rule from "../../src/rules/camelcase";
RuleTester = require("../helpers/RuleTester"); import RuleTester from "../helpers/RuleTester";
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Tests // Tests

View File

@ -3,10 +3,10 @@
* @author Nicholas C. Zakas * @author Nicholas C. Zakas
*/ */
var rule = require("../../src/rules/new-cap"), import rule from "../../src/rules/new-cap";
RuleTester = require("../helpers/RuleTester"); import RuleTester from "../helpers/RuleTester";
var ruleTester = new RuleTester(); const ruleTester = new RuleTester();
ruleTester.run("babel/new-cap", rule, { ruleTester.run("babel/new-cap", rule, {
valid: [ valid: [
// Original test cases. // Original test cases.

View File

@ -3,15 +3,13 @@
* @author Toru Nagashima * @author Toru Nagashima
*/ */
"use strict";
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Requirements // Requirements
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
const cloneDeep = require("lodash.clonedeep"); import cloneDeep from "lodash.clonedeep";
const rule = require("../../src/rules/no-invalid-this"), import rule from "../../src/rules/no-invalid-this";
RuleTester = require("../helpers/RuleTester"); import RuleTester from "../helpers/RuleTester";
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Helpers // Helpers

View File

@ -3,14 +3,12 @@
* @author Michael Ficarra * @author Michael Ficarra
*/ */
"use strict";
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Requirements // Requirements
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
const rule = require("../../src/rules/no-unused-expressions"), import rule from "../../src/rules/no-unused-expressions";
RuleTester = require("../helpers/RuleTester"); import RuleTester from "../helpers/RuleTester";
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Tests // Tests

View File

@ -6,10 +6,10 @@
* @copyright 2015 Mathieu M-Gosselin. All rights reserved. * @copyright 2015 Mathieu M-Gosselin. All rights reserved.
*/ */
var rule = require("../../src/rules/object-curly-spacing"), import rule from "../../src/rules/object-curly-spacing";
RuleTester = require("../helpers/RuleTester"); import RuleTester from "../helpers/RuleTester";
var ruleTester = new RuleTester(); const ruleTester = new RuleTester();
ruleTester.run("babel/object-curly-spacing", rule, { ruleTester.run("babel/object-curly-spacing", rule, {
valid: [ valid: [
// always - object literals // always - object literals

View File

@ -1,7 +1,7 @@
var rule = require("../../src/rules/quotes"), import rule from "../../src/rules/quotes";
RuleTester = require("../helpers/RuleTester"); import RuleTester from "../helpers/RuleTester";
var ruleTester = new RuleTester(); const ruleTester = new RuleTester();
ruleTester.run("babel/quotes", rule, { ruleTester.run("babel/quotes", rule, {
valid: [ valid: [
'var foo = "bar";', 'var foo = "bar";',

View File

@ -4,14 +4,12 @@
* @author Nicholas C. Zakas * @author Nicholas C. Zakas
*/ */
"use strict";
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Requirements // Requirements
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
const rule = require("../../src/rules/semi"), import rule from "../../src/rules/semi";
RuleTester = require("../helpers/RuleTester"); import RuleTester from "../helpers/RuleTester";
const ruleTester = new RuleTester(); const ruleTester = new RuleTester();

View File

@ -3,14 +3,12 @@
* @author Ian Christian Myers * @author Ian Christian Myers
*/ */
"use strict";
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Requirements // Requirements
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
const rule = require("../../src/rules/valid-typeof"), import rule from "../../src/rules/valid-typeof";
RuleTester = require("../helpers/RuleTester"); import RuleTester from "../helpers/RuleTester";
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Tests // Tests