You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
4.4 KiB
JavaScript

module.exports = {
extends: [
`airbnb`,
`airbnb/hooks`,
`plugin:promise/recommended`,
`plugin:sonarjs/recommended`,
`plugin:prettier/recommended`,
],
plugins: [`optimize-regex`, `simple-import-sort`, `styled-components-varname`],
ignorePatterns: [`**/dist/**/*.*`, `src/page/Game/*`, `vite.config.ts`, `dev-dist`],
rules: {
'react/prop-types': `off`,
'sonarjs/prefer-single-boolean-return': `off`,
'import/no-default-export': `off`,
'no-param-reassign': `off`,
'react/react-in-jsx-scope': `off`,
'import/prefer-default-export': [`off`],
'@typescript-eslint/no-unsafe-member-access': `off`,
'@typescript-eslint/no-unsafe-assignment': `off`,
'import/no-extraneous-dependencies': [`error`, { devDependencies: true }],
'react/function-component-definition': [
`error`,
{
namedComponents: `arrow-function`,
},
],
'react/jsx-props-no-spreading': [`off`],
'react/require-default-props': [`off`],
'no-restricted-syntax': [`error`, `ForInStatement`, `LabeledStatement`, `WithStatement`],
'no-plusplus': [`off`],
'no-void': [
`error`,
{
allowAsStatement: true,
},
],
'func-names': [`warn`, `as-needed`, { generators: `never` }],
curly: [`error`, `all`],
'@typescript-eslint/no-use-before-define': [`error`, { functions: false, classes: false }],
'simple-import-sort/imports': [
`error`,
{
groups: [[`^react`, `^@?\\w`]],
},
],
'optimize-regex/optimize-regex': `warn`,
'@typescript-eslint/no-magic-numbers': [
`warn`,
{
ignoreNumericLiteralTypes: true,
ignoreEnums: true,
enforceConst: true,
ignoreReadonlyClassProperties: true,
ignore: [-1, 0, 1],
},
],
'@typescript-eslint/quotes': [`error`, `backtick`],
'newline-before-return': `error`,
'react/self-closing-comp': [
`error`,
{
component: true,
html: true,
},
],
'prettier/prettier': [
`error`,
{
printWidth: 120,
tabWidth: 4,
useTabs: true,
semi: false,
singleQuote: true,
trailingComma: `all`,
bracketSpacing: true,
jsxBracketSameLine: false,
arrowParens: `avoid`,
},
{ usePrettierrc: false },
],
'styled-components-varname/varname': [
`error`,
{
tagStyle: {
suffix: `Styled`,
},
},
],
'import/no-extraneous-dependencies': [
`error`,
{
devDependencies: true,
},
],
},
overrides: [
{
files: [`*.ts`, `*.tsx`],
extends: [
`airbnb-typescript`,
`plugin:@typescript-eslint/recommended`,
`plugin:@typescript-eslint/recommended-requiring-type-checking`,
`plugin:prettier/recommended`,
],
rules: {
'@typescript-eslint/no-misused-promises': [
`error`,
{
checksVoidReturn: {
attributes: false,
returns: false,
},
},
],
'@typescript-eslint/explicit-function-return-type': [
`error`,
{
allowExpressions: true,
},
],
'@typescript-eslint/no-floating-promises': [
`error`,
{
ignoreIIFE: true,
ignoreVoid: true,
},
],
'@typescript-eslint/no-unnecessary-condition': [`error`],
'import/no-extraneous-dependencies': [
`error`,
{
devDependencies: true,
},
],
'@typescript-eslint/quotes': [`error`, `backtick`],
'@typescript-eslint/no-unused-vars': [`error`],
},
},
{
files: [`*.json`],
parser: `@typescript-eslint/parser`,
parserOptions: {
sourceType: `module`,
project: false,
},
rules: {
'no-unused-expressions': `off`,
'sonarjs/no-duplicate-string': `off`,
quotes: `off`,
'@typescript-eslint/quotes': `off`,
},
},
{
files: [`**/*.spec.ts`, `**/*.spec.tsx`, `**/dsl/**`],
extends: [`plugin:jest/recommended`],
rules: {
'jest/no-focused-tests': `error`,
'jest/no-identical-title': `error`,
'no-shadow': `off`,
'max-classes-per-file': `off`,
'@typescript-eslint/no-magic-numbers': `off`,
'@typescript-eslint/indent': `off`,
'@typescript-eslint/explicit-function-return-type': `off`,
'@typescript-eslint/member-ordering': `off`,
'@typescript-eslint/no-non-null-assertion': `off`,
'@typescript-eslint/no-empty-function': `off`,
'sonarjs/no-duplicate-string': `off`,
'sonarjs/no-identical-functions': `off`,
},
},
{
files: [`*.js`],
rules: {
'@typescript-eslint/no-var-requires': `off`,
},
},
],
parserOptions: {
project: `tsconfig.json`,
sourceType: `module`,
},
settings: {
react: {
version: `detect`,
},
},
}