-
Notifications
You must be signed in to change notification settings - Fork 0
/
.eslintrc.json
122 lines (118 loc) · 4.76 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
{
"root": true,
"env": {
"es6": true,
"browser": true,
"node": true
},
"extends": ["plugin:import/recommended", "plugin:import/typescript", "airbnb-typescript", "prettier"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 7
},
"plugins": ["eslint-plugin-react", "eslint-plugin-react-hooks", "eslint-plugin-jsx-a11y", "@typescript-eslint/eslint-plugin", "simple-import-sort"],
"settings": {
"react": {
"version": "detect" // React version. "detect" automatically picks the version you have installed.
// You can also use `16.0`, `16.3`, etc, if you want to override the detected value.
// default to latest and warns if missing
// It will default to "detect" in the future
}
},
/**
* Sorted alphanumerically within each group. built-in and each plugin form
* their own groups.
*/
"rules": {
"curly": ["error", "multi-line", "consistent"],
// Too interruptive
"no-alert": "error",
// Stylistic opinion
"arrow-body-style": "off",
// We are dropping all console.logs in production so we can ignore this rule
"no-console": "off",
"no-param-reassign": "error",
// Airbnb use warn https://github.com/airbnb/javascript/blob/63098cbb6c05376dbefc9a91351f5727540c1ce1/packages/eslint-config-airbnb-base/rules/style.js#L97
// but eslint recommands error
"func-names": "error",
"no-constant-condition": "error",
// Use the proptype inheritance chain
"no-prototype-builtins": "error",
"no-underscore-dangle": "off",
"nonblock-statement-body-position": "error",
"prefer-arrow-callback": ["error", { "allowNamedFunctions": true }],
// Destructuring harm grep potential.
"prefer-destructuring": "off",
// disabled type-aware linting due to performance considerations
"@typescript-eslint/dot-notation": "off",
"dot-notation": "error",
// disabled type-aware linting due to performance considerations
"@typescript-eslint/no-implied-eval": "off",
"no-implied-eval": "error",
// disabled type-aware linting due to performance considerations
"@typescript-eslint/no-throw-literal": "off",
"no-throw-literal": "error",
// disabled type-aware linting due to performance considerations
"@typescript-eslint/return-await": "off",
"@typescript-eslint/no-unused-vars": "warn",
"no-return-await": "error",
// Not sure why it doesn't work
"import/export": "off",
"import/named": "off",
// Missing yarn workspace support
"import/no-extraneous-dependencies": "off",
"import/no-webpack-loader-syntax": "error",
// doesn't work?
"jsx-a11y/label-has-associated-control": [
"error",
{
// airbnb uses 'both' which requires nesting i.e. <label><input /></label>
// 'either' allows `htmlFor`
"assert": "either"
}
],
// We are a library, we need to support it too
"jsx-a11y/no-autofocus": "off",
"react-hooks/exhaustive-deps": ["error"],
"react-hooks/rules-of-hooks": "error",
"react/default-props-match-prop-types": [
"error",
{
// Otherwise the rule thinks inner props = outer props
// But in TypeScript we want to know that a certain prop is defined during render
// while it can be ommitted from the callsite.
// Then defaultProps (or default values) will make sure that the prop is defined during render
"allowRequiredDefaults": true
}
],
// Can add verbosity to small functions making them harder to grok.
// Though we have to manually enforce it for function components with default values.
"react/destructuring-assignment": "off",
"react/forbid-prop-types": "off", // Too strict, no time for that
"react/jsx-curly-brace-presence": "off", // broken
// airbnb is using .jsx
"react/jsx-filename-extension": ["error", { "extensions": [".js", ".tsx"] }],
// Prefer <React.Fragment> over <>.
"react/jsx-fragments": "off",
// Enforces premature optimization
"react/jsx-no-bind": "off",
// Lol
"react/jsx-props-no-spreading": "off",
// This rule is great for raising people awareness of what a key is and how it works.
"react/no-array-index-key": "off",
"react/no-danger": "off",
"react/no-direct-mutation-state": "error",
// Not always relevant
"react/require-default-props": "off",
"react/sort-prop-types": "error",
// This depends entirely on what you're doing. There's no universal pattern
"react/state-in-constructor": "off",
// stylistic opinion. For conditional assignment we want it outside, otherwise as static
"react/static-property-placement": "off",
// Lol
"import/extensions": "off",
"import/namespace": "off",
"simple-import-sort/imports": "error",
"simple-import-sort/exports": "error"
}
}