diff --git a/packages/eslint-plugin-typescript/lib/configs/recommended.json b/packages/eslint-plugin-typescript/lib/configs/recommended.json new file mode 100644 index 00000000000..43d9d0bd8d6 --- /dev/null +++ b/packages/eslint-plugin-typescript/lib/configs/recommended.json @@ -0,0 +1,6 @@ +{ + "rules": { + "class-name-casing": "error", + "no-unused-vars": "error" + } +} diff --git a/packages/eslint-plugin-typescript/lib/index.js b/packages/eslint-plugin-typescript/lib/index.js index c8d04c29429..cf4ec4cb492 100644 --- a/packages/eslint-plugin-typescript/lib/index.js +++ b/packages/eslint-plugin-typescript/lib/index.js @@ -16,4 +16,10 @@ const path = require("path"); //------------------------------------------------------------------------------ // import all rules in lib/rules -module.exports.rules = requireIndex(path.join(__dirname, "rules")); +module.exports = { + rules: requireIndex(path.join(__dirname, "rules")), + configs: { + // eslint-disable-next-line node/no-unpublished-require + recommended: require("./configs/recommended"), + }, +}; diff --git a/packages/eslint-plugin-typescript/package.json b/packages/eslint-plugin-typescript/package.json index fcaa3264f13..f13eafb09f2 100644 --- a/packages/eslint-plugin-typescript/package.json +++ b/packages/eslint-plugin-typescript/package.json @@ -11,14 +11,15 @@ "author": "Nicholas C. Zakas", "main": "lib/index.js", "scripts": { - "lint": "eslint lib/ tests/", - "lint:fix": "eslint lib/ tests/ --fix", + "lint": "eslint lib/ tests/ tools/", + "lint:fix": "eslint lib/ tests/ tools/ --fix", "docs": "eslint-docs", "docs:check": "eslint-docs check", - "format-no-write": "prettier-eslint lib/**/*.js tests/**/*.js --eslint-config-path=.eslintrc --eslint-ignore --prettier-ignore --eslint-path=node_modules/eslint --config=.prettierrc", + "format-no-write": "prettier-eslint lib/**/*.js tests/**/*.js tools/**/*.js --eslint-config-path=.eslintrc --eslint-ignore --prettier-ignore --eslint-path=node_modules/eslint --config=.prettierrc", "format": "yarn format-no-write --write", "format-check": "yarn format-no-write --list-different", - "test": "mocha tests --recursive --reporter=dot" + "test": "mocha tests --recursive --reporter=dot", + "recommended:update": "node tools/update-recommended.js" }, "dependencies": { "requireindex": "^1.2.0", diff --git a/packages/eslint-plugin-typescript/tools/update-recommended.js b/packages/eslint-plugin-typescript/tools/update-recommended.js new file mode 100644 index 00000000000..0fb8266a989 --- /dev/null +++ b/packages/eslint-plugin-typescript/tools/update-recommended.js @@ -0,0 +1,26 @@ +"use strict"; + +const path = require("path"); +const fs = require("fs"); +const requireIndex = require("requireindex"); + +/** + * Generate recommended configuration + * @returns {void} + */ +function generate() { + // replace this with Object.entries when node > 8 + const allRules = requireIndex(path.resolve(__dirname, "../lib/rules")); + const rules = Object.keys(allRules) + .filter(key => allRules[key].meta.docs.recommended) + .reduce((config, item) => { + config[item] = "error"; + return config; + }, {}); + + const filePath = path.resolve(__dirname, "../lib/configs/recommended.json"); + + fs.writeFileSync(filePath, `${JSON.stringify({ rules }, null, 4)}\n`); +} + +generate();