-
Notifications
You must be signed in to change notification settings - Fork 63
/
.eslintrc.json
138 lines (119 loc) · 5.62 KB
/
.eslintrc.json
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2018, // Allows for the parsing of modern ECMAScript features
"sourceType": "module", // Allows for the use of imports
"project": [ "./tsconfig.eslint.json" ]
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript"
],
"plugins": ["@typescript-eslint", "import"],
"reportUnusedDisableDirectives": true,
"env": {
"node": true
},
"ignorePatterns": ["*/node_modules/**/*", "*/dist/**/*", "*/build/**/*", "packages/*/dist/**/*", "packages/*/build/**/*", "models/*/**/*", "**/forwards/**/*"],
"rules": {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/ban-types": [
"error",
{
"types": {
"{}": false
},
"extendDefaults": true
}
],
// turn on errors for missing imports
"import/no-unresolved": "error",
"@typescript-eslint/require-await": "off",
// We can turn these on from time to time but in general they rules
// make our lives harder instead of easier
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/no-unsafe-return": "off",
"@typescript-eslint/no-unsafe-call": "off",
"@typescript-eslint/restrict-template-expressions": "off",
"@typescript-eslint/no-base-to-string": "off",
"no-constant-condition": [
"error",
{
"checkLoops": false
}
],
"no-restricted-imports": [
"error",
{
"patterns": [
{
"group": ["**/export"],
"message": "Please import the directory rather than the export file"
},
{
"group": ["**/export.js"],
"message": "Please import directly from the defining file"
}
]
}
],
// Namespaces are the only way to nest types and merge with some declarations. IOW they have uses beyond simple
// package structure which error verbiage indicates is the purpose of the test
"@typescript-eslint/no-namespace": "off",
// Cannot nest functions within namespaces with this on
"no-inner-declarations": "off",
// Blocks are the only way to have case-specific variables defined. Alternative is a bunch of lets for all
// possible variables for all cases above the switch. Which sucks
"no-case-declarations": "off",
// Metaprogramming is impossible with this on
"@typescript-eslint/no-implied-eval": "off",
// I mean, I understand why this rule exists, but sometimes you need to assign "this" to a variable (see e.g. cd
// method in github.ts)
"@typescript-eslint/no-this-alias": "off",
// This prevents us from transpiling to ESM that works in both node and the browser for some CommonJS
// dependencies (elliptic and ansi-colors are two examples)
"import/default": "off",
// TS I believe takes care of this for us, and the plugin does not understand TS object/namespace merges
"import/export": "off",
// Related to import/default, this generates warnings when we use properties of the default export when eslint
// thinks we should be using the named export. In some cases it isn't even possible to do it the way eslint
// wants us to (e.g. you can't do "import { static } from express because "static" is a reserved word.). In
// other cases the code is valid but the transpiled ESM isn't compatible with Node because it's not smart enough
// to find the "named exports" in CommonJS files
"import/no-named-as-default-member": "off",
// This makes it impossible to compare non-enums to enums, like one might do with a value off the wire
"@typescript-eslint/no-unsafe-enum-comparison": "off",
// tsc catches these for us and eslint doesn't recognize references to type imports in comment @links
"@typescript-eslint/no-unused-vars": "off",
// This is highly inconvenient and breaks basic language features. I don't think we've ever actually unbound
// a method unintentionally and we do it quite often intentionally. Perhaps its useful if you aren't authoring
// a library
"@typescript-eslint/unbound-method": "off",
// Umm, this mattered for IE <= 8??
"no-ex-assign": "off",
// Always of dubious value, this rule is buggy as of typescript-eslint 7.2.0 and TS 5.4.2 (works w/ TS 5.3.3
// though)
"@typescript-eslint/no-redundant-type-constituents": "off",
// This rule is fine... Except it's redundant with tsc and seems to be buggy with wildcard package.json
// import aliases
"import/no-unresolved": "off"
},
"settings": {
"import/extensions": [".ts"],
"import/parsers": {
"@typescript-eslint/parser": [".ts"]
},
"import/resolver": {
"typescript": {
// Multiple tsconfigs (Useful for monorepos)
"project": "packages/*/tsconfig.json"
}
}
}
}