aboutsummaryrefslogtreecommitdiffhomepage
path: root/.eslintrc.json
blob: 734ac1dcfcc03624929deff56991dafa9d87e42e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
{
  "env": {
    "browser": true,
    "es2021": true,
    "node": true
  },
  "globals": {
    "$": "readonly",
    "jQuery": "readonly",
    "html2canvas": "readonly",
    "ClipboardItem": "readonly",
    "grecaptcha": "readonly"
  },
  "ignorePatterns": [
    "backend/__tests__/**/*",
    "backend/jest.config.ts",
    "**/*.css",
    "**/*.scss",
    "frontend/static/js/*",
    "frontend/__tests__/**/*",
    "frontend/jest.config.ts"
  ],
  "extends": [
    "eslint:recommended",
    "plugin:json/recommended",
    "plugin:import/recommended",
    "plugin:import/typescript",
    "prettier"
  ],
  "plugins": ["json", "require-path-exists", "@typescript-eslint"],
  "rules": {
    "json/*": ["error"],
    "indent": ["off"],
    "no-empty": ["error", { "allowEmptyCatch": true }],
    "no-var": 2,
    "no-duplicate-imports": ["error"],
    // "import/default": "off",
    "import/no-unresolved": [
      "error",
      {
        "ignore": ["^./constants/firebase-config$"]
      }
    ],
    "import/no-duplicates": "off",
    "no-mixed-operators": [
      "error",
      {
        "groups": [["+", "??"]]
      }
    ]
  },
  "settings": {
    "import/resolver": {
      "typescript": {
        "alwaysTryTypes": true,
        "project": ["frontend/tsconfig.json", "backend/tsconfig.json"]
      },
      "node": true
    }
  },
  "overrides": [
    {
      // enable the rule specifically for TypeScript files
      "files": ["*.ts", "*.tsx"],
      "extends": [
        "plugin:@typescript-eslint/eslint-recommended",
        "plugin:@typescript-eslint/recommended",
        "plugin:@typescript-eslint/strict"
        // "plugin:@typescript-eslint/recommended-requiring-type-checking"
      ],
      "rules": {
        "@typescript-eslint/explicit-function-return-type": ["error"],
        "@typescript-eslint/ban-ts-comment": "off",
        "@typescript-eslint/no-empty-function": "warn",
        "@typescript-eslint/no-unused-vars": [
          "warn",
          { "argsIgnorePattern": "^(_|e|event)", "varsIgnorePattern": "^_" }
        ],
        "@typescript-eslint/no-var-requires": "error",
        "@typescript-eslint/no-this-alias": "off",
        "@typescript-eslint/no-misused-promises": [
          "error",
          {
            "checksVoidReturn": false
          }
        ],
        "@typescript-eslint/promise-function-async": "warn",
        "@typescript-eslint/no-floating-promises": "error",
        "@typescript-eslint/strict-boolean-expressions": [
          "error",
          { "allowNullableBoolean": true, "allowNullableNumber": true }
        ],
        //
        "@typescript-eslint/non-nullable-type-assertion-style": "off",
        "@typescript-eslint/no-unnecessary-condition": "off",
        "@typescript-eslint/consistent-type-definitions": ["warn", "type"],
        "@typescript-eslint/no-invalid-void-type": "off"
      },
      "parserOptions": {
        "ecmaVersion": 12,
        "sourceType": "module",
        "project": "**/tsconfig.json"
      }
    },
    {
      "files": ["backend/**/*.ts"],
      "rules": {
        "eqeqeq": "error"
      }
    }
  ]
}