diff --git a/.eslintrc.js b/.eslintrc.js index 6eea9bc6f6fc..8861a0395937 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,7 +2,13 @@ const path = require("path"); module.exports = { root: true, - plugins: ["prettier", "@babel/development", "import", "jest"], + plugins: [ + "import", + "jest", + "prettier", + "@babel/development", + "@babel/development-internal", + ], // replace it by `@babel/internal` when `@babel/eslint-config-internal` is published extends: path.resolve(__dirname, "eslint/babel-eslint-config-internal"), rules: { @@ -44,8 +50,8 @@ module.exports = { "jest/no-identical-title": "off", "jest/no-standalone-expect": "off", "jest/no-test-callback": "off", - "jest/valid-describe": "off" - } + "jest/valid-describe": "off", + }, }, { files: ["packages/babel-plugin-*/src/index.js"], @@ -55,5 +61,16 @@ module.exports = { eqeqeq: ["error", "always", { null: "ignore" }], }, }, + { + files: ["packages/babel-parser/src/**/*.js"], + rules: { + "@babel/development-internal/dry-error-messages": [ + "error", + { + errorModule: "packages/babel-parser/src/parser/location.js", + }, + ], + }, + }, ], }; diff --git a/eslint/babel-eslint-plugin-development-internal/src/index.js b/eslint/babel-eslint-plugin-development-internal/src/index.js index 9db11d20c651..8761f3903c07 100644 --- a/eslint/babel-eslint-plugin-development-internal/src/index.js +++ b/eslint/babel-eslint-plugin-development-internal/src/index.js @@ -1,6 +1,6 @@ import dryErrorMessages from "./rules/dry-error-messages"; -export default { +module.exports = { rules: { "dry-error-messages": dryErrorMessages, }, diff --git a/eslint/babel-eslint-plugin-development-internal/src/rules/dry-error-messages.js b/eslint/babel-eslint-plugin-development-internal/src/rules/dry-error-messages.js index 8540f0e22c66..6c258f0e42e6 100644 --- a/eslint/babel-eslint-plugin-development-internal/src/rules/dry-error-messages.js +++ b/eslint/babel-eslint-plugin-development-internal/src/rules/dry-error-messages.js @@ -99,9 +99,17 @@ export default { const filename = getFilename(); const importedBindings = new Set(); + if (!path.isAbsolute(errorModule)) { + report({ message: "`errorModule` must be an absolute path." }); + } + return { // Check imports up front so that we don't have to check them for every ThrowStatement. ImportDeclaration(node) { + if (filename === errorModule) { + return; + } + if (isErrorModule(errorModule, filename, node.source.value)) { for (const spec of node.specifiers) { importedBindings.add(spec); @@ -109,6 +117,10 @@ export default { } }, "ThrowStatement > CallExpression[callee.type='MemberExpression']"(node) { + if (filename === errorModule) { + return; + } + if ( node.callee.object.type !== "ThisExpression" || node.callee.property.name !== "raise" diff --git a/eslint/babel-eslint-plugin-development/src/index.js b/eslint/babel-eslint-plugin-development/src/index.js index ae6662710684..946da90045e2 100644 --- a/eslint/babel-eslint-plugin-development/src/index.js +++ b/eslint/babel-eslint-plugin-development/src/index.js @@ -2,7 +2,7 @@ import noDeprecatedClone from "./rules/no-deprecated-clone"; import noUndefinedIdentifier from "./rules/no-undefined-identifier"; import pluginName from "./rules/plugin-name"; -export default { +module.exports = { rules: { "no-deprecated-clone": noDeprecatedClone, "no-undefined-identifier": noUndefinedIdentifier, diff --git a/package.json b/package.json index 29428c5e887a..ecf202fdf816 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "devDependencies": { "@babel/cli": "^7.8.4", "@babel/core": "^7.9.6", - "@babel/eslint-plugin-development": "^1.0.1", + "@babel/eslint-plugin-development": "link:./eslint/babel-eslint-plugin-development", + "@babel/eslint-plugin-development-internal": "link:./eslint/babel-eslint-plugin-development-internal", "@babel/plugin-proposal-class-properties": "^7.8.3", "@babel/plugin-proposal-dynamic-import": "^7.8.3", "@babel/plugin-proposal-export-namespace-from": "^7.8.3", diff --git a/yarn.lock b/yarn.lock index ebd03507a783..542bed85c06b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -56,10 +56,13 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/eslint-plugin-development@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@babel/eslint-plugin-development/-/eslint-plugin-development-1.0.1.tgz#1f5206ae95795db09b65e7dbc2b158d66497a44c" - integrity sha512-ioEhN8HgKr4Yx8ef+XryNpKN4FimSFceb0qVVxvoUzpFn3xyq17MlY5AquEqtXObE7Nu7WKq7QL9INzjCrugyw== +"@babel/eslint-plugin-development-internal@link:./eslint/babel-eslint-plugin-development-internal": + version "0.0.0" + uid "" + +"@babel/eslint-plugin-development@link:./eslint/babel-eslint-plugin-development": + version "0.0.0" + uid "" "@babel/generator@^7.4.0", "@babel/generator@^7.9.6": version "7.9.6"