@jimmy.codes/eslint-config
Version:
A simple, modern ESLint config that covers most use cases.
70 lines (67 loc) • 2.16 kB
JavaScript
import { GLOB_JS, GLOB_JSX, GLOB_TESTS } from "./globs-CRO5v7xy.js";
//#region src/rules/typescript.ts
const disabledEslintRules = { "no-use-before-define": "off" };
const typescriptRules = {
"@typescript-eslint/consistent-type-exports": ["error", { fixMixedExportsWithInlineTypeSpecifier: false }],
"@typescript-eslint/consistent-type-imports": ["error", { fixStyle: "separate-type-imports" }],
"@typescript-eslint/no-deprecated": "warn",
"@typescript-eslint/no-misused-promises": ["error", { checksVoidReturn: { attributes: false } }],
"@typescript-eslint/no-unnecessary-type-conversion": "error",
"@typescript-eslint/no-unused-vars": ["error", {
args: "all",
argsIgnorePattern: "^_",
caughtErrors: "all",
caughtErrorsIgnorePattern: "^_",
destructuredArrayIgnorePattern: "^_",
ignoreRestSiblings: true,
varsIgnorePattern: "^_"
}],
"@typescript-eslint/no-use-before-define": ["error", {
allowNamedExports: false,
classes: false,
functions: false,
variables: true
}],
"@typescript-eslint/no-useless-empty-export": "error",
"@typescript-eslint/restrict-template-expressions": ["error", { allowNumber: true }],
"@typescript-eslint/switch-exhaustiveness-check": "error",
...disabledEslintRules
};
//#endregion
//#region src/configs/typescript.ts
async function typescriptConfig() {
const { configs } = await import("typescript-eslint");
return [
...configs.strictTypeChecked,
...configs.stylisticTypeChecked.filter((config) => {
return config.name === "typescript-eslint/stylistic-type-checked";
}),
{
languageOptions: { parserOptions: {
projectService: true,
tsconfigRootDir: process.cwd()
} },
name: "jimmy.codes/typescript",
rules: typescriptRules
},
{
files: [GLOB_JS, GLOB_JSX],
...configs.disableTypeChecked,
languageOptions: { parserOptions: {
program: null,
project: false,
projectService: false
} }
},
{
files: GLOB_TESTS,
name: "jimmy.codes/typescript/testing",
rules: {
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-assignment": "off"
}
}
];
}
//#endregion
export { typescriptConfig as default };