-
Notifications
You must be signed in to change notification settings - Fork 73
/
.eslintrc
163 lines (163 loc) · 5.99 KB
/
.eslintrc
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
{
"root": true,
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json",
"sourceType": "module"
},
"env": {
"es6": true,
"node": true,
"jest": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"./.eslint-rules/globals",
"./.eslint-rules/imports/order",
"./.eslint-rules/overrides",
// ensure that you don't add custom rules
// without taking permission from team leads.
"./.eslint-rules/custom",
// custom rules cannot override the following rules.
"./.eslint-rules/imports/enforced",
"./.eslint-rules/react",
"./.eslint-rules/promise",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"prettier"
],
"settings": {
"import/extensions": [".js", ".jsx", ".ts", ".tsx"],
"import/parsers": {
"@typescript-eslint/parser": [".ts", ".tsx"]
},
"import/resolver": {
"node": {
"extensions": [".js", ".jsx", ".ts", ".tsx", ".svg", ".json", ".mp3", ".css"]
}
},
"react": {
"pragma": "React",
"fragment": "Fragment",
"version": "detect"
}
},
"plugins": [
"react",
"prettier",
"import",
"@typescript-eslint",
"react-hooks",
"promise",
"jam3",
"unused-imports"
],
"globals": {
"fetch": false,
"document": false,
"Promise": true,
"log": true,
"sessionStorage": true,
"localStorage": true,
"FileReader": true,
"window": true
},
"rules": {
"@typescript-eslint/no-explicit-any": "off",
// auto-fixable: Respect all Prettier rules and apply it.
"prettier/prettier": "error",
"react/jsx-filename-extension": [
"error",
{ "extensions": [".js",".jsx",".ts",".tsx"] }
],
// not-auto-fixable: No unused variables allowed.
"no-unused-vars": [
"error",
{
"args": "all",
"argsIgnorePattern": "^_",
"destructuredArrayIgnorePattern": "^_",
"caughtErrors": "all"
}
],
// not-auto-fixable: No undefined variables allowed.
"no-undef": "error",
// not-auto-fixable: Dont use console statements. Use logger which babel will remove during bundling.
"no-console": "error",
// auto-fixable: sadly this doesn't support guard clauses yet.
"padding-line-between-statements": [
"error",
{ "blankLine": "always", "prev": "if", "next": ["if", "return"] },
// The newline-before-return rule is deprecated in favor of the following:
{ "blankLine": "always", "prev": "*", "next": "return" },
// Add newline between function declarations
{
"blankLine": "always",
"prev": [
"block",
"multiline-block-like",
"function",
"iife",
"multiline-const",
"multiline-expression",
],
"next": ["function", "iife", "multiline-const", "multiline-expression"],
},
],
// auto-fixable: Single line statements needn't have any braces. But in all other cases enforce curly braces.
"curly": ["error", "multi-line"],
// auto-fixable: Remove the else part, if the "if" or "else-if" chain has a return statement
"no-else-return": "error",
// not-auto-fixable: Prevent un-sanitized dangerouslySetInnerHTML.
"jam3/no-sanitizer-with-danger": [
2,
{
"wrapperName": ["dompurify", "sanitizer", "sanitize"],
},
],
// auto-fixable: Requires trailing commas when the last element or property is in a different line than the closing ] or }
"comma-dangle": [
"error",
{
"arrays": "always-multiline",
"objects": "always-multiline",
"imports": "always-multiline",
"exports": "always-multiline",
"functions": "never",
},
],
// auto-fixable: If a variable is never reassigned, using the const declaration is better.
"prefer-const": "error",
// auto-fixable: It is considered good practice to use the type-safe equality operators === and !==.
// "eqeqeq": "error",
// not-auto-fixable: Rule flags optional chaining expressions in positions where short-circuiting to undefined causes throwing a TypeError afterward.
"no-unsafe-optional-chaining": "error",
// auto-fixable: Remove all unused imports.
"unused-imports/no-unused-imports": "error",
// auto-fixable-1-level-deep: Using nested ternary operators make the code unreadable. Use if/else or switch with if/else. If it's JSX then move it out into a function or a variable. It's fine to use nestedTernary in JSX when it makes code more readable.
"no-nested-ternary": "warn",
// auto-fixable: Enforces no braces where they can be omitted.
"arrow-body-style": ["error", "as-needed"],
// auto-fixable: Suggests using template literals instead of string concatenation.
"prefer-template": "error",
// auto-fixable: Disallows ternary operators when simpler alternatives exist.
"no-unneeded-ternary": ["error", { "defaultAssignment": false }],
// auto-fixable: Partially fixable. Prefer {x} over {x: x}.
"object-shorthand": [
"error",
"always",
{ "avoidQuotes": true, "ignoreConstructors": true },
],
// auto-fixable: Partially fixable. Unless there's a need to the this keyword, there's no advantage of using a plain function.
"prefer-arrow-callback": ["error", { "allowUnboundThis": true }],
// not-auto-fixable: Convert multiple imports from same module into a single import.
"no-duplicate-imports": ["error", { "includeExports": true }],
// auto-fixable: Partially fixable. In JavaScript, there are a lot of different ways to convert value types. Allow only readable coercions.
"no-implicit-coercion": ["error", { "allow": ["!!"] }],
// auto-fixable: Require let or const instead of var.
"no-var": "error",
// auto-fixable: This rule conflicts with prettier rules. Thus we've NOT kept this rule in react file. This rule ensures we don't add blank lines in JSX.
"react/jsx-newline": ["error", { "prevent": true }]
}
}