/** @type {import("eslint").Linter.Config} */ const config = { root: true, parser: "@typescript-eslint/parser", plugins: ["isaacscript", "import"], extends: [ "plugin:@typescript-eslint/recommended-type-checked", "plugin:@typescript-eslint/stylistic-type-checked", "plugin:prettier/recommended", ], parserOptions: { ecmaVersion: "latest", sourceType: "module", tsconfigRootDir: __dirname, project: [ "./tsconfig.json", "./cli/tsconfig.eslint.json", // separate eslint config for the CLI since we want to lint and typecheck differently due to template files "./upgrade/tsconfig.json", "./www/tsconfig.json", ], }, overrides: [ // Template files don't have reliable type information { files: ["./cli/template/**/*.{ts,tsx}"], extends: ["plugin:@typescript-eslint/disable-type-checked"], }, ], rules: { // These off/not-configured-the-way-we-want lint rules we like & opt into "@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/no-unused-vars": [ "error", { argsIgnorePattern: "^_", destructuredArrayIgnorePattern: "^_" }, ], "@typescript-eslint/consistent-type-imports": [ "error", { prefer: "type-imports", fixStyle: "inline-type-imports" }, ], "import/consistent-type-specifier-style": ["error", "prefer-inline"], // For educational purposes we format our comments/jsdoc nicely "isaacscript/complete-sentences-jsdoc": "warn", "isaacscript/format-jsdoc-comments": "warn", // These lint rules don't make sense for us but are enabled in the preset configs "@typescript-eslint/no-confusing-void-expression": "off", "@typescript-eslint/restrict-template-expressions": "off", // This rule doesn't seem to be working properly "@typescript-eslint/prefer-nullish-coalescing": "off", }, }; module.exports = config;