forked from project-chip/matter.js
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path.eslintrc.json
144 lines (131 loc) · 5.12 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
139
140
141
142
143
144
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaVersion": 2018, // Allows for the parsing of modern ECMAScript features
"sourceType": "module", // Allows for the use of imports
"project": [
"tools/tsconfig.json",
"codegen/tsconfig.json",
"models/tsconfig.json",
"packages/*/tsconfig.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": [
"*/dist/**/*",
"*/build/**/*",
"packages/*/dist/**/*",
"packages/*/build/**/*",
"**/jest.config.ts",
"**/jest.chip.config.ts"
],
"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",
// Exclude _* and our special typing cases
"@typescript-eslint/no-unused-vars": [
"warn",
{
"ignoreRestSiblings": true,
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^Matter.*SpecificationV|^_"
}
],
"@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",
// 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"
},
"settings": {
"import/extensions": [".ts"],
"import/parsers": {
"@typescript-eslint/parser": [".ts"]
},
"import/resolver": {
"typescript": {
// Multiple tsconfigs (Useful for monorepos)
"project": "packages/*/tsconfig.json"
}
}
}
}