diff --git a/README.md b/README.md index bde015a9..b7b06255 100644 --- a/README.md +++ b/README.md @@ -82,14 +82,24 @@ export default [...common, ...modules, ...node, ...prettier]; Extending rules
-```js -import { common, modules, node, stylistic, typescript } from "@hazmi35/eslint-config"; +Extending rules using the extend function is recommended. -export default [...common, ...modules, ...node, ...stylistic, ...typescript, { - rules: { - "@typescript-eslint/no-unnecessary-condition": "off" +```js +import { common, extend, modules, node, stylistic, typescript } from "./index.js"; + +export default [...common, ...modules, ...node, ...stylistic, ...extend(typescript, [ + { + rule: "@typescript-eslint/no-unnecessary-condition", + option: [ + "warn", + { + allowConstantLoopConditions: false + } + ] + // or + option: "off" } -}]; +])]; ``` diff --git a/index.js b/index.js index fcd90bd3..ed3c9b88 100644 --- a/index.js +++ b/index.js @@ -6,3 +6,20 @@ export { default as node } from "./conf/node.js"; export { default as prettier } from "./conf/prettier.js"; export { default as stylistic } from "./conf/stylistic.js"; export { default as typescript } from "./conf/typescript.js"; + +/** + * @param {import("eslint").Linter.FlatConfig[]} config + * @param {{ rule: string, option: ["off" | "warn" | "error", object] }[]} rulesAndOptions + * @returns {import("eslint").Linter.FlatConfig[]} + * @example extend(config, [{ rule: "no-console", option: ["warn", { allow: ["warn", "error"] }] }]) + */ +export function extend(config, rulesAndOptions) { + return config.map(c => { + if (c.rules) { + for (const { rule, option } of rulesAndOptions) { + c.rules[rule] = option; + } + } + return c; + }); +}