woj-ui-2/.eslintrc.cjs

101 lines
2.9 KiB
JavaScript

/** @type {import("eslint").Linter.Config} */
module.exports = {
root: true,
ignorePatterns: ["dist"],
env: {
browser: true,
commonjs: true,
es6: true,
},
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
ecmaFeatures: { jsx: true },
project: true,
tsconfigRootDir: __dirname,
},
extends: ["eslint:recommended", "plugin:prettier/recommended"],
// Rules
rules: {
"linebreak-style": ["error", "unix"],
"@typescript-eslint/no-unused-vars": [
"warn",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_",
caughtErrorsIgnorePattern: "^_",
},
],
"@typescript-eslint/consistent-type-imports": [2, { fixStyle: "separate-type-imports" }],
"@typescript-eslint/no-restricted-imports": [
2,
{
paths: [
{
name: "react-redux",
importNames: ["useSelector", "useStore", "useDispatch"],
message: "Please use pre-typed versions from `src/hooks/store.ts` instead.",
},
],
},
],
"prettier/prettier": ["error"],
},
overrides: [
// React
{
files: ["**/*.{js,jsx,ts,tsx}"],
plugins: ["react", "jsx-a11y"],
extends: [
"plugin:react/recommended",
"plugin:react/jsx-runtime",
"plugin:react-hooks/recommended",
"plugin:jsx-a11y/recommended",
],
settings: {
react: { version: "detect" },
formComponents: ["Form"],
linkComponents: [
{ name: "Link", linkAttribute: "to" },
{ name: "NavLink", linkAttribute: "to" },
],
"import/resolver": { typescript: {} },
},
},
// Typescript
{
files: ["**/*.{ts,tsx}"],
plugins: ["@typescript-eslint", "import"],
parser: "@typescript-eslint/parser",
settings: {
"import/internal-regex": "^~/",
"import/resolver": {
node: { extensions: [".ts", ".tsx"] },
typescript: {
alwaysTryTypes: true,
},
},
},
extends: [
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:import/recommended",
"plugin:import/typescript",
],
},
// Node
{
files: [".eslintrc.{js,cjs}"],
env: { node: true },
parserOptions: { sourceType: "script" },
},
],
};