@neralabs/rerail-pack-typescript 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/README.md +10 -6
  2. package/licenses/eslint-plugin-vitest/UPSTREAM.md +7 -0
  3. package/licenses/typescript-eslint/UPSTREAM.md +1277 -1
  4. package/pack.json +7 -10
  5. package/package.json +1 -1
  6. package/rules/typescript-eslint-ban-tslint-comment.json +18 -3
  7. package/rules/typescript-eslint-consistent-type-definitions.json +1 -1
  8. package/rules/typescript-eslint-default-param-last.json +3 -3
  9. package/rules/typescript-eslint-no-array-constructor.json +41 -4
  10. package/rules/typescript-eslint-no-confusing-non-null-assertion.json +44 -5
  11. package/rules/typescript-eslint-no-dupe-class-members.json +1 -1
  12. package/rules/typescript-eslint-no-duplicate-enum-values.json +12 -6
  13. package/rules/typescript-eslint-no-empty-function.json +1 -1
  14. package/rules/typescript-eslint-no-extra-non-null-assertion.json +23 -3
  15. package/rules/typescript-eslint-no-import-type-side-effects.json +44 -5
  16. package/rules/typescript-eslint-no-namespace.json +28 -8
  17. package/rules/typescript-eslint-no-non-null-asserted-optional-chain.json +41 -4
  18. package/rules/typescript-eslint-no-non-null-assertion.json +22 -6
  19. package/rules/typescript-eslint-no-unnecessary-type-constraint.json +23 -3
  20. package/rules/typescript-eslint-no-unsafe-function-type.json +7 -6
  21. package/rules/typescript-eslint-no-unused-expressions.json +1 -1
  22. package/rules/typescript-eslint-no-useless-empty-export.json +3 -3
  23. package/rules/typescript-eslint-prefer-as-const.json +22 -6
  24. package/rules/typescript-eslint-prefer-enum-initializers.json +3 -3
  25. package/rules/typescript-eslint-prefer-literal-enum-member.json +1 -1
  26. package/rules/typescript-eslint-prefer-namespace-keyword.json +41 -4
  27. package/rules/typescript-eslint-no-wrapper-object-types.json +0 -568
package/pack.json CHANGED
@@ -3,14 +3,17 @@
3
3
  "id": "typescript",
4
4
  "name": "TypeScript",
5
5
  "category": "language",
6
- "covers": "22 typescript-eslint rules ported to Rerail, 11 of them on and 11 off until turned on, each scored against the tool's own recorded findings on its test fixtures.",
6
+ "covers": "21 typescript-eslint rules ported to Rerail, 10 of them on and 11 off until turned on, each scored against the tool's own recorded findings on its test fixtures.",
7
7
  "reason": "matches TypeScript",
8
8
  "match": {
9
9
  "any": [
10
10
  {
11
- "npmDependencies": [
12
- "typescript"
13
- ]
11
+ "dependencies": {
12
+ "ecosystem": "npm",
13
+ "names": [
14
+ "typescript"
15
+ ]
16
+ }
14
17
  },
15
18
  {
16
19
  "files": [
@@ -153,12 +156,6 @@
153
156
  "group": "typescript-eslint",
154
157
  "on": false
155
158
  },
156
- {
157
- "id": "typescript-eslint-no-wrapper-object-types",
158
- "document": "rules/typescript-eslint-no-wrapper-object-types.json",
159
- "title": "typescript-eslint no-wrapper-object-types: Disallow using confusing built-in primitive class wrappers",
160
- "group": "typescript-eslint"
161
- },
162
159
  {
163
160
  "id": "typescript-eslint-prefer-as-const",
164
161
  "document": "rules/typescript-eslint-prefer-as-const.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neralabs/rerail-pack-typescript",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Rerail rule pack: typescript-eslint rules ported to Rerail code rules.",
5
5
  "license": "Apache-2.0 AND MIT",
6
6
  "repository": {
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "typescript-eslint-ban-tslint-comment",
4
- "revision": 1,
4
+ "revision": 3,
5
5
  "mode": "steer",
6
6
  "description": "Port of typescript-eslint's `ban-tslint-comment` (https://typescript-eslint.io/rules/ban-tslint-comment). Flags comments whose value matches TSLint's enable/disable directive regex; the fix deletes the comment.",
7
7
  "scope": {
8
8
  "include": [
9
- "**/*"
9
+ "**/*.ts",
10
+ "**/*.tsx",
11
+ "**/*.mts",
12
+ "**/*.cts"
10
13
  ],
11
14
  "exclude": []
12
15
  },
@@ -26,7 +29,19 @@
26
29
  "anchor": "witness.span",
27
30
  "code": "@typescript-eslint/ban-tslint-comment",
28
31
  "message": "tslint comment detected: \"$TEXT\"",
29
- "fix": ""
32
+ "fix": "",
33
+ "suppress": {
34
+ "eslint": {
35
+ "rules": [
36
+ "@typescript-eslint/ban-tslint-comment"
37
+ ]
38
+ },
39
+ "oxlint": {
40
+ "rules": [
41
+ "ban-tslint-comment"
42
+ ]
43
+ }
44
+ }
30
45
  }
31
46
  }
32
47
  ]
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"typescript-eslint-consistent-type-definitions","revision":2,"mode":"steer","description":"Port of typescript-eslint's `consistent-type-definitions` rule with its default option `interface` (https://typescript-eslint.io/rules/consistent-type-definitions). Flags type aliases whose type is an object literal type (through any parentheses) and fixes them to interfaces. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"option":{"type":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"any":[{"has":{"kind":"type_parameters","pattern":"$TP","stopBy":"neighbor"}},{"not":{"has":{"kind":"type_parameters","stopBy":"neighbor"}}}]},"r2":{"inside":{"has":{"regex":"^global$","stopBy":"neighbor"},"kind":"ambient_declaration","stopBy":"end"}},"r3":{"has":{"kind":"type_identifier","pattern":"$N","stopBy":"neighbor"}},"r4":{"has":{"kind":"extends_type_clause","stopBy":"neighbor"}},"r5":{"has":{"kind":"interface_body","pattern":"$B","stopBy":"neighbor"}}}}},{"id":"interface-over-type","forbid":{"ast":{"language":"typescript","rule":{"kind":"type_alias_declaration","all":[{"matches":"r3"},{"has":{"matches":"object-type","stopBy":"neighbor"}},{"matches":"r1"}]},"utils":{"object-type":{"any":[{"kind":"object_type","pattern":"$B","not":{"has":{"kind":"index_signature","stopBy":"neighbor","has":{"kind":"mapped_type_clause","stopBy":"neighbor"}}}},{"kind":"parenthesized_type","has":{"matches":"object-type","stopBy":"neighbor"}}]}},"when":{"option":{"option":{"in":[null,"interface"]}}}}},"violation":{"anchor":"capture.N","code":"@typescript-eslint/consistent-type-definitions","message":"Use an `interface` instead of a `type`.","fix":"interface $N$TP $B"}},{"id":"type-over-interface","forbid":{"ast":{"language":"typescript","rule":{"kind":"interface_declaration","all":[{"matches":"r3"},{"matches":"r5"},{"matches":"r1"},{"not":{"any":[{"matches":"r4"},{"inside":{"kind":"export_statement","stopBy":"neighbor","has":{"regex":"^default$","stopBy":"neighbor"}}},{"matches":"r2"}]}}]},"when":{"option":{"option":"type"}}}},"violation":{"anchor":"capture.N","code":"@typescript-eslint/consistent-type-definitions","message":"Use a `type` instead of an `interface`.","fix":"type $N$TP = $B"}},{"id":"type-over-interface-unfixed","forbid":{"ast":{"language":"typescript","rule":{"kind":"interface_declaration","all":[{"matches":"r3"},{"any":[{"matches":"r4"},{"matches":"r2"}]}]},"when":{"option":{"option":"type"}}}},"violation":{"anchor":"capture.N","code":"@typescript-eslint/consistent-type-definitions","message":"Use a `type` instead of an `interface`."}},{"id":"type-over-interface-export-default","forbid":{"ast":{"language":"typescript","rule":{"kind":"export_statement","all":[{"has":{"regex":"^default$","stopBy":"neighbor"}},{"has":{"kind":"interface_declaration","stopBy":"neighbor","all":[{"matches":"r3"},{"matches":"r5"},{"matches":"r1"},{"not":{"any":[{"matches":"r4"},{"matches":"r2"}]}}]}}]},"when":{"option":{"option":"type"}}}},"violation":{"anchor":"capture.N","code":"@typescript-eslint/consistent-type-definitions","message":"Use a `type` instead of an `interface`.","fix":"type $N$TP = $B\nexport default $N"}}]}
1
+ {"format":"rerail.policy/v1","id":"typescript-eslint-consistent-type-definitions","revision":5,"mode":"steer","description":"Port of typescript-eslint's `consistent-type-definitions` rule with its default option `interface` (https://typescript-eslint.io/rules/consistent-type-definitions). Flags type aliases whose type is an object literal type (through any parentheses) and fixes them to interfaces. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.","scope":{"include":["**/*.ts","**/*.tsx","**/*.mts","**/*.cts"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"option":{"type":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"any":[{"has":{"kind":"type_parameters","pattern":"$TP","stopBy":"neighbor"}},{"not":{"has":{"kind":"type_parameters","stopBy":"neighbor"}}}]},"r2":{"inside":{"has":{"regex":"^global$","stopBy":"neighbor"},"kind":"ambient_declaration","stopBy":"end"}},"r3":{"has":{"kind":"type_identifier","pattern":"$N","stopBy":"neighbor"}},"r4":{"has":{"kind":"extends_type_clause","stopBy":"neighbor"}},"r5":{"has":{"kind":"interface_body","pattern":"$B","stopBy":"neighbor"}}}}},{"id":"interface-over-type","forbid":{"ast":{"language":"typescript","rule":{"kind":"type_alias_declaration","all":[{"matches":"r3"},{"has":{"matches":"object-type","stopBy":"neighbor"}},{"matches":"r1"}]},"utils":{"object-type":{"any":[{"kind":"object_type","pattern":"$B","not":{"has":{"kind":"index_signature","stopBy":"neighbor","has":{"kind":"mapped_type_clause","stopBy":"neighbor"}}}},{"kind":"parenthesized_type","has":{"matches":"object-type","stopBy":"neighbor"}}]}},"when":{"option":{"option":{"in":[null,"interface"]}}}}},"violation":{"anchor":"capture.N","code":"@typescript-eslint/consistent-type-definitions","message":"Use an `interface` instead of a `type`.","fix":"interface $N$TP $B","suppress":{"eslint":{"rules":["@typescript-eslint/consistent-type-definitions"]},"oxlint":{"rules":["consistent-type-definitions"]},"biome":{"rules":["lint/style/useConsistentTypeDefinitions"]}}}},{"id":"type-over-interface","forbid":{"ast":{"language":"typescript","rule":{"kind":"interface_declaration","all":[{"matches":"r3"},{"matches":"r5"},{"matches":"r1"},{"not":{"any":[{"matches":"r4"},{"inside":{"kind":"export_statement","stopBy":"neighbor","has":{"regex":"^default$","stopBy":"neighbor"}}},{"matches":"r2"}]}}]},"when":{"option":{"option":"type"}}}},"violation":{"anchor":"capture.N","code":"@typescript-eslint/consistent-type-definitions","message":"Use a `type` instead of an `interface`.","fix":"type $N$TP = $B","suppress":{"eslint":{"rules":["@typescript-eslint/consistent-type-definitions"]},"oxlint":{"rules":["consistent-type-definitions"]},"biome":{"rules":["lint/style/useConsistentTypeDefinitions"]}}}},{"id":"type-over-interface-unfixed","forbid":{"ast":{"language":"typescript","rule":{"kind":"interface_declaration","all":[{"matches":"r3"},{"any":[{"matches":"r4"},{"matches":"r2"}]}]},"when":{"option":{"option":"type"}}}},"violation":{"anchor":"capture.N","code":"@typescript-eslint/consistent-type-definitions","message":"Use a `type` instead of an `interface`.","suppress":{"eslint":{"rules":["@typescript-eslint/consistent-type-definitions"]},"oxlint":{"rules":["consistent-type-definitions"]},"biome":{"rules":["lint/style/useConsistentTypeDefinitions"]}}}},{"id":"type-over-interface-export-default","forbid":{"ast":{"language":"typescript","rule":{"kind":"export_statement","all":[{"has":{"regex":"^default$","stopBy":"neighbor"}},{"has":{"kind":"interface_declaration","stopBy":"neighbor","all":[{"matches":"r3"},{"matches":"r5"},{"matches":"r1"},{"not":{"any":[{"matches":"r4"},{"matches":"r2"}]}}]}}]},"when":{"option":{"option":"type"}}}},"violation":{"anchor":"capture.N","code":"@typescript-eslint/consistent-type-definitions","message":"Use a `type` instead of an `interface`.","fix":"type $N$TP = $B\nexport default $N","suppress":{"eslint":{"rules":["@typescript-eslint/consistent-type-definitions"]},"oxlint":{"rules":["consistent-type-definitions"]},"biome":{"rules":["lint/style/useConsistentTypeDefinitions"]}}}}]}
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "typescript-eslint-default-param-last",
4
- "revision": 1,
4
+ "revision": 4,
5
5
  "mode": "steer",
6
6
  "description": "Port of typescript-eslint's `default-param-last` rule (https://typescript-eslint.io/rules/default-param-last), identical to the ESLint base port. Reports a defaulted or optional parameter of a function with a body that is followed by a required, non-rest parameter.",
7
- "scope": { "include": ["**/*"], "exclude": [] },
7
+ "scope": { "include": ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"], "exclude": [] },
8
8
  "clauses": [
9
9
  {
10
10
  "id": "default-param-not-last",
@@ -49,7 +49,7 @@
49
49
  }
50
50
  }
51
51
  },
52
- "violation": { "anchor": "witness.span", "code": "@typescript-eslint/default-param-last", "message": "Default parameters should be last." }
52
+ "violation": { "anchor": "witness.span", "code": "@typescript-eslint/default-param-last", "message": "Default parameters should be last.", "suppress": { "eslint": { "rules": ["@typescript-eslint/default-param-last"] }, "oxlint": { "rules": ["default-param-last"] }, "biome": { "rules": ["lint/style/useDefaultParameterLast"] } } }
53
53
  }
54
54
  ]
55
55
  }
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "typescript-eslint-no-array-constructor",
4
- "revision": 1,
4
+ "revision": 4,
5
5
  "mode": "steer",
6
6
  "description": "Port of typescript-eslint's `no-array-constructor` rule (https://typescript-eslint.io/rules/no-array-constructor). Flags `Array(...)` / `new Array(...)` unless called with exactly one argument or type arguments (no scope check: typescript-eslint's version does not resolve `Array`), and fixes to an array literal. Comments inside the argument list are not carried by the `$$$A` capture, so those calls get no fix.",
7
7
  "scope": {
8
8
  "include": [
9
- "**/*"
9
+ "**/*.ts",
10
+ "**/*.tsx",
11
+ "**/*.mts",
12
+ "**/*.cts"
10
13
  ],
11
14
  "exclude": []
12
15
  },
@@ -131,7 +134,24 @@
131
134
  "anchor": "witness.span",
132
135
  "code": "@typescript-eslint/no-array-constructor",
133
136
  "message": "The array literal notation [] is preferable.",
134
- "fix": "[$$$A]"
137
+ "fix": "[$$$A]",
138
+ "suppress": {
139
+ "eslint": {
140
+ "rules": [
141
+ "@typescript-eslint/no-array-constructor"
142
+ ]
143
+ },
144
+ "oxlint": {
145
+ "rules": [
146
+ "no-array-constructor"
147
+ ]
148
+ },
149
+ "biome": {
150
+ "rules": [
151
+ "lint/style/useArrayLiterals"
152
+ ]
153
+ }
154
+ }
135
155
  }
136
156
  },
137
157
  {
@@ -231,7 +251,24 @@
231
251
  "violation": {
232
252
  "anchor": "witness.span",
233
253
  "code": "@typescript-eslint/no-array-constructor",
234
- "message": "The array literal notation [] is preferable."
254
+ "message": "The array literal notation [] is preferable.",
255
+ "suppress": {
256
+ "eslint": {
257
+ "rules": [
258
+ "@typescript-eslint/no-array-constructor"
259
+ ]
260
+ },
261
+ "oxlint": {
262
+ "rules": [
263
+ "no-array-constructor"
264
+ ]
265
+ },
266
+ "biome": {
267
+ "rules": [
268
+ "lint/style/useArrayLiterals"
269
+ ]
270
+ }
271
+ }
235
272
  }
236
273
  }
237
274
  ]
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "typescript-eslint-no-confusing-non-null-assertion",
4
- "revision": 1,
4
+ "revision": 3,
5
5
  "mode": "steer",
6
6
  "description": "Port of typescript-eslint's `no-confusing-non-null-assertion` rule (https://typescript-eslint.io/rules/no-confusing-non-null-assertion). Flags `=`, `==`, `===`, `in` and `instanceof` expressions whose left operand ends in a non-null assertion `!` (outside parentheses).",
7
7
  "scope": {
8
8
  "include": [
9
- "**/*"
9
+ "**/*.ts",
10
+ "**/*.tsx",
11
+ "**/*.mts",
12
+ "**/*.cts"
10
13
  ],
11
14
  "exclude": []
12
15
  },
@@ -66,7 +69,19 @@
66
69
  "violation": {
67
70
  "anchor": "witness.span",
68
71
  "code": "@typescript-eslint/no-confusing-non-null-assertion",
69
- "message": "Confusing combination of non-null assertion and assignment like `a! = b`, which looks very similar to `a != b`."
72
+ "message": "Confusing combination of non-null assertion and assignment like `a! = b`, which looks very similar to `a != b`.",
73
+ "suppress": {
74
+ "eslint": {
75
+ "rules": [
76
+ "@typescript-eslint/no-confusing-non-null-assertion"
77
+ ]
78
+ },
79
+ "oxlint": {
80
+ "rules": [
81
+ "no-confusing-non-null-assertion"
82
+ ]
83
+ }
84
+ }
70
85
  }
71
86
  },
72
87
  {
@@ -124,7 +139,19 @@
124
139
  "violation": {
125
140
  "anchor": "witness.span",
126
141
  "code": "@typescript-eslint/no-confusing-non-null-assertion",
127
- "message": "Confusing combination of non-null assertion and equality test like `a! == b`, which looks very similar to `a !== b`."
142
+ "message": "Confusing combination of non-null assertion and equality test like `a! == b`, which looks very similar to `a !== b`.",
143
+ "suppress": {
144
+ "eslint": {
145
+ "rules": [
146
+ "@typescript-eslint/no-confusing-non-null-assertion"
147
+ ]
148
+ },
149
+ "oxlint": {
150
+ "rules": [
151
+ "no-confusing-non-null-assertion"
152
+ ]
153
+ }
154
+ }
128
155
  }
129
156
  },
130
157
  {
@@ -183,7 +210,19 @@
183
210
  "violation": {
184
211
  "anchor": "witness.span",
185
212
  "code": "@typescript-eslint/no-confusing-non-null-assertion",
186
- "message": "Confusing combination of non-null assertion and `$OP` operator like `a! $OP b`, which might be misinterpreted as `!(a $OP b)`."
213
+ "message": "Confusing combination of non-null assertion and `$OP` operator like `a! $OP b`, which might be misinterpreted as `!(a $OP b)`.",
214
+ "suppress": {
215
+ "eslint": {
216
+ "rules": [
217
+ "@typescript-eslint/no-confusing-non-null-assertion"
218
+ ]
219
+ },
220
+ "oxlint": {
221
+ "rules": [
222
+ "no-confusing-non-null-assertion"
223
+ ]
224
+ }
225
+ }
187
226
  }
188
227
  }
189
228
  ]
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"typescript-eslint-no-dupe-class-members","revision":4,"mode":"steer","description":"Port of typescript-eslint's `no-dupe-class-members` rule (https://typescript-eslint.io/rules/no-dupe-class-members). ESLint's base rule over non-computed members only, ignoring overload signatures: flags a class member whose static name (`compare` text `key`) repeats an earlier member of the same class and staticness; a getter may pair with a setter.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"duplicate-member","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"member"},{"pattern":"$P"},{"any":[{"has":{"stopBy":"neighbor","matches":"key","not":{"kind":"computed_property_name"},"pattern":"$K"}},{"has":{"stopBy":"neighbor","matches":"key","kind":"computed_property_name","has":{"stopBy":"neighbor","not":{"regex":"^[\\[\\]]$"},"pattern":"$K"}}}]},{"any":[{"all":[{"matches":"static"},{"matches":"get"},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"matches":"static"},{"not":{"matches":"set"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"matches":"static"},{"matches":"set"},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"matches":"static"},{"not":{"matches":"get"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"matches":"static"},{"all":[{"not":{"matches":"get"}},{"not":{"matches":"set"}}]},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"matches":"static"}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"not":{"matches":"static"}},{"matches":"get"},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"not":{"matches":"static"}},{"not":{"matches":"set"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"not":{"matches":"static"}},{"matches":"set"},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"not":{"matches":"static"}},{"not":{"matches":"get"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"not":{"matches":"static"}},{"all":[{"not":{"matches":"get"}},{"not":{"matches":"set"}}]},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"not":{"matches":"static"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]}]}]},"utils":{"member":{"all":[{"any":[{"kind":"method_definition"},{"kind":"public_field_definition"}]},{"inside":{"kind":"class_body","stopBy":"neighbor"}},{"not":{"matches":"ctor"}},{"not":{"has":{"stopBy":"neighbor","regex":"^abstract$","not":{"kind":"property_identifier"}}}},{"not":{"has":{"stopBy":"neighbor","regex":"^accessor$","not":{"kind":"property_identifier"}}}},{"not":{"has":{"stopBy":"neighbor","kind":"computed_property_name"}}}]},"key":{"any":[{"kind":"property_identifier"},{"kind":"string"},{"kind":"number"},{"kind":"computed_property_name"},{"kind":"private_property_identifier"}],"not":{"follows":{"stopBy":"end","regex":"^[=(]$"}}},"static":{"has":{"stopBy":"neighbor","regex":"^static$","not":{"kind":"property_identifier"}}},"get":{"kind":"method_definition","has":{"stopBy":"neighbor","regex":"^get$","not":{"kind":"property_identifier"}}},"set":{"kind":"method_definition","has":{"stopBy":"neighbor","regex":"^set$","not":{"kind":"property_identifier"}}},"ctor":{"kind":"method_definition","not":{"has":{"stopBy":"neighbor","regex":"^static$","not":{"kind":"property_identifier"}}},"has":{"stopBy":"neighbor","matches":"key","any":[{"kind":"property_identifier","regex":"^constructor$"},{"kind":"string","value":{"eq":"constructor"}}]}}},"transform":{"KT":{"substring":{"source":"$K","value":true}}}}},"violation":{"anchor":"capture.K","code":"@typescript-eslint/no-dupe-class-members","message":"Duplicate name '$KT'."}}]}
1
+ {"format":"rerail.policy/v1","id":"typescript-eslint-no-dupe-class-members","revision":7,"mode":"steer","description":"Port of typescript-eslint's `no-dupe-class-members` rule (https://typescript-eslint.io/rules/no-dupe-class-members). ESLint's base rule over non-computed members only, ignoring overload signatures: flags a class member whose static name (`compare` text `key`) repeats an earlier member of the same class and staticness; a getter may pair with a setter.","scope":{"include":["**/*.ts","**/*.tsx","**/*.mts","**/*.cts"],"exclude":[]},"clauses":[{"id":"duplicate-member","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"member"},{"pattern":"$P"},{"any":[{"has":{"stopBy":"neighbor","matches":"key","not":{"kind":"computed_property_name"},"pattern":"$K"}},{"has":{"stopBy":"neighbor","matches":"key","kind":"computed_property_name","has":{"stopBy":"neighbor","not":{"regex":"^[\\[\\]]$"},"pattern":"$K"}}}]},{"any":[{"all":[{"matches":"static"},{"matches":"get"},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"matches":"static"},{"not":{"matches":"set"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"matches":"static"},{"matches":"set"},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"matches":"static"},{"not":{"matches":"get"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"matches":"static"},{"all":[{"not":{"matches":"get"}},{"not":{"matches":"set"}}]},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"matches":"static"}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"not":{"matches":"static"}},{"matches":"get"},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"not":{"matches":"static"}},{"not":{"matches":"set"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"not":{"matches":"static"}},{"matches":"set"},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"not":{"matches":"static"}},{"not":{"matches":"get"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]},{"all":[{"not":{"matches":"static"}},{"all":[{"not":{"matches":"get"}},{"not":{"matches":"set"}}]},{"count":{"follows":{"stopBy":"end","all":[{"matches":"member"},{"not":{"matches":"static"}}],"pattern":"$Q","compare":{"left":"Q","op":"eq","right":"P","text":"key"}},"min":1}}]}]}]},"utils":{"member":{"all":[{"any":[{"kind":"method_definition"},{"kind":"public_field_definition"}]},{"inside":{"kind":"class_body","stopBy":"neighbor"}},{"not":{"matches":"ctor"}},{"not":{"has":{"stopBy":"neighbor","regex":"^abstract$","not":{"kind":"property_identifier"}}}},{"not":{"has":{"stopBy":"neighbor","regex":"^accessor$","not":{"kind":"property_identifier"}}}},{"not":{"has":{"stopBy":"neighbor","kind":"computed_property_name"}}}]},"key":{"any":[{"kind":"property_identifier"},{"kind":"string"},{"kind":"number"},{"kind":"computed_property_name"},{"kind":"private_property_identifier"}],"not":{"follows":{"stopBy":"end","regex":"^[=(]$"}}},"static":{"has":{"stopBy":"neighbor","regex":"^static$","not":{"kind":"property_identifier"}}},"get":{"kind":"method_definition","has":{"stopBy":"neighbor","regex":"^get$","not":{"kind":"property_identifier"}}},"set":{"kind":"method_definition","has":{"stopBy":"neighbor","regex":"^set$","not":{"kind":"property_identifier"}}},"ctor":{"kind":"method_definition","not":{"has":{"stopBy":"neighbor","regex":"^static$","not":{"kind":"property_identifier"}}},"has":{"stopBy":"neighbor","matches":"key","any":[{"kind":"property_identifier","regex":"^constructor$"},{"kind":"string","value":{"eq":"constructor"}}]}}},"transform":{"KT":{"substring":{"source":"$K","value":true}}}}},"violation":{"anchor":"capture.K","code":"@typescript-eslint/no-dupe-class-members","message":"Duplicate name '$KT'.","suppress":{"eslint":{"rules":["@typescript-eslint/no-dupe-class-members"]},"oxlint":{"rules":["no-dupe-class-members"]},"biome":{"rules":["lint/suspicious/noDuplicateClassMembers"]}}}}]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "typescript-eslint-no-duplicate-enum-values",
4
- "revision": 3,
4
+ "revision": 6,
5
5
  "mode": "steer",
6
6
  "description": "typescript-eslint 8.70.1 @typescript-eslint/no-duplicate-enum-values, default options. Port of typescript-eslint's `no-duplicate-enum-values` rule (https://typescript-eslint.io/rules/no-duplicate-enum-values). Flags an enum member whose initializer (a string, number or static template literal under any chain of unary + and -) has the same value, by Object.is, as an earlier member's; NaN values and other initializers are ignored.",
7
7
  "scope": {
@@ -9,11 +9,7 @@
9
9
  "**/*.ts",
10
10
  "**/*.tsx",
11
11
  "**/*.mts",
12
- "**/*.cts",
13
- "**/*.js",
14
- "**/*.jsx",
15
- "**/*.mjs",
16
- "**/*.cjs"
12
+ "**/*.cts"
17
13
  ],
18
14
  "exclude": []
19
15
  },
@@ -170,6 +166,16 @@
170
166
  "rules": [
171
167
  "@typescript-eslint/no-duplicate-enum-values"
172
168
  ]
169
+ },
170
+ "oxlint": {
171
+ "rules": [
172
+ "no-duplicate-enum-values"
173
+ ]
174
+ },
175
+ "biome": {
176
+ "rules": [
177
+ "lint/suspicious/noDuplicateEnumValues"
178
+ ]
173
179
  }
174
180
  }
175
181
  }
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"typescript-eslint-no-empty-function","revision":4,"mode":"steer","description":"Port of typescript-eslint's `no-empty-function` rule (https://typescript-eslint.io/rules/no-empty-function). Reports a function, method or arrow body `{}` that holds no statement and no comment; constructors with parameter properties are exempt. Default options (allow: []). Options are declared in the `options` define (the rule's defaults); a variant is a config patch.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allow":{"type":"array","items":"string","default":[]}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"any":[{"kind":"identifier"},{"kind":"property_identifier"}]},"r2":{"any":[{"kind":"property_identifier","pattern":"$NAME"},{"kind":"number","pattern":"$NAME"},{"kind":"string","pattern":"$NAME"},{"has":{"any":[{"kind":"string"},{"kind":"number"},{"kind":"template_string","not":{"has":{"kind":"template_substitution"}}}],"pattern":"$NAME"},"kind":"computed_property_name"}]},"r3":{"all":[{"kind":"method_definition"},{"not":{"has":{"not":{"matches":"r1"},"regex":"^static$"}}},{"has":{"any":[{"kind":"property_identifier","regex":"^constructor$"},{"has":{"kind":"string_fragment","regex":"^constructor$"},"kind":"string"}],"field":"name"}},{"inside":{"kind":"class_body"}}]},"r4":{"any":[{"kind":"function_expression"},{"kind":"function_declaration"}]},"r5":{"has":{"not":{"matches":"r1"},"regex":"^async$"}},"r6":{"any":[{"matches":"r13"},{"regex":"^"}]},"r7":{"not":{"inside":{"any":[{"kind":"pair"},{"kind":"public_field_definition"}],"field":"value","stopBy":{"not":{"kind":"parenthesized_expression"}}}}},"r8":{"has":{"field":"name","kind":"identifier","pattern":"$FID"}},"r9":{"kind":"private_property_identifier","pattern":"$PN"},"r10":{"any":[{"kind":"generator_function"},{"kind":"generator_function_declaration"}]},"r11":{"has":{"not":{"matches":"r1"},"pattern":"$$ST","regex":"^static$"}},"r12":{"follows":{"kind":"decorator","stopBy":{"not":{"kind":"comment"}}}},"r13":{"has":{"not":{"matches":"r1"},"pattern":"$$AS","regex":"^async$"}},"r14":{"any":[{"has":{"pattern":"$$GN","regex":"^\\*$"}},{"regex":"^"}]},"r15":{"all":[{"matches":"r4"},{"not":{"matches":"r5"}}]},"r16":{"has":{"not":{"matches":"r1"},"regex":"^get$"}},"r17":{"has":{"not":{"matches":"r1"},"regex":"^set$"}}}}},{"id":"method","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"kind":"method_definition"},{"not":{"matches":"r3"}},{"any":[{"matches":"r16"},{"matches":"r17"},{"has":{"regex":"^\\*$"}},{"all":[{"matches":"r5"},{"not":{"has":{"regex":"^\\*$"}}}]},{"$option":"allow","cases":{"[\"methods\"]":[]},"default":[{"all":[{"not":{"matches":"r16"}},{"not":{"matches":"r17"}},{"not":{"has":{"regex":"^\\*$"}}},{"not":{"matches":"r5"}}]}],"spread":true}]},{"any":[{"matches":"r11"},{"kind":"method_definition"}]},{"any":[{"matches":"r13"},{"kind":"method_definition"}]},{"any":[{"has":{"regex":"^\\*$","pattern":"$$GN"}},{"kind":"method_definition"}]},{"any":[{"has":{"regex":"^[gs]et$","not":{"matches":"r1"},"pattern":"$$KW"}},{"has":{"field":"parameters","pattern":"$$KW"}}]},{"any":[{"has":{"field":"name","matches":"r9"}},{"has":{"field":"name","matches":"r2"}},{"regex":"^"}]},{"$option":"allow","cases":{"[\"decoratedFunctions\"]":[{"not":{"$option":"allow","cases":{"[\"overrideMethods\"]":{"has":{"kind":"override_modifier"}}},"default":{"matches":"r12"}}}],"[\"overrideMethods\"]":[{"not":{"$option":"allow","cases":{"[\"overrideMethods\"]":{"has":{"kind":"override_modifier"}}},"default":{"matches":"r12"}}}]},"default":[],"spread":true}]}},"transform":{"STW":{"replace":{"source":"$ST","replace":"^.+$","by":"static "}},"PW":{"replace":{"source":"$PN","replace":"^.+$","by":"private "}},"PNQ":{"replace":{"source":"$PN","replace":"^(.+)$","by":" ${1}"}},"ASW":{"replace":{"source":"$AS","replace":"^.+$","by":"async "}},"GNW":{"replace":{"source":"$GN","replace":"^.+$","by":"generator "}},"NQ":{"replace":{"source":"$NAME","value":true,"replace":"(?s)^(.*)$","by":" '${1}'"}},"KWW":{"replace":{"source":"$KW","replace":"(?s)^\\(.*$","by":"method"}},"KWX":{"replace":{"source":"$KWW","replace":"^([gs])et$","by":"${1}etter"}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty $STW$PW$ASW$GNW$KWX$NQ$PNQ."}},{"id":"constructor","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"matches":"r3"},{"not":{"has":{"field":"parameters","has":{"any":[{"kind":"required_parameter"},{"kind":"optional_parameter"}],"has":{"any":[{"kind":"accessibility_modifier"},{"kind":"override_modifier"},{"regex":"^readonly$","not":{"matches":"r1"}}]}}}}},{"$option":"allow","cases":{"[\"private-constructors\"]":[{"not":{"has":{"kind":"accessibility_modifier","regex":{"$option":"allow","cases":{"[\"protected-constructors\"]":"^protected$"},"default":"^private$"}}}}],"[\"protected-constructors\"]":[{"not":{"has":{"kind":"accessibility_modifier","regex":{"$option":"allow","cases":{"[\"protected-constructors\"]":"^protected$"},"default":"^private$"}}}}]},"default":[],"spread":true}]}},"when":{"option":{"allow":{"in":[[],["methods"],["private-constructors"],["protected-constructors"],["decoratedFunctions"],["overrideMethods"]]}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty constructor."}},{"id":"member-function","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"any":[{"matches":"r15"},{"all":[{"matches":"r4"},{"matches":"r5"}]},{"matches":"r10"},{"kind":"arrow_function"}]},{"matches":"r6"},{"matches":"r14"},{"inside":{"field":"value","stopBy":{"not":{"kind":"parenthesized_expression"}},"any":[{"kind":"pair"},{"kind":"public_field_definition"}],"all":[{"any":[{"matches":"r11"},{"regex":"^"}]},{"any":[{"all":[{"kind":"pair"},{"any":[{"has":{"field":"key","matches":"r9"}},{"has":{"field":"key","matches":"r2"}},{"has":{"field":"value","matches":"r8"}},{"regex":"^"}]}]},{"all":[{"kind":"public_field_definition"},{"any":[{"has":{"field":"name","matches":"r9"}},{"has":{"field":"name","matches":"r2"}},{"has":{"field":"value","matches":"r8"}},{"regex":"^"}]}]}]}]}}]}},"transform":{"STW":{"replace":{"source":"$ST","replace":"^.+$","by":"static "}},"PW":{"replace":{"source":"$PN","replace":"^.+$","by":"private "}},"PNQ":{"replace":{"source":"$PN","replace":"^(.+)$","by":" ${1}"}},"ASW":{"replace":{"source":"$AS","replace":"^.+$","by":"async "}},"GNW":{"replace":{"source":"$GN","replace":"^.+$","by":"generator "}},"NQ":{"replace":{"source":"$NAME","value":true,"replace":"(?s)^(.*)$","by":" '${1}'"}},"FQ":{"replace":{"source":"$FID","replace":"^(.+)$","by":" '${1}'"}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty $STW$PW$ASW$GNWmethod$NQ$PNQ$FQ."}},{"id":"function","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"any":[{"matches":"r15"},{"all":[{"matches":"r4"},{"matches":"r5"}]},{"matches":"r10"}]},{"matches":"r7"},{"matches":"r6"},{"matches":"r14"},{"any":[{"matches":"r8"},{"regex":"^"}]}]}},"transform":{"ASW":{"replace":{"source":"$AS","replace":"^.+$","by":"async "}},"GNW":{"replace":{"source":"$GN","replace":"^.+$","by":"generator "}},"FQ":{"replace":{"source":"$FID","replace":"^(.+)$","by":" '${1}'"}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty $ASW$GNWfunction$FQ."}},{"id":"arrow-function","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"kind":"arrow_function"},{"matches":"r7"},{"matches":"r6"}]}},"transform":{"ASW":{"replace":{"source":"$AS","replace":"^.+$","by":"async "}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty $ASWarrow function."}}]}
1
+ {"format":"rerail.policy/v1","id":"typescript-eslint-no-empty-function","revision":7,"mode":"steer","description":"Port of typescript-eslint's `no-empty-function` rule (https://typescript-eslint.io/rules/no-empty-function). Reports a function, method or arrow body `{}` that holds no statement and no comment; constructors with parameter properties are exempt. Default options (allow: []). Options are declared in the `options` define (the rule's defaults); a variant is a config patch.","scope":{"include":["**/*.ts","**/*.tsx","**/*.mts","**/*.cts"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allow":{"type":"array","items":"string","default":[]}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"any":[{"kind":"identifier"},{"kind":"property_identifier"}]},"r2":{"any":[{"kind":"property_identifier","pattern":"$NAME"},{"kind":"number","pattern":"$NAME"},{"kind":"string","pattern":"$NAME"},{"has":{"any":[{"kind":"string"},{"kind":"number"},{"kind":"template_string","not":{"has":{"kind":"template_substitution"}}}],"pattern":"$NAME"},"kind":"computed_property_name"}]},"r3":{"all":[{"kind":"method_definition"},{"not":{"has":{"not":{"matches":"r1"},"regex":"^static$"}}},{"has":{"any":[{"kind":"property_identifier","regex":"^constructor$"},{"has":{"kind":"string_fragment","regex":"^constructor$"},"kind":"string"}],"field":"name"}},{"inside":{"kind":"class_body"}}]},"r4":{"any":[{"kind":"function_expression"},{"kind":"function_declaration"}]},"r5":{"has":{"not":{"matches":"r1"},"regex":"^async$"}},"r6":{"any":[{"matches":"r13"},{"regex":"^"}]},"r7":{"not":{"inside":{"any":[{"kind":"pair"},{"kind":"public_field_definition"}],"field":"value","stopBy":{"not":{"kind":"parenthesized_expression"}}}}},"r8":{"has":{"field":"name","kind":"identifier","pattern":"$FID"}},"r9":{"kind":"private_property_identifier","pattern":"$PN"},"r10":{"any":[{"kind":"generator_function"},{"kind":"generator_function_declaration"}]},"r11":{"has":{"not":{"matches":"r1"},"pattern":"$$ST","regex":"^static$"}},"r12":{"follows":{"kind":"decorator","stopBy":{"not":{"kind":"comment"}}}},"r13":{"has":{"not":{"matches":"r1"},"pattern":"$$AS","regex":"^async$"}},"r14":{"any":[{"has":{"pattern":"$$GN","regex":"^\\*$"}},{"regex":"^"}]},"r15":{"all":[{"matches":"r4"},{"not":{"matches":"r5"}}]},"r16":{"has":{"not":{"matches":"r1"},"regex":"^get$"}},"r17":{"has":{"not":{"matches":"r1"},"regex":"^set$"}}}}},{"id":"method","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"kind":"method_definition"},{"not":{"matches":"r3"}},{"any":[{"matches":"r16"},{"matches":"r17"},{"has":{"regex":"^\\*$"}},{"all":[{"matches":"r5"},{"not":{"has":{"regex":"^\\*$"}}}]},{"$option":"allow","cases":{"[\"methods\"]":[]},"default":[{"all":[{"not":{"matches":"r16"}},{"not":{"matches":"r17"}},{"not":{"has":{"regex":"^\\*$"}}},{"not":{"matches":"r5"}}]}],"spread":true}]},{"any":[{"matches":"r11"},{"kind":"method_definition"}]},{"any":[{"matches":"r13"},{"kind":"method_definition"}]},{"any":[{"has":{"regex":"^\\*$","pattern":"$$GN"}},{"kind":"method_definition"}]},{"any":[{"has":{"regex":"^[gs]et$","not":{"matches":"r1"},"pattern":"$$KW"}},{"has":{"field":"parameters","pattern":"$$KW"}}]},{"any":[{"has":{"field":"name","matches":"r9"}},{"has":{"field":"name","matches":"r2"}},{"regex":"^"}]},{"$option":"allow","cases":{"[\"decoratedFunctions\"]":[{"not":{"$option":"allow","cases":{"[\"overrideMethods\"]":{"has":{"kind":"override_modifier"}}},"default":{"matches":"r12"}}}],"[\"overrideMethods\"]":[{"not":{"$option":"allow","cases":{"[\"overrideMethods\"]":{"has":{"kind":"override_modifier"}}},"default":{"matches":"r12"}}}]},"default":[],"spread":true}]}},"transform":{"STW":{"replace":{"source":"$ST","replace":"^.+$","by":"static "}},"PW":{"replace":{"source":"$PN","replace":"^.+$","by":"private "}},"PNQ":{"replace":{"source":"$PN","replace":"^(.+)$","by":" ${1}"}},"ASW":{"replace":{"source":"$AS","replace":"^.+$","by":"async "}},"GNW":{"replace":{"source":"$GN","replace":"^.+$","by":"generator "}},"NQ":{"replace":{"source":"$NAME","value":true,"replace":"(?s)^(.*)$","by":" '${1}'"}},"KWW":{"replace":{"source":"$KW","replace":"(?s)^\\(.*$","by":"method"}},"KWX":{"replace":{"source":"$KWW","replace":"^([gs])et$","by":"${1}etter"}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty $STW$PW$ASW$GNW$KWX$NQ$PNQ.","suppress":{"eslint":{"rules":["@typescript-eslint/no-empty-function"]},"oxlint":{"rules":["no-empty-function"]},"biome":{"rules":["lint/suspicious/noEmptyBlockStatements"]}}}},{"id":"constructor","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"matches":"r3"},{"not":{"has":{"field":"parameters","has":{"any":[{"kind":"required_parameter"},{"kind":"optional_parameter"}],"has":{"any":[{"kind":"accessibility_modifier"},{"kind":"override_modifier"},{"regex":"^readonly$","not":{"matches":"r1"}}]}}}}},{"$option":"allow","cases":{"[\"private-constructors\"]":[{"not":{"has":{"kind":"accessibility_modifier","regex":{"$option":"allow","cases":{"[\"protected-constructors\"]":"^protected$"},"default":"^private$"}}}}],"[\"protected-constructors\"]":[{"not":{"has":{"kind":"accessibility_modifier","regex":{"$option":"allow","cases":{"[\"protected-constructors\"]":"^protected$"},"default":"^private$"}}}}]},"default":[],"spread":true}]}},"when":{"option":{"allow":{"in":[[],["methods"],["private-constructors"],["protected-constructors"],["decoratedFunctions"],["overrideMethods"]]}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty constructor.","suppress":{"eslint":{"rules":["@typescript-eslint/no-empty-function"]},"oxlint":{"rules":["no-empty-function"]},"biome":{"rules":["lint/suspicious/noEmptyBlockStatements"]}}}},{"id":"member-function","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"any":[{"matches":"r15"},{"all":[{"matches":"r4"},{"matches":"r5"}]},{"matches":"r10"},{"kind":"arrow_function"}]},{"matches":"r6"},{"matches":"r14"},{"inside":{"field":"value","stopBy":{"not":{"kind":"parenthesized_expression"}},"any":[{"kind":"pair"},{"kind":"public_field_definition"}],"all":[{"any":[{"matches":"r11"},{"regex":"^"}]},{"any":[{"all":[{"kind":"pair"},{"any":[{"has":{"field":"key","matches":"r9"}},{"has":{"field":"key","matches":"r2"}},{"has":{"field":"value","matches":"r8"}},{"regex":"^"}]}]},{"all":[{"kind":"public_field_definition"},{"any":[{"has":{"field":"name","matches":"r9"}},{"has":{"field":"name","matches":"r2"}},{"has":{"field":"value","matches":"r8"}},{"regex":"^"}]}]}]}]}}]}},"transform":{"STW":{"replace":{"source":"$ST","replace":"^.+$","by":"static "}},"PW":{"replace":{"source":"$PN","replace":"^.+$","by":"private "}},"PNQ":{"replace":{"source":"$PN","replace":"^(.+)$","by":" ${1}"}},"ASW":{"replace":{"source":"$AS","replace":"^.+$","by":"async "}},"GNW":{"replace":{"source":"$GN","replace":"^.+$","by":"generator "}},"NQ":{"replace":{"source":"$NAME","value":true,"replace":"(?s)^(.*)$","by":" '${1}'"}},"FQ":{"replace":{"source":"$FID","replace":"^(.+)$","by":" '${1}'"}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty $STW$PW$ASW$GNWmethod$NQ$PNQ$FQ.","suppress":{"eslint":{"rules":["@typescript-eslint/no-empty-function"]},"oxlint":{"rules":["no-empty-function"]},"biome":{"rules":["lint/suspicious/noEmptyBlockStatements"]}}}},{"id":"function","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"any":[{"matches":"r15"},{"all":[{"matches":"r4"},{"matches":"r5"}]},{"matches":"r10"}]},{"matches":"r7"},{"matches":"r6"},{"matches":"r14"},{"any":[{"matches":"r8"},{"regex":"^"}]}]}},"transform":{"ASW":{"replace":{"source":"$AS","replace":"^.+$","by":"async "}},"GNW":{"replace":{"source":"$GN","replace":"^.+$","by":"generator "}},"FQ":{"replace":{"source":"$FID","replace":"^(.+)$","by":" '${1}'"}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty $ASW$GNWfunction$FQ.","suppress":{"eslint":{"rules":["@typescript-eslint/no-empty-function"]},"oxlint":{"rules":["no-empty-function"]},"biome":{"rules":["lint/suspicious/noEmptyBlockStatements"]}}}},{"id":"arrow-function","forbid":{"ast":{"language":"typescript","rule":{"kind":"statement_block","regex":"^\\{\\s*\\}","inside":{"field":"body","all":[{"kind":"arrow_function"},{"matches":"r7"},{"matches":"r6"}]}},"transform":{"ASW":{"replace":{"source":"$AS","replace":"^.+$","by":"async "}}}}},"violation":{"anchor":"witness.span","code":"@typescript-eslint/no-empty-function","message":"Unexpected empty $ASWarrow function.","suppress":{"eslint":{"rules":["@typescript-eslint/no-empty-function"]},"oxlint":{"rules":["no-empty-function"]},"biome":{"rules":["lint/suspicious/noEmptyBlockStatements"]}}}}]}
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "typescript-eslint-no-extra-non-null-assertion",
4
- "revision": 1,
4
+ "revision": 4,
5
5
  "mode": "steer",
6
6
  "description": "Port of typescript-eslint's `no-extra-non-null-assertion` rule (https://typescript-eslint.io/rules/no-extra-non-null-assertion). Flags a non-null assertion that is itself asserted non-null again, or that is the object/callee of an optional chain (parentheses are transparent, as in ESTree).",
7
7
  "scope": {
8
8
  "include": [
9
- "**/*"
9
+ "**/*.ts",
10
+ "**/*.tsx",
11
+ "**/*.mts",
12
+ "**/*.cts"
10
13
  ],
11
14
  "exclude": []
12
15
  },
@@ -77,7 +80,24 @@
77
80
  "anchor": "witness.span",
78
81
  "code": "@typescript-eslint/no-extra-non-null-assertion",
79
82
  "message": "Forbidden extra non-null assertion.",
80
- "fix": "$E"
83
+ "fix": "$E",
84
+ "suppress": {
85
+ "eslint": {
86
+ "rules": [
87
+ "@typescript-eslint/no-extra-non-null-assertion"
88
+ ]
89
+ },
90
+ "oxlint": {
91
+ "rules": [
92
+ "no-extra-non-null-assertion"
93
+ ]
94
+ },
95
+ "biome": {
96
+ "rules": [
97
+ "lint/suspicious/noExtraNonNullAssertion"
98
+ ]
99
+ }
100
+ }
81
101
  }
82
102
  }
83
103
  ]
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "typescript-eslint-no-import-type-side-effects",
4
- "revision": 1,
4
+ "revision": 3,
5
5
  "mode": "steer",
6
6
  "description": "Port of typescript-eslint's `no-import-type-side-effects` rule (https://typescript-eslint.io/rules/no-import-type-side-effects). Flags an import whose specifiers are all inline `type` specifiers.",
7
7
  "scope": {
8
8
  "include": [
9
- "**/*"
9
+ "**/*.ts",
10
+ "**/*.tsx",
11
+ "**/*.mts",
12
+ "**/*.cts"
10
13
  ],
11
14
  "exclude": []
12
15
  },
@@ -103,7 +106,19 @@
103
106
  "violation": {
104
107
  "anchor": "witness.span",
105
108
  "code": "@typescript-eslint/no-import-type-side-effects",
106
- "message": "TypeScript will only remove the inline type specifiers which will leave behind a side effect import at runtime. Convert this to a top-level type qualifier to properly remove the entire import."
109
+ "message": "TypeScript will only remove the inline type specifiers which will leave behind a side effect import at runtime. Convert this to a top-level type qualifier to properly remove the entire import.",
110
+ "suppress": {
111
+ "eslint": {
112
+ "rules": [
113
+ "@typescript-eslint/no-import-type-side-effects"
114
+ ]
115
+ },
116
+ "oxlint": {
117
+ "rules": [
118
+ "no-import-type-side-effects"
119
+ ]
120
+ }
121
+ }
107
122
  }
108
123
  },
109
124
  {
@@ -219,7 +234,19 @@
219
234
  "anchor": "witness.span",
220
235
  "code": "@typescript-eslint/no-import-type-side-effects",
221
236
  "message": "TypeScript will only remove the inline type specifiers which will leave behind a side effect import at runtime. Convert this to a top-level type qualifier to properly remove the entire import.",
222
- "fix": "import type { $A } from $S;"
237
+ "fix": "import type { $A } from $S;",
238
+ "suppress": {
239
+ "eslint": {
240
+ "rules": [
241
+ "@typescript-eslint/no-import-type-side-effects"
242
+ ]
243
+ },
244
+ "oxlint": {
245
+ "rules": [
246
+ "no-import-type-side-effects"
247
+ ]
248
+ }
249
+ }
223
250
  }
224
251
  },
225
252
  {
@@ -329,7 +356,19 @@
329
356
  "anchor": "witness.span",
330
357
  "code": "@typescript-eslint/no-import-type-side-effects",
331
358
  "message": "TypeScript will only remove the inline type specifiers which will leave behind a side effect import at runtime. Convert this to a top-level type qualifier to properly remove the entire import.",
332
- "fix": "import type { $A as $B } from $S;"
359
+ "fix": "import type { $A as $B } from $S;",
360
+ "suppress": {
361
+ "eslint": {
362
+ "rules": [
363
+ "@typescript-eslint/no-import-type-side-effects"
364
+ ]
365
+ },
366
+ "oxlint": {
367
+ "rules": [
368
+ "no-import-type-side-effects"
369
+ ]
370
+ }
371
+ }
333
372
  }
334
373
  }
335
374
  ]
@@ -1,19 +1,15 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "typescript-eslint-no-namespace",
4
- "revision": 3,
4
+ "revision": 7,
5
5
  "mode": "steer",
6
- "description": "typescript-eslint 8.70.1 @typescript-eslint/no-namespace, default options. allowDefinitionFiles is fixed at its default (true): a file whose name typescript-eslint's isDefinitionFile matches (`\\.d\\.(ts|cts|mts|.*\\.ts)$`) is not checked. Port of typescript-eslint's `no-namespace` rule (https://typescript-eslint.io/rules/no-namespace). Flags `namespace X {}` and `module X {}` (not `declare global` or `declare module 'name'`) with its defaults: declared namespaces are flagged, and definition files (*.d.ts, *.d.cts, *.d.mts, *.d.*.ts) are exempt through the document scope. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.",
6
+ "description": "typescript-eslint 8.70.1 @typescript-eslint/no-namespace, default options. allowDefinitionFiles is fixed at its default (true): a file whose name typescript-eslint's isDefinitionFile matches (`\\.d\\.(ts|cts|mts|.*\\.ts)$`) is not checked. Port of typescript-eslint's `no-namespace` rule (https://typescript-eslint.io/rules/no-namespace). Flags `namespace X {}` and `module X {}` (not `declare global`, `global {}` inside `declare module 'name'`, or `declare module 'name'`) with its defaults: declared namespaces are flagged, and definition files (*.d.ts, *.d.cts, *.d.mts, *.d.*.ts) are exempt through the document scope. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.ts",
10
10
  "**/*.tsx",
11
11
  "**/*.mts",
12
- "**/*.cts",
13
- "**/*.js",
14
- "**/*.jsx",
15
- "**/*.mjs",
16
- "**/*.cjs"
12
+ "**/*.cts"
17
13
  ],
18
14
  "exclude": []
19
15
  },
@@ -38,7 +34,11 @@
38
34
  "r1": {
39
35
  "any": [
40
36
  {
41
- "kind": "internal_module"
37
+ "kind": "internal_module",
38
+ "has": {
39
+ "regex": "^namespace$",
40
+ "stopBy": "neighbor"
41
+ }
42
42
  },
43
43
  {
44
44
  "kind": "module",
@@ -107,6 +107,16 @@
107
107
  "rules": [
108
108
  "@typescript-eslint/no-namespace"
109
109
  ]
110
+ },
111
+ "oxlint": {
112
+ "rules": [
113
+ "no-namespace"
114
+ ]
115
+ },
116
+ "biome": {
117
+ "rules": [
118
+ "lint/style/noNamespace"
119
+ ]
110
120
  }
111
121
  }
112
122
  }
@@ -149,6 +159,16 @@
149
159
  "rules": [
150
160
  "@typescript-eslint/no-namespace"
151
161
  ]
162
+ },
163
+ "oxlint": {
164
+ "rules": [
165
+ "no-namespace"
166
+ ]
167
+ },
168
+ "biome": {
169
+ "rules": [
170
+ "lint/style/noNamespace"
171
+ ]
152
172
  }
153
173
  }
154
174
  }