@byloth/eslint-config-typescript
Version:
A collection of some common sense linting rules for TypeScript projects. ✔
73 lines (67 loc) • 2.39 kB
JavaScript
import eslintJs from "@byloth/eslint-config";
import eslintTs from "@typescript-eslint/eslint-plugin";
import eslintImport from "eslint-plugin-import";
const DYNAMIC_LEVEL = (process.env.NODE_ENV === "production") ? "error" : "warn";
const flatStylisticRules = eslintTs.configs["flat/stylistic"]
.find(({ name }) => (name === "typescript-eslint/stylistic"));
const tsParser = eslintTs.configs["flat/strict"]
.find(({ name }) => (name === "typescript-eslint/base")).languageOptions.parser;
export default [...eslintJs, ...eslintTs.configs["flat/strict"], flatStylisticRules, {
plugins: { import: eslintImport },
rules: {
"@typescript-eslint/ban-ts-comment": DYNAMIC_LEVEL,
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/no-import-type-side-effects": "error",
"@typescript-eslint/no-invalid-void-type": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/no-shadow": DYNAMIC_LEVEL,
"@typescript-eslint/no-unused-vars": [DYNAMIC_LEVEL, {
args: "none",
ignoreRestSiblings: true,
varsIgnorePattern: "^_"
}],
"@typescript-eslint/no-useless-constructor": "error",
"@typescript-eslint/unified-signatures": "off",
"import/consistent-type-specifier-style": ["error", "prefer-top-level"]
}
}, {
files: ["**/*.cjs", "**/*.js", "**/*.mjs"],
rules: {
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-var-requires": "off"
}
}, {
files: ["**/.babelrc"],
rules: { "@typescript-eslint/no-var-requires": "off" }
}, {
files: ["**/*.ts", "**/*.mts"],
rules: {
"no-dupe-class-members": "off",
"no-redeclare": "off",
"no-shadow": "off",
"no-useless-constructor": "off",
"no-unused-vars": "off"
}
}, {
files: ["**/*.vue"],
languageOptions: {
parserOptions: { parser: tsParser }
}
}, {
files: ["**/*.config.ts", "**/*.config.mts"],
rules: {
"@stylistic/indent": ["error", 2, { SwitchCase: 1 }],
"@stylistic/indent-binary-ops": ["error", 2]
}
}, {
files: ["**/*.d.ts"],
rules: {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-restricted-types": "off",
"@typescript-eslint/no-unused-vars": "off"
}
}, {
files: ["**/*.json"],
rules: { "@typescript-eslint/no-unused-expressions": "off" }
}];