@neralabs/rerail-pack-javascript 0.1.1 → 0.1.3

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.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
- # Rerail rule pack: JavaScript
1
+ # Rerail rule pack: JavaScript and TypeScript (ESLint core)
2
2
 
3
- 65 code rules for JavaScript and TypeScript source, ported from ESLint 10.11.0's core rules with their default options.
4
- 22 start on; 43 start off (`"on": false`) because `eslint:recommended` does not turn them on, so they are experimental.
3
+ 71 code rules for JavaScript and TypeScript source, ported from ESLint 10.11.0's core rules with their default options.
4
+ 24 start on; 47 start off (`"on": false`) because `eslint:recommended` does not turn them on, so they are experimental.
5
5
  Each shipped rule is scored against ESLint's own findings on ESLint's test cases, through the engine's production
6
6
  workspace path, with every disagreement declared in `divergences.json` (none today).
7
7
 
@@ -17,12 +17,21 @@ It is checked by `npx vitest run test/engine/catalog/packs.test.ts -t "pack java
17
17
  | `upstream/eslint/` | ESLint's copied test cases (`fixtures/`) and its recording (`fixtures.expected.json`) |
18
18
  | `upstream/generate.mjs` | ESLint's recorder |
19
19
  | `upstream/eslint-plugin-unicorn/` | eslint-plugin-unicorn's copied test cases, its recording and its recorder (`generate.mjs`) |
20
+ | `upstream/<tool>/gates.yaml`, `recording.lock`, `goldens.tsv` | The port readiness gates' manifest for the tool, the lock naming its recordings (`recording.json`, `corpus.json`, held in a GitHub release) and its goldens ([docs/port-readiness.md](../../docs/port-readiness.md)) |
20
21
  | `candidates/rules/` | Ports of ESLint and eslint-plugin-unicorn rules still being evaluated: listed in `conformance.json`, scored and reported, never gated, never shipped |
21
22
  | `licenses/<tool>/` | The tool's licence and `UPSTREAM.md`, listing every copied file |
22
23
 
23
24
  The pack is recommended for a repository with JavaScript or TypeScript source files. Files under test, script and
24
25
  fixture folders, test and spec files, and configuration files (`*.config.*`, `.*rc.*`) do not count.
25
26
 
27
+ This pack and the [TypeScript pack](../typescript/README.md) split ECMA files by type. The 21 core rules that
28
+ typescript-eslint 8.70.1 replaces with an extension rule, or turns off for TypeScript in its `eslint-recommended`
29
+ configuration (`no-redeclare`, `no-undef`, `no-unused-vars`, `no-dupe-keys` and others), run on `.js`, `.jsx`, `.mjs`
30
+ and `.cjs` files only, and are scored on ESLint's JavaScript test cases only (`fixtures` in `conformance.json`). On
31
+ TypeScript they report overloads, declaration merges and type names, and with both packs added a typescript-eslint
32
+ port would report the same violation again. `no-loss-of-precision` and `prefer-spread`, which typescript-eslint leaves
33
+ to the core rule on TypeScript, run on every ECMA file.
34
+
26
35
  Re-recording runs offline against the pinned tool versions (the recorder's header lists them):
27
36
 
28
37
  ```sh
@@ -9,9 +9,13 @@ under the pack's licence expression, `Apache-2.0 AND MIT`, as `REUSE.toml` annot
9
9
  Apache License 2.0 (the pack's `LICENSE`): the recorder `upstream/generate.mjs`, and the `*.expected.json` recordings
10
10
  it writes by running ESLint.
11
11
 
12
- Each copied file is the `code` of one of the rule's own `valid` or `invalid` RuleTester cases, verbatim, written
13
- by `upstream/generate.mjs`: cases with a custom parser or type information, and performance stress cases over 64 KiB,
14
- are left out, and identical code in the same language is written once.
12
+ Each copied file is the `code` of one of the rule's own `valid` or `invalid` RuleTester cases, verbatim, written by
13
+ `upstream/generate.mjs`: cases with a custom parser or type information, and performance stress cases over 64 KiB, are
14
+ left out, and identical code in the same language is written once. The port readiness gates' recorder (`npm run port-readiness:record`)
15
+ reuses those files and writes every other case the gates read, the same verbatim `code`, as
16
+ `upstream/eslint/fixtures/<rule>/<sha256 prefix>.<ext>`. Its recording (`recording.json`, which
17
+ `upstream/eslint/recording.lock` names and a GitHub release holds) also holds the `code` of every RuleTester case of
18
+ ESLint's rule tests, verbatim, as the words `not-overfit` reads.
15
19
 
16
20
  Paths are relative to the pack directory, `packs/javascript/`.
17
21
 
@@ -6971,6 +6975,10 @@ Paths are relative to the pack directory, `packs/javascript/`.
6971
6975
  | `upstream/eslint/fixtures/no-unexpected-multiline/052.js` | `tests/lib/rules/no-unexpected-multiline.js` | derived |
6972
6976
  | `upstream/eslint/fixtures/no-unexpected-multiline/053.js` | `tests/lib/rules/no-unexpected-multiline.js` | derived |
6973
6977
  | `upstream/eslint/fixtures/no-unexpected-multiline/054.js` | `tests/lib/rules/no-unexpected-multiline.js` | derived |
6978
+ | `upstream/eslint/fixtures/no-unexpected-multiline/09012da2448d.ts` | `tests/lib/rules/no-unexpected-multiline.js` | derived |
6979
+ | `upstream/eslint/fixtures/no-unexpected-multiline/16c56cd7a81e.ts` | `tests/lib/rules/no-unexpected-multiline.js` | derived |
6980
+ | `upstream/eslint/fixtures/no-unexpected-multiline/76ed1f1f9f52.ts` | `tests/lib/rules/no-unexpected-multiline.js` | derived |
6981
+ | `upstream/eslint/fixtures/no-unexpected-multiline/b2f0d5ba988b.ts` | `tests/lib/rules/no-unexpected-multiline.js` | derived |
6974
6982
  | `upstream/eslint/fixtures/no-unneeded-ternary/001.js` | `tests/lib/rules/no-unneeded-ternary.js` | derived |
6975
6983
  | `upstream/eslint/fixtures/no-unneeded-ternary/002.js` | `tests/lib/rules/no-unneeded-ternary.js` | derived |
6976
6984
  | `upstream/eslint/fixtures/no-unneeded-ternary/003.js` | `tests/lib/rules/no-unneeded-ternary.js` | derived |
@@ -7011,6 +7019,8 @@ Paths are relative to the pack directory, `packs/javascript/`.
7011
7019
  | `upstream/eslint/fixtures/no-unneeded-ternary/038.js` | `tests/lib/rules/no-unneeded-ternary.js` | derived |
7012
7020
  | `upstream/eslint/fixtures/no-unneeded-ternary/039.js` | `tests/lib/rules/no-unneeded-ternary.js` | derived |
7013
7021
  | `upstream/eslint/fixtures/no-unneeded-ternary/040.js` | `tests/lib/rules/no-unneeded-ternary.js` | derived |
7022
+ | `upstream/eslint/fixtures/no-unneeded-ternary/3f6b9d3d2fc1.ts` | `tests/lib/rules/no-unneeded-ternary.js` | derived |
7023
+ | `upstream/eslint/fixtures/no-unneeded-ternary/b4f090f8516b.ts` | `tests/lib/rules/no-unneeded-ternary.js` | derived |
7014
7024
  | `upstream/eslint/fixtures/no-unsafe-finally/001.js` | `tests/lib/rules/no-unsafe-finally.js` | derived |
7015
7025
  | `upstream/eslint/fixtures/no-unsafe-finally/002.js` | `tests/lib/rules/no-unsafe-finally.js` | derived |
7016
7026
  | `upstream/eslint/fixtures/no-unsafe-finally/003.js` | `tests/lib/rules/no-unsafe-finally.js` | derived |
@@ -8107,6 +8117,7 @@ Paths are relative to the pack directory, `packs/javascript/`.
8107
8117
  | `upstream/eslint/fixtures/no-useless-constructor/055.ts` | `tests/lib/rules/no-useless-constructor.js` | derived |
8108
8118
  | `upstream/eslint/fixtures/no-useless-constructor/056.ts` | `tests/lib/rules/no-useless-constructor.js` | derived |
8109
8119
  | `upstream/eslint/fixtures/no-useless-constructor/057.ts` | `tests/lib/rules/no-useless-constructor.js` | derived |
8120
+ | `upstream/eslint/fixtures/no-useless-constructor/4239427f184a.ts` | `tests/lib/rules/no-useless-constructor.js` | derived |
8110
8121
  | `upstream/eslint/fixtures/no-useless-rename/001.js` | `tests/lib/rules/no-useless-rename.js` | derived |
8111
8122
  | `upstream/eslint/fixtures/no-useless-rename/002.js` | `tests/lib/rules/no-useless-rename.js` | derived |
8112
8123
  | `upstream/eslint/fixtures/no-useless-rename/003.js` | `tests/lib/rules/no-useless-rename.js` | derived |
@@ -8335,6 +8346,7 @@ Paths are relative to the pack directory, `packs/javascript/`.
8335
8346
  | `upstream/eslint/fixtures/no-var/073.ts` | `tests/lib/rules/no-var.js` | derived |
8336
8347
  | `upstream/eslint/fixtures/no-var/074.ts` | `tests/lib/rules/no-var.js` | derived |
8337
8348
  | `upstream/eslint/fixtures/no-var/075.ts` | `tests/lib/rules/no-var.js` | derived |
8349
+ | `upstream/eslint/fixtures/no-var/b278601439f1.ts` | `tests/lib/rules/no-var.js` | derived |
8338
8350
  | `upstream/eslint/fixtures/no-void/001.js` | `tests/lib/rules/no-void.js` | derived |
8339
8351
  | `upstream/eslint/fixtures/no-void/002.js` | `tests/lib/rules/no-void.js` | derived |
8340
8352
  | `upstream/eslint/fixtures/no-void/003.js` | `tests/lib/rules/no-void.js` | derived |
@@ -9131,6 +9143,9 @@ Paths are relative to the pack directory, `packs/javascript/`.
9131
9143
  | `upstream/eslint/fixtures/prefer-exponentiation-operator/190.js` | `tests/lib/rules/prefer-exponentiation-operator.js` | derived |
9132
9144
  | `upstream/eslint/fixtures/prefer-exponentiation-operator/191.js` | `tests/lib/rules/prefer-exponentiation-operator.js` | derived |
9133
9145
  | `upstream/eslint/fixtures/prefer-exponentiation-operator/192.js` | `tests/lib/rules/prefer-exponentiation-operator.js` | derived |
9146
+ | `upstream/eslint/fixtures/prefer-exponentiation-operator/09e6366eecac.ts` | `tests/lib/rules/prefer-exponentiation-operator.js` | derived |
9147
+ | `upstream/eslint/fixtures/prefer-exponentiation-operator/608ea709a0a0.ts` | `tests/lib/rules/prefer-exponentiation-operator.js` | derived |
9148
+ | `upstream/eslint/fixtures/prefer-exponentiation-operator/f3ae74ea3df1.ts` | `tests/lib/rules/prefer-exponentiation-operator.js` | derived |
9134
9149
  | `upstream/eslint/fixtures/prefer-numeric-literals/001.js` | `tests/lib/rules/prefer-numeric-literals.js` | derived |
9135
9150
  | `upstream/eslint/fixtures/prefer-numeric-literals/002.js` | `tests/lib/rules/prefer-numeric-literals.js` | derived |
9136
9151
  | `upstream/eslint/fixtures/prefer-numeric-literals/003.js` | `tests/lib/rules/prefer-numeric-literals.js` | derived |
@@ -9436,6 +9451,7 @@ Paths are relative to the pack directory, `packs/javascript/`.
9436
9451
  | `upstream/eslint/fixtures/prefer-template/085.js` | `tests/lib/rules/prefer-template.js` | derived |
9437
9452
  | `upstream/eslint/fixtures/prefer-template/086.js` | `tests/lib/rules/prefer-template.js` | derived |
9438
9453
  | `upstream/eslint/fixtures/prefer-template/087.js` | `tests/lib/rules/prefer-template.js` | derived |
9454
+ | `upstream/eslint/fixtures/prefer-template/d6a8df525147.js` | `tests/lib/rules/prefer-template.js` | derived |
9439
9455
  | `upstream/eslint/fixtures/radix/001.js` | `tests/lib/rules/radix.js` | derived |
9440
9456
  | `upstream/eslint/fixtures/radix/002.js` | `tests/lib/rules/radix.js` | derived |
9441
9457
  | `upstream/eslint/fixtures/radix/003.js` | `tests/lib/rules/radix.js` | derived |
@@ -9553,6 +9569,8 @@ Paths are relative to the pack directory, `packs/javascript/`.
9553
9569
  | `upstream/eslint/fixtures/require-await/037.js` | `tests/lib/rules/require-await.js` | derived |
9554
9570
  | `upstream/eslint/fixtures/require-await/038.js` | `tests/lib/rules/require-await.js` | derived |
9555
9571
  | `upstream/eslint/fixtures/require-await/039.js` | `tests/lib/rules/require-await.js` | derived |
9572
+ | `upstream/eslint/fixtures/require-await/5f9c9ff60882.ts` | `tests/lib/rules/require-await.js` | derived |
9573
+ | `upstream/eslint/fixtures/require-await/d7f53e0b28cf.ts` | `tests/lib/rules/require-await.js` | derived |
9556
9574
  | `upstream/eslint/fixtures/require-yield/001.js` | `tests/lib/rules/require-yield.js` | derived |
9557
9575
  | `upstream/eslint/fixtures/require-yield/002.js` | `tests/lib/rules/require-yield.js` | derived |
9558
9576
  | `upstream/eslint/fixtures/require-yield/003.js` | `tests/lib/rules/require-yield.js` | derived |
@@ -10361,3 +10379,10 @@ Paths are relative to the pack directory, `packs/javascript/`.
10361
10379
  | `upstream/eslint/fixtures/yoda/144.js` | `tests/lib/rules/yoda.js` | derived |
10362
10380
  | `upstream/eslint/fixtures/yoda/145.js` | `tests/lib/rules/yoda.js` | derived |
10363
10381
  | `upstream/eslint/fixtures/yoda/146.js` | `tests/lib/rules/yoda.js` | derived |
10382
+
10383
+ > `recording.json` is a port readiness recording, and no file of this pack, so it is recorded here rather than in the
10384
+ > table above: the tool-pack's `recording.lock` names it and a GitHub release holds the bytes (docs/port-readiness.md).
10385
+ > It carries excerpts of this upstream's tests (`tests/lib/rules/*.js`: the `code` of each RuleTester case),
10386
+ > redistributed under the licence above, together with Rerail's Apache-2.0; the LICENSE beside this file is this
10387
+ > upstream's own, at the pinned commit.
10388
+
@@ -7,8 +7,12 @@ The files listed below contain material copied from eslint-plugin-unicorn and re
7
7
  licence expression, `Apache-2.0 AND MIT`, as `REUSE.toml` annotates them. The recorder `upstream/eslint-plugin-unicorn/generate.mjs` and
8
8
  the `fixtures.expected.json` recording it writes by running the plugin are Rerail's, under the Apache License 2.0 (the pack's `LICENSE`).
9
9
 
10
- Each copied file is the `code` of one of the rule's own `valid` or `invalid` test cases, verbatim, written by the recorder:
11
- cases for another parser or file type are left out, and identical cases are written once.
10
+ Each copied file is the `code` of one of the rule's own `valid` or `invalid` test cases, verbatim, written by the
11
+ recorder: cases for another parser or file type are left out, and identical cases are written once. The port readiness gates'
12
+ recorder (`npm run port-readiness:record`) reuses those files and writes every other case the gates read, the same verbatim
13
+ `code`, as `upstream/eslint-plugin-unicorn/fixtures/<rule>/<sha256 prefix>.<ext>`. Its recording (`recording.json`,
14
+ which `upstream/eslint-plugin-unicorn/recording.lock` names and a GitHub release holds) also holds the `code` of every
15
+ test case of the plugin's rule tests, verbatim, as the words `not-overfit` reads.
12
16
 
13
17
  Paths are relative to the pack directory, `packs/javascript/`.
14
18
 
@@ -113,6 +117,7 @@ Paths are relative to the pack directory, `packs/javascript/`.
113
117
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/097/test/foo/fooBar.testUtils.js` | `test/filename-case.js` | derived |
114
118
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/098/test/foo/.testUtils.js` | `test/filename-case.js` | derived |
115
119
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/099/test/foo/foo_bar.Test.js` | `test/filename-case.js` | derived |
120
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/0bc018802648.js` | `test/filename-case.js` | derived |
116
121
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/100/test/foo/foo_bar.Test_Utils.js` | `test/filename-case.js` | derived |
117
122
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/101/test/foo/.Test_Utils.js` | `test/filename-case.js` | derived |
118
123
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/102/test/foo/foo-bar.Test.js` | `test/filename-case.js` | derived |
@@ -124,6 +129,7 @@ Paths are relative to the pack directory, `packs/javascript/`.
124
129
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/108/src/foo-bar/file.js` | `test/filename-case.js` | derived |
125
130
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/109/src/$userId/page.js` | `test/filename-case.js` | derived |
126
131
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/110/src/FooBar/file.js` | `test/filename-case.js` | derived |
132
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/110d8c7ba808.vue` | `test/filename-case.js` | derived |
127
133
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/111/src/meta/BadName.js` | `test/filename-case.js` | derived |
128
134
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/112/work/Src/fooBar.js` | `test/filename-case.js` | derived |
129
135
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/113/src/foo/foo_bar.js` | `test/filename-case.js` | derived |
@@ -133,6 +139,7 @@ Paths are relative to the pack directory, `packs/javascript/`.
133
139
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/117/src/foo/Article.ts` | `test/filename-case.js` | derived |
134
140
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/118/Test/Foo/fooBar.js` | `test/filename-case.js` | derived |
135
141
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/119/Test/Foo/foo_bar.test.js` | `test/filename-case.js` | derived |
142
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/11d9c8e15dc7.vue` | `test/filename-case.js` | derived |
136
143
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/120/Test/Foo/foo-bar.test-utils.js` | `test/filename-case.js` | derived |
137
144
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/121/Src/Foo/PageFAQ.js` | `test/filename-case.js` | derived |
138
145
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/122/Src/Foo/FAQ-Page.js` | `test/filename-case.js` | derived |
@@ -172,6 +179,29 @@ Paths are relative to the pack directory, `packs/javascript/`.
172
179
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/156/src/foo-js/.spec.js` | `test/filename-case.js` | derived |
173
180
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/157/foo.SPEC.js` | `test/filename-case.js` | derived |
174
181
  | `upstream/eslint-plugin-unicorn/fixtures/filename-case/158/.SPEC.js` | `test/filename-case.js` | derived |
182
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/2d26e87a0a23.js` | `test/filename-case.js` | derived |
183
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/33f30d1bf742.js` | `test/filename-case.js` | derived |
184
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/39b635d302fe.vue` | `test/filename-case.js` | derived |
185
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/3e9dd61f8fa5.vue` | `test/filename-case.js` | derived |
186
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/437dfa0cae52.js` | `test/filename-case.js` | derived |
187
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/450fdf6100cf.js` | `test/filename-case.js` | derived |
188
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/4ebfa70f8a0b.vue` | `test/filename-case.js` | derived |
189
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/53fba3fcf7dd.vue` | `test/filename-case.js` | derived |
190
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/602748334ecf.vue` | `test/filename-case.js` | derived |
191
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/603fe13a0b05` | `test/filename-case.js` | derived |
192
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/60588a1a1ca8.mjs` | `test/filename-case.js` | derived |
193
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/72c9766d8470.js` | `test/filename-case.js` | derived |
194
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/8bb73935d039.js` | `test/filename-case.js` | derived |
195
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/8c46ea638bb7.tsx` | `test/filename-case.js` | derived |
196
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/8e49ed877feb.vue` | `test/filename-case.js` | derived |
197
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/97a4a593102b` | `test/filename-case.js` | derived |
198
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/a7e0a6633b8a.js` | `test/filename-case.js` | derived |
199
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/b261ff7fac00.js` | `test/filename-case.js` | derived |
200
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/b66dfd152690.js` | `test/filename-case.js` | derived |
201
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/b69aa47eecea.vue` | `test/filename-case.js` | derived |
202
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/bb9f2aa9a984.js` | `test/filename-case.js` | derived |
203
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/bf6345e9bb57.js` | `test/filename-case.js` | derived |
204
+ | `upstream/eslint-plugin-unicorn/fixtures/filename-case/c125bff6c234.js` | `test/filename-case.js` | derived |
175
205
  | `upstream/eslint-plugin-unicorn/fixtures/no-null/001.js` | `test/no-null.js` | derived |
176
206
  | `upstream/eslint-plugin-unicorn/fixtures/no-null/002.js` | `test/no-null.js` | derived |
177
207
  | `upstream/eslint-plugin-unicorn/fixtures/no-null/003.js` | `test/no-null.js` | derived |
@@ -295,3 +325,10 @@ Paths are relative to the pack directory, `packs/javascript/`.
295
325
  | `upstream/eslint-plugin-unicorn/fixtures/prefer-node-protocol/063.ts` | `test/prefer-node-protocol.js` | derived |
296
326
  | `upstream/eslint-plugin-unicorn/fixtures/prefer-node-protocol/064.ts` | `test/prefer-node-protocol.js` | derived |
297
327
  | `upstream/eslint-plugin-unicorn/fixtures/prefer-node-protocol/065.ts` | `test/prefer-node-protocol.js` | derived |
328
+
329
+ > `recording.json` is a port readiness recording, and no file of this pack, so it is recorded here rather than in the
330
+ > table above: the tool-pack's `recording.lock` names it and a GitHub release holds the bytes (docs/port-readiness.md).
331
+ > It carries excerpts of this upstream's tests (`test/*.js`: the `code` of each RuleTester case), redistributed under
332
+ > the licence above, together with Rerail's Apache-2.0; the LICENSE beside this file is this upstream's own, at the
333
+ > pinned commit.
334
+
package/pack.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "format": "rerail.rule-pack/v1",
3
3
  "id": "javascript",
4
- "name": "JavaScript",
4
+ "name": "JavaScript and TypeScript (ESLint core)",
5
5
  "category": "language",
6
- "covers": "65 ESLint core rules ported to Rerail, 22 of them on and 43 off until turned on, each scored against ESLint's own recorded findings on its test cases.",
7
- "reason": "matches JavaScript",
6
+ "covers": "71 ESLint core rules ported to Rerail, 24 of them on and 47 off until turned on, each scored against ESLint's own recorded findings on its test cases.",
7
+ "reason": "matches JavaScript or TypeScript source",
8
8
  "match": {
9
9
  "any": [
10
10
  {
@@ -76,6 +76,13 @@
76
76
  "group": "ESLint",
77
77
  "on": false
78
78
  },
79
+ {
80
+ "id": "eslint-curly",
81
+ "document": "rules/eslint-curly.json",
82
+ "title": "ESLint curly: Enforce consistent brace style for all control statements",
83
+ "group": "ESLint",
84
+ "on": false
85
+ },
79
86
  {
80
87
  "id": "eslint-default-case",
81
88
  "document": "rules/eslint-default-case.json",
@@ -234,6 +241,13 @@
234
241
  "group": "ESLint",
235
242
  "on": false
236
243
  },
244
+ {
245
+ "id": "eslint-no-labels",
246
+ "document": "rules/eslint-no-labels.json",
247
+ "title": "ESLint no-labels: Disallow labeled statements",
248
+ "group": "ESLint",
249
+ "on": false
250
+ },
237
251
  {
238
252
  "id": "eslint-no-loss-of-precision",
239
253
  "document": "rules/eslint-no-loss-of-precision.json",
@@ -281,6 +295,13 @@
281
295
  "title": "ESLint no-nonoctal-decimal-escape: Disallow \\8 and \\9 escape sequences in string literals",
282
296
  "group": "ESLint"
283
297
  },
298
+ {
299
+ "id": "eslint-no-object-constructor",
300
+ "document": "rules/eslint-no-object-constructor.json",
301
+ "title": "ESLint no-object-constructor: Disallow calls to the Object constructor without an argument",
302
+ "group": "ESLint",
303
+ "on": false
304
+ },
284
305
  {
285
306
  "id": "eslint-no-octal",
286
307
  "document": "rules/eslint-no-octal.json",
@@ -335,6 +356,13 @@
335
356
  "group": "ESLint",
336
357
  "on": false
337
358
  },
359
+ {
360
+ "id": "eslint-no-sequences",
361
+ "document": "rules/eslint-no-sequences.json",
362
+ "title": "ESLint no-sequences: Disallow comma operators",
363
+ "group": "ESLint",
364
+ "on": false
365
+ },
338
366
  {
339
367
  "id": "eslint-no-setter-return",
340
368
  "document": "rules/eslint-no-setter-return.json",
@@ -380,6 +408,18 @@
380
408
  "title": "ESLint no-unsafe-negation: Disallow negating the left operand of relational operators",
381
409
  "group": "ESLint"
382
410
  },
411
+ {
412
+ "id": "eslint-no-unused-labels",
413
+ "document": "rules/eslint-no-unused-labels.json",
414
+ "title": "ESLint no-unused-labels: Disallow unused labels",
415
+ "group": "ESLint"
416
+ },
417
+ {
418
+ "id": "eslint-no-unused-private-class-members",
419
+ "document": "rules/eslint-no-unused-private-class-members.json",
420
+ "title": "ESLint no-unused-private-class-members: Disallow unused private class members",
421
+ "group": "ESLint"
422
+ },
383
423
  {
384
424
  "id": "eslint-no-useless-call",
385
425
  "document": "rules/eslint-no-useless-call.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neralabs/rerail-pack-javascript",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Rerail rule pack: ESLint core rules ported to Rerail code rules.",
5
5
  "license": "Apache-2.0 AND MIT",
6
6
  "repository": {
@@ -0,0 +1 @@
1
+ {"format":"rerail.policy/v1","id":"eslint-curly","revision":2,"mode":"steer","description":"Port of ESLint's `curly` rule (default options: all). Every if/else/loop body must be a block; fixes by wrapping the body. 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},"option2":{"type":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"before-else":{"any":[{"precedes":{"kind":"else_clause"}},{"inside":{"any":[{"kind":"for_statement"},{"kind":"for_in_statement"},{"kind":"while_statement"},{"kind":"labeled_statement"},{"kind":"with_statement"}],"stopBy":"neighbor","matches":"before-else"}},{"inside":{"kind":"else_clause","stopBy":"neighbor","inside":{"kind":"if_statement","stopBy":"neighbor","matches":"before-else"}}}]},"braces-necessary":{"all":[{"matches":"one-statement-block"},{"any":[{"has":{"stopBy":"neighbor","any":[{"any":[{"kind":"lexical_declaration"},{"kind":"function_declaration"},{"kind":"generator_function_declaration"},{"kind":"class_declaration"}]},{"matches":"using-declaration"}]}},{"all":[{"has":{"stopBy":"neighbor","matches":"unsafe-if"}},{"matches":"before-else"}]}]}]},"chain-requires-block":{"kind":"if_statement","any":[{"has":{"stopBy":"neighbor","all":[{"matches":"if-body"},{"matches":"requires-block"}]}},{"has":{"stopBy":"neighbor","kind":"else_clause","has":{"stopBy":"neighbor","any":[{"all":[{"matches":"else-body"},{"matches":"requires-block"}]},{"matches":"chain-requires-block"}]}}}]},"chain-top-requires-block":{"kind":"if_statement","any":[{"all":[{"not":{"matches":"r15"}},{"matches":"chain-requires-block"}]},{"inside":{"stopBy":"neighbor","matches":"r10"}}]},"collapsed":{"any":[{"kind":"empty_statement"},{"all":[{"layout":{"before":{"to":"token","breaks":{"eq":0}}}},{"matches":"one-liner"}]}]},"do-body":{"all":[{"inside":{"kind":"do_statement","stopBy":"neighbor"}},{"follows":{"stopBy":{"not":{"kind":"comment"}},"all":[{"not":{"kind":"comment"}},{"regex":"^do$"}]}}]},"else-body":{"all":[{"not":{"kind":"comment"}},{"matches":"r15"},{"follows":{"stopBy":{"not":{"kind":"comment"}},"all":[{"not":{"kind":"comment"}},{"regex":"^else$"}]}},{"not":{"kind":"if_statement"}}]},"for-body":{"all":[{"inside":{"kind":"for_statement","stopBy":"neighbor"}},{"matches":"r7"}]},"for-in-body":{"all":[{"inside":{"kind":"for_in_statement","stopBy":"neighbor","has":{"regex":"^in$"}}},{"matches":"r7"}]},"for-of-body":{"all":[{"inside":{"kind":"for_in_statement","stopBy":"neighbor","has":{"regex":"^of$"}}},{"matches":"r7"}]},"hazard-next":{"any":[{"precedes":{"stopBy":{"not":{"kind":"comment"}},"all":[{"not":{"kind":"comment"}},{"regex":"^[(\\[/`+\\-]"}]}},{"not":{"matches":"r8"},"inside":{"stopBy":"neighbor","matches":"hazard-next"}}]},"if-body":{"all":[{"inside":{"kind":"if_statement","stopBy":"neighbor"}},{"matches":"r9"}]},"in-chain-requiring-block":{"inside":{"stopBy":"neighbor","any":[{"matches":"r12"},{"matches":"r10"}]}},"one-liner":{"any":[{"layout":{"span":{"eq":0}}},{"all":[{"has":{"regex":"^;$","not":{"matches":"r8"}}},{"not":{"has":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^;$"}},{"layout":{"span":{"min":1}}}]}}},{"not":{"has":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^;$"}},{"follows":{"stopBy":"end","not":{"kind":"comment"}}},{"matches":"r13"}]}}}]}]},"one-statement-block":{"kind":"statement_block","has":{"stopBy":"neighbor","matches":"statement"},"not":{"has":{"stopBy":"neighbor","all":[{"matches":"statement"},{"precedes":{"stopBy":"end","matches":"statement"}}]}}},"requires-block":{"all":[{"kind":"statement_block"},{"any":[{"not":{"matches":"one-statement-block"}},{"matches":"braces-necessary"}]}]},"statement":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^[{}]$"}}]},"unsafe-if":{"any":[{"kind":"if_statement","not":{"has":{"kind":"else_clause"}}},{"kind":"if_statement","has":{"kind":"else_clause","has":{"matches":"unsafe-if"}}},{"any":[{"kind":"for_statement"},{"kind":"for_in_statement"},{"kind":"while_statement"},{"kind":"labeled_statement"},{"kind":"with_statement"}],"has":{"matches":"unsafe-if"}}]},"using-declaration":{"kind":"expression_statement","has":{"stopBy":"neighbor","any":[{"matches":"r11"},{"kind":"await_expression","has":{"stopBy":"neighbor","matches":"r11"}}]}},"while-body":{"all":[{"inside":{"kind":"while_statement","stopBy":"neighbor"}},{"matches":"r9"}]},"r1":{"all":[{"matches":"one-statement-block"},{"any":[{"has":{"kind":"comment","precedes":{"matches":"statement","stopBy":"end"},"stopBy":"neighbor"}},{"has":{"all":[{"matches":"statement"},{"not":{"matches":"one-liner"}}],"stopBy":"neighbor"}}]}]},"r2":{"any":[{"regex":"(?s);(?:\\s|//[^\\n]*\\n|/\\*.*?\\*/)*\\}$"},{"all":[{"not":{"matches":"r8"}},{"not":{"inside":{"stopBy":"end","matches":"r8"}}}]},{"all":[{"pattern":"$UBQ"},{"has":{"all":[{"not":{"inside":{"any":[{"kind":"function_expression"},{"kind":"arrow_function"},{"kind":"generator_function"},{"kind":"method_definition"}],"stopBy":"neighbor"}}},{"not":{"inside":{"not":{"pattern":"$UBQ"},"precedes":{"stopBy":"end","matches":"r14"},"stopBy":{"pattern":"$UBQ"}}}}],"kind":"statement_block","not":{"precedes":{"stopBy":"end","matches":"r14"}},"stopBy":"end"}}]},{"all":[{"has":{"any":[{"matches":"r13"},{"layout":{"after":{"breaks":{"min":1},"to":"token"}}}],"regex":"^\\}$"}},{"not":{"has":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^\\}$"}},{"not":{"precedes":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^\\}$"}}],"stopBy":"end"}}},{"regex":"(?:\\+\\+|--)$"}]}}},{"not":{"matches":"hazard-next"}}]}]},"r3":{"all":[{"not":{"kind":"statement_block"}},{"not":{"kind":"empty_statement"}},{"not":{"matches":"one-liner"}}]},"r4":{"all":[{"not":{"kind":"statement_block"}},{"not":{"matches":"collapsed"}}]},"r5":{"any":[{"matches":"requires-block"},{"matches":"r3"},{"matches":"r1"}]},"r6":{"any":[{"all":[{"matches":"r2"},{"pattern":"$UBF"}]},{"pattern":"$UBN"}]},"r7":{"follows":{"all":[{"not":{"kind":"comment"}},{"regex":"^\\)$"}],"stopBy":{"not":{"kind":"comment"}}}},"r8":{"precedes":{"not":{"kind":"comment"},"stopBy":"end"}},"r9":{"follows":{"all":[{"not":{"kind":"comment"}},{"kind":"parenthesized_expression"}],"stopBy":{"not":{"kind":"comment"}}}},"r10":{"inside":{"stopBy":"neighbor","matches":"r12"},"kind":"else_clause"},"r11":{"has":{"regex":"^using$","stopBy":"neighbor"},"kind":"assignment_expression"},"r12":{"kind":"if_statement","matches":"chain-top-requires-block"},"r13":{"layout":{"before":{"breaks":{"min":1},"to":"token"}}},"r14":{"not":{"any":[{"kind":"comment"},{"regex":"^\\}$"}]}},"r15":{"inside":{"kind":"else_clause","stopBy":"neighbor"}}}}},{"id":"if-missing","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"if-body"},{"not":{"kind":"comment"}},{"not":{"kind":"statement_block"}},{"$option":"option","cases":{"multi":[{"$option":"option","cases":{"multi":{"$option":"option2","cases":{"consistent":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}},"default":{"matches":"requires-block"}}},"default":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}}],"multi-line":[{"$option":"option","cases":{"multi":{"$option":"option2","cases":{"consistent":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}},"default":{"matches":"requires-block"}}},"default":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}}],"multi-or-nest":[{"$option":"option","cases":{"multi":{"$option":"option2","cases":{"consistent":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}},"default":{"matches":"requires-block"}}},"default":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}}]},"default":[],"spread":true},{"pattern":"$BODY"}]}}},"violation":{"anchor":"witness.span","code":"curly","message":"Expected { after 'if' condition.","fix":"{$BODY}","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"if-unexpected","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"if-body"},{"matches":"one-statement-block"},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"not":{"$option":"option","cases":{"multi-or-nest":{"matches":"r5"}},"default":{"matches":"requires-block"}}}]},"default":[]}},"default":[{"not":{"$option":"option","cases":{"multi-or-nest":{"matches":"r5"}},"default":{"matches":"requires-block"}}}],"spread":true},{"$option":"option2","cases":{"consistent":[{"not":{"matches":"in-chain-requiring-block"}}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"not":{"matches":"r5"}}]}},"default":[],"spread":true},{"matches":"r6"}]},"transform":{"IN":{"replace":{"source":"$UBF","replace":"(?s)^\\{(.*)\\}$","by":"${1}"}},"ORIG":{"replace":{"source":"$UBN","replace":"(?s)^(.*)$","by":"${1}"}}},"when":{"option":{"option":{"in":["multi","multi-or-nest"]}}}}},"violation":{"anchor":"witness.span","code":"curly","message":"Unnecessary { after 'if' condition.","fix":"$IN$ORIG","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"else-missing","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"else-body"},{"not":{"kind":"comment"}},{"not":{"kind":"statement_block"}},{"$option":"option","cases":{"multi":[{"$option":"option","cases":{"multi":{"$option":"option2","cases":{"consistent":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}},"default":{"matches":"requires-block"}}},"default":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}}],"multi-line":[{"$option":"option","cases":{"multi":{"$option":"option2","cases":{"consistent":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}},"default":{"matches":"requires-block"}}},"default":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}}],"multi-or-nest":[{"$option":"option","cases":{"multi":{"$option":"option2","cases":{"consistent":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}},"default":{"matches":"requires-block"}}},"default":{"any":[{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":{"matches":"r5"}},"default":{"matches":"requires-block"}}},"default":{"matches":"requires-block"}},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}]},"default":[]}},"default":[{"$option":"option2","cases":{"consistent":{"matches":"in-chain-requiring-block"}},"default":{"matches":"r4"}}],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r3"}]}},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"matches":"r1"}]}},"default":[],"spread":true}]}}]},"default":[],"spread":true},{"pattern":"$BODY"}]}}},"violation":{"anchor":"witness.span","code":"curly","message":"Expected { after 'else'.","fix":"{$BODY}","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"else-unexpected","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"else-body"},{"matches":"one-statement-block"},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[{"not":{"$option":"option","cases":{"multi-or-nest":{"matches":"r5"}},"default":{"matches":"requires-block"}}}]},"default":[]}},"default":[{"not":{"$option":"option","cases":{"multi-or-nest":{"matches":"r5"}},"default":{"matches":"requires-block"}}}],"spread":true},{"$option":"option2","cases":{"consistent":[{"not":{"matches":"in-chain-requiring-block"}}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-or-nest":{"$option":"option2","cases":{"consistent":[]},"default":[{"not":{"matches":"r5"}}]}},"default":[],"spread":true},{"matches":"r6"}]},"transform":{"IN":{"replace":{"source":"$UBF","replace":"(?s)^\\{(.*)\\}$","by":"${1}"}},"ORIG":{"replace":{"source":"$UBN","replace":"(?s)^(.*)$","by":"${1}"}}},"when":{"option":{"option":{"in":["multi","multi-or-nest"]}}}}},"violation":{"anchor":"witness.span","code":"curly","message":"Unnecessary { after 'else'.","fix":"$IN$ORIG","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"while-missing","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"while-body"},{"not":{"kind":"comment"}},{"not":{"kind":"statement_block"}},{"$option":"option","cases":{"multi":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-line":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-or-nest":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}]},"default":[],"spread":true},{"pattern":"$BODY"}]}}},"violation":{"anchor":"witness.span","code":"curly","message":"Expected { after 'while' condition.","fix":"{$BODY}","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"while-unexpected","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"while-body"},{"matches":"one-statement-block"},{"not":{"$option":"option","cases":{"multi-or-nest":{"matches":"r5"}},"default":{"matches":"requires-block"}}},{"matches":"r6"}]},"transform":{"IN":{"replace":{"source":"$UBF","replace":"(?s)^\\{(.*)\\}$","by":"${1}"}},"ORIG":{"replace":{"source":"$UBN","replace":"(?s)^(.*)$","by":"${1}"}}},"when":{"option":{"option":{"in":["multi","multi-or-nest"]}}}}},"violation":{"anchor":"witness.span","code":"curly","message":"Unnecessary { after 'while' condition.","fix":"$IN$ORIG","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"do-missing","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"do-body"},{"not":{"kind":"comment"}},{"not":{"kind":"statement_block"}},{"$option":"option","cases":{"multi":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-line":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-or-nest":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}]},"default":[],"spread":true},{"pattern":"$BODY"}]}}},"violation":{"anchor":"witness.span","code":"curly","message":"Expected { after 'do'.","fix":"{$BODY}","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"do-unexpected","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"do-body"},{"matches":"one-statement-block"},{"not":{"$option":"option","cases":{"multi-or-nest":{"matches":"r5"}},"default":{"matches":"requires-block"}}},{"any":[{"all":[{"matches":"r2"},{"pattern":"$UBF"},{"any":[{"inside":{"stopBy":"neighbor","kind":"do_statement","regex":"^do\\{\\s*[\\w$\\\\]","pattern":"$DOADJ"}},{"kind":"statement_block"}]}]},{"pattern":"$UBN"}]}]},"transform":{"IN":{"replace":{"source":"$UBF","replace":"(?s)^\\{(.*)\\}$","by":"${1}"}},"ORIG":{"replace":{"source":"$UBN","replace":"(?s)^(.*)$","by":"${1}"}},"SP":{"replace":{"source":"$DOADJ","replace":"(?s)^.*$","by":" "}}},"when":{"option":{"option":{"in":["multi","multi-or-nest"]}}}}},"violation":{"anchor":"witness.span","code":"curly","message":"Unnecessary { after 'do'.","fix":"$SP$IN$ORIG","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"for-missing","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"for-body"},{"not":{"kind":"comment"}},{"not":{"kind":"statement_block"}},{"$option":"option","cases":{"multi":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-line":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-or-nest":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}]},"default":[],"spread":true},{"pattern":"$BODY"}]}}},"violation":{"anchor":"witness.span","code":"curly","message":"Expected { after 'for' condition.","fix":"{$BODY}","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"for-unexpected","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"for-body"},{"matches":"one-statement-block"},{"not":{"$option":"option","cases":{"multi-or-nest":{"matches":"r5"}},"default":{"matches":"requires-block"}}},{"matches":"r6"}]},"transform":{"IN":{"replace":{"source":"$UBF","replace":"(?s)^\\{(.*)\\}$","by":"${1}"}},"ORIG":{"replace":{"source":"$UBN","replace":"(?s)^(.*)$","by":"${1}"}}},"when":{"option":{"option":{"in":["multi","multi-or-nest"]}}}}},"violation":{"anchor":"witness.span","code":"curly","message":"Unnecessary { after 'for' condition.","fix":"$IN$ORIG","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"for-in-missing","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"for-in-body"},{"not":{"kind":"comment"}},{"not":{"kind":"statement_block"}},{"$option":"option","cases":{"multi":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-line":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-or-nest":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}]},"default":[],"spread":true},{"pattern":"$BODY"}]}}},"violation":{"anchor":"witness.span","code":"curly","message":"Expected { after 'for-in'.","fix":"{$BODY}","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"for-in-unexpected","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"for-in-body"},{"matches":"one-statement-block"},{"not":{"$option":"option","cases":{"multi-or-nest":{"matches":"r5"}},"default":{"matches":"requires-block"}}},{"matches":"r6"}]},"transform":{"IN":{"replace":{"source":"$UBF","replace":"(?s)^\\{(.*)\\}$","by":"${1}"}},"ORIG":{"replace":{"source":"$UBN","replace":"(?s)^(.*)$","by":"${1}"}}},"when":{"option":{"option":{"in":["multi","multi-or-nest"]}}}}},"violation":{"anchor":"witness.span","code":"curly","message":"Unnecessary { after 'for-in'.","fix":"$IN$ORIG","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"for-of-missing","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"for-of-body"},{"not":{"kind":"comment"}},{"not":{"kind":"statement_block"}},{"$option":"option","cases":{"multi":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-line":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}],"multi-or-nest":[{"$option":"option","cases":{"multi":{"matches":"requires-block"}},"default":{"any":[{"matches":"requires-block"},{"$option":"option","cases":{"multi-line":[{"matches":"r4"}]},"default":[],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r3"}],"spread":true},{"$option":"option","cases":{"multi-line":[]},"default":[{"matches":"r1"}],"spread":true}]}}]},"default":[],"spread":true},{"pattern":"$BODY"}]}}},"violation":{"anchor":"witness.span","code":"curly","message":"Expected { after 'for-of'.","fix":"{$BODY}","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}},{"id":"for-of-unexpected","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"for-of-body"},{"matches":"one-statement-block"},{"not":{"$option":"option","cases":{"multi-or-nest":{"matches":"r5"}},"default":{"matches":"requires-block"}}},{"matches":"r6"}]},"transform":{"IN":{"replace":{"source":"$UBF","replace":"(?s)^\\{(.*)\\}$","by":"${1}"}},"ORIG":{"replace":{"source":"$UBN","replace":"(?s)^(.*)$","by":"${1}"}}},"when":{"option":{"option":{"in":["multi","multi-or-nest"]}}}}},"violation":{"anchor":"witness.span","code":"curly","message":"Unnecessary { after 'for-of'.","fix":"$IN$ORIG","suppress":{"eslint":{"rules":["curly"]},"oxlint":{"rules":["curly"]},"biome":{"rules":["lint/style/useBlockStatements"]}}}}]}
@@ -1,15 +1,11 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "eslint-no-dupe-keys",
4
- "revision": 6,
4
+ "revision": 7,
5
5
  "mode": "steer",
6
6
  "description": "ESLint 10.11.0 no-dupe-keys, default options. Port of ESLint's `no-dupe-keys` rule (https://eslint.org/docs/latest/rules/no-dupe-keys). Flags an object-literal property whose static key (ESLint's getStaticPropertyName, via `compare` text `key`) repeats an earlier property of the same object; a getter may pair with a setter, and a non-computed `__proto__: value` is not a key.",
7
7
  "scope": {
8
8
  "include": [
9
- "**/*.ts",
10
- "**/*.tsx",
11
- "**/*.mts",
12
- "**/*.cts",
13
9
  "**/*.js",
14
10
  "**/*.jsx",
15
11
  "**/*.mjs",
@@ -0,0 +1 @@
1
+ {"format":"rerail.policy/v1","id":"eslint-no-labels","revision":3,"mode":"steer","description":"Port of ESLint's `no-labels` rule (https://eslint.org/docs/latest/rules/no-labels). Flags every labeled statement and every labeled break/continue. 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":{"allowLoop":{"type":"boolean","nullable":true,"default":null},"allowSwitch":{"type":"boolean","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"any":[{"kind":"function_declaration"},{"kind":"function_expression"},{"kind":"arrow_function"},{"kind":"generator_function_declaration"},{"kind":"generator_function"},{"kind":"method_definition"},{"kind":"class_static_block"}]},"r2":{"has":{"kind":"statement_identifier","pattern":"$L","stopBy":"neighbor"}}}}},{"id":"labeled-statement","forbid":{"ast":{"language":"typescript","rule":{"$option":"allowLoop","cases":{"true":{"all":[{"kind":"labeled_statement"},{"not":{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}}]}},"default":{"$option":"allowSwitch","cases":{"true":{"all":[{"kind":"labeled_statement"},{"not":{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}}]}},"default":{"kind":"labeled_statement"}}}}},"violation":{"anchor":"witness.span","code":"no-labels","message":"Unexpected labeled statement.","suppress":{"eslint":{"rules":["no-labels"]},"oxlint":{"rules":["no-labels"]}}}},{"id":"label-in-break","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"break_statement"},{"matches":"r2"},{"$option":"allowLoop","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":{"$option":"allowSwitch","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":[]},"spread":true}]}}},"violation":{"anchor":"witness.span","code":"no-labels","message":"Unexpected label in break statement.","suppress":{"eslint":{"rules":["no-labels"]},"oxlint":{"rules":["no-labels"]}}}},{"id":"label-in-continue","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"continue_statement"},{"matches":"r2"},{"$option":"allowLoop","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":{"$option":"allowSwitch","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":[]},"spread":true}]}}},"violation":{"anchor":"witness.span","code":"no-labels","message":"Unexpected label in continue statement.","suppress":{"eslint":{"rules":["no-labels"]},"oxlint":{"rules":["no-labels"]}}}}]}
@@ -0,0 +1 @@
1
+ {"format":"rerail.policy/v1","id":"eslint-no-object-constructor","revision":1,"mode":"steer","description":"Port of ESLint's `no-object-constructor` rule (https://eslint.org/docs/latest/rules/no-object-constructor). Flags `Object()` / `new Object` without arguments when `Object` is the global (resolved with `resolves`). ESLint offers only a suggestion, so no fix is declared.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"object-constructor","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"all":[{"any":[{"kind":"call_expression"},{"kind":"new_expression"}]},{"has":{"matches":"object-callee"}},{"not":{"has":{"kind":"template_string"}}},{"not":{"has":{"kind":"arguments","has":{"matches":"arg"}}}}]},"utils":{"object-callee":{"any":[{"kind":"identifier","resolves":{"global":["Object"],"directives":"eslint"}},{"kind":"parenthesized_expression","has":{"matches":"object-callee"}}]},"arg":{"not":{"any":[{"regex":"^[(),]$"},{"kind":"comment"}]}}}}},"violation":{"anchor":"witness.span","code":"no-object-constructor","message":"The object literal notation {} is preferable.","suppress":{"eslint":{"rules":["no-object-constructor"]},"oxlint":{"rules":["no-object-constructor"]}}}}]}
@@ -0,0 +1 @@
1
+ {"format":"rerail.policy/v1","id":"eslint-no-sequences","revision":2,"mode":"steer","description":"Port of ESLint's `no-sequences` rule (https://eslint.org/docs/latest/rules/no-sequences). Default options (allowInParentheses: true): flags the comma operator except in for-loop init/update and when the sequence is wrapped in parentheses (doubled where the grammar already requires them). 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":{"allowInParentheses":{"type":"boolean","nullable":true,"default":null}}}},{"id":"comma-operator","forbid":{"ast":{"language":"typescript","rule":{"regex":"^,$","not":{"follows":{"regex":"^,$","stopBy":"end"}},"inside":{"kind":"sequence_expression","stopBy":"neighbor","not":{"any":[{"matches":"for-init-or-update"},{"$option":"allowInParentheses","cases":{"false":[]},"default":[{"matches":"intent-parens"}],"spread":true}]}}},"utils":{"for-init-or-update":{"any":[{"inside":{"kind":"for_statement","stopBy":"neighbor"},"any":[{"follows":{"regex":"^\\($","stopBy":"neighbor"}},{"precedes":{"regex":"^\\)$","stopBy":"neighbor"}}]},{"inside":{"kind":"parenthesized_expression","stopBy":"neighbor","matches":"for-init-or-update"}}]},"intent-parens":{"inside":{"kind":"parenthesized_expression","stopBy":"neighbor","any":[{"not":{"inside":{"stopBy":"neighbor","any":[{"kind":"if_statement"},{"kind":"while_statement"},{"kind":"do_statement"},{"kind":"switch_statement"},{"kind":"with_statement"},{"kind":"arrow_function"}]}}},{"inside":{"kind":"parenthesized_expression","stopBy":"neighbor"}}]}}}}},"violation":{"anchor":"witness.span","code":"no-sequences","message":"Unexpected use of comma operator.","suppress":{"eslint":{"rules":["no-sequences"]},"oxlint":{"rules":["no-sequences"]},"biome":{"rules":["lint/complexity/noCommaOperator"]}}}}]}
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-setter-return","revision":3,"mode":"steer","description":"Port of ESLint's `no-setter-return` rule (https://eslint.org/docs/latest/rules/no-setter-return). Flags `return <value>` in a setter (class or object `set` accessor, or the `set` function of a property descriptor passed to Object.defineProperty, Reflect.defineProperty, Object.defineProperties or Object.create), and an arrow descriptor setter's expression body. `Object` and `Reflect` must resolve to declared globals (`resolves` under `ast.languageOptions`).","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"return-value","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"kind":"return_statement","has":{"stopBy":"neighbor","not":{"regex":"^(return|;)$"}},"inside":{"stopBy":{"any":[{"kind":"function_declaration"},{"kind":"generator_function_declaration"},{"kind":"function_expression"},{"kind":"generator_function"},{"kind":"arrow_function"},{"kind":"method_definition"}]},"matches":"setter"}},"utils":{"callee-Object-defineProperty":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(defineProperty)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](defineProperty)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Object-defineProperty"}}]},"callee-Reflect-defineProperty":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Reflect"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(defineProperty)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Reflect"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](defineProperty)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Reflect-defineProperty"}}]},"callee-Object-create-defineProperties":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(create|defineProperties)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](create|defineProperties)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Object-create-defineProperties"}}]},"descriptor":{"kind":"object","any":[{"inside":{"kind":"arguments","stopBy":"neighbor","inside":{"kind":"call_expression","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"matches":"callee-Object-defineProperty"},{"matches":"callee-Reflect-defineProperty"}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}},"count":{"follows":{"regex":"^,$","stopBy":"end"},"min":2,"max":2}},{"inside":{"kind":"pair","stopBy":"neighbor","inside":{"kind":"object","stopBy":"neighbor","inside":{"kind":"arguments","stopBy":"neighbor","inside":{"kind":"call_expression","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"matches":"callee-Object-create-defineProperties"}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}},"count":{"follows":{"regex":"^,$","stopBy":"end"},"min":1,"max":1}}}}]},"setter":{"any":[{"kind":"method_definition","has":{"regex":"^set$","not":{"kind":"property_identifier"},"stopBy":"neighbor"}},{"kind":"method_definition","all":[{"not":{"has":{"regex":"^get$","not":{"kind":"property_identifier"},"stopBy":"neighbor"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"property_identifier","regex":"^set$"},{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"computed_property_name","has":{"stopBy":"neighbor","any":[{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"template_string","regex":"^`set`$"}]}}]}}],"inside":{"stopBy":"neighbor","matches":"descriptor"}},{"any":[{"kind":"function_expression"},{"kind":"generator_function"},{"kind":"arrow_function"}],"inside":{"kind":"pair","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"kind":"property_identifier","regex":"^set$"},{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"computed_property_name","has":{"stopBy":"neighbor","any":[{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"template_string","regex":"^`set`$"}]}}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}},"inside":{"stopBy":"neighbor","matches":"descriptor"}}}]}}}},"violation":{"anchor":"witness.span","code":"no-setter-return","message":"Setter cannot return a value.","suppress":{"eslint":{"rules":["no-setter-return"]},"oxlint":{"rules":["no-setter-return"]},"biome":{"rules":["lint/correctness/noSetterReturn"]}}}},{"id":"arrow-expression-body","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"not":{"any":[{"kind":"statement_block"},{"regex":"^=>$"}]},"follows":{"regex":"^=>$","stopBy":"neighbor"},"inside":{"stopBy":"neighbor","kind":"arrow_function","matches":"setter"}},"utils":{"callee-Object-defineProperty":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(defineProperty)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](defineProperty)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Object-defineProperty"}}]},"callee-Reflect-defineProperty":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Reflect"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(defineProperty)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Reflect"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](defineProperty)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Reflect-defineProperty"}}]},"callee-Object-create-defineProperties":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(create|defineProperties)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](create|defineProperties)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Object-create-defineProperties"}}]},"descriptor":{"kind":"object","any":[{"inside":{"kind":"arguments","stopBy":"neighbor","inside":{"kind":"call_expression","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"matches":"callee-Object-defineProperty"},{"matches":"callee-Reflect-defineProperty"}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}},"count":{"follows":{"regex":"^,$","stopBy":"end"},"min":2,"max":2}},{"inside":{"kind":"pair","stopBy":"neighbor","inside":{"kind":"object","stopBy":"neighbor","inside":{"kind":"arguments","stopBy":"neighbor","inside":{"kind":"call_expression","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"matches":"callee-Object-create-defineProperties"}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}},"count":{"follows":{"regex":"^,$","stopBy":"end"},"min":1,"max":1}}}}]},"setter":{"any":[{"kind":"method_definition","has":{"regex":"^set$","not":{"kind":"property_identifier"},"stopBy":"neighbor"}},{"kind":"method_definition","all":[{"not":{"has":{"regex":"^get$","not":{"kind":"property_identifier"},"stopBy":"neighbor"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"property_identifier","regex":"^set$"},{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"computed_property_name","has":{"stopBy":"neighbor","any":[{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"template_string","regex":"^`set`$"}]}}]}}],"inside":{"stopBy":"neighbor","matches":"descriptor"}},{"any":[{"kind":"function_expression"},{"kind":"generator_function"},{"kind":"arrow_function"}],"inside":{"kind":"pair","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"kind":"property_identifier","regex":"^set$"},{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"computed_property_name","has":{"stopBy":"neighbor","any":[{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"template_string","regex":"^`set`$"}]}}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}},"inside":{"stopBy":"neighbor","matches":"descriptor"}}}]}}}},"violation":{"anchor":"witness.span","code":"no-setter-return","message":"Setter cannot return a value.","suppress":{"eslint":{"rules":["no-setter-return"]},"oxlint":{"rules":["no-setter-return"]},"biome":{"rules":["lint/correctness/noSetterReturn"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-setter-return","revision":4,"mode":"steer","description":"Port of ESLint's `no-setter-return` rule (https://eslint.org/docs/latest/rules/no-setter-return). Flags `return <value>` in a setter (class or object `set` accessor, or the `set` function of a property descriptor passed to Object.defineProperty, Reflect.defineProperty, Object.defineProperties or Object.create), and an arrow descriptor setter's expression body. `Object` and `Reflect` must resolve to declared globals (`resolves` under `ast.languageOptions`).","scope":{"include":["**/*.js","**/*.jsx","**/*.mjs","**/*.cjs"],"exclude":[]},"clauses":[{"id":"return-value","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"kind":"return_statement","has":{"stopBy":"neighbor","not":{"regex":"^(return|;)$"}},"inside":{"stopBy":{"any":[{"kind":"function_declaration"},{"kind":"generator_function_declaration"},{"kind":"function_expression"},{"kind":"generator_function"},{"kind":"arrow_function"},{"kind":"method_definition"}]},"matches":"setter"}},"utils":{"callee-Object-defineProperty":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(defineProperty)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](defineProperty)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Object-defineProperty"}}]},"callee-Reflect-defineProperty":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Reflect"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(defineProperty)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Reflect"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](defineProperty)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Reflect-defineProperty"}}]},"callee-Object-create-defineProperties":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(create|defineProperties)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](create|defineProperties)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Object-create-defineProperties"}}]},"descriptor":{"kind":"object","any":[{"inside":{"kind":"arguments","stopBy":"neighbor","inside":{"kind":"call_expression","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"matches":"callee-Object-defineProperty"},{"matches":"callee-Reflect-defineProperty"}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}},"count":{"follows":{"regex":"^,$","stopBy":"end"},"min":2,"max":2}},{"inside":{"kind":"pair","stopBy":"neighbor","inside":{"kind":"object","stopBy":"neighbor","inside":{"kind":"arguments","stopBy":"neighbor","inside":{"kind":"call_expression","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"matches":"callee-Object-create-defineProperties"}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}},"count":{"follows":{"regex":"^,$","stopBy":"end"},"min":1,"max":1}}}}]},"setter":{"any":[{"kind":"method_definition","has":{"regex":"^set$","not":{"kind":"property_identifier"},"stopBy":"neighbor"}},{"kind":"method_definition","all":[{"not":{"has":{"regex":"^get$","not":{"kind":"property_identifier"},"stopBy":"neighbor"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"property_identifier","regex":"^set$"},{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"computed_property_name","has":{"stopBy":"neighbor","any":[{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"template_string","regex":"^`set`$"}]}}]}}],"inside":{"stopBy":"neighbor","matches":"descriptor"}},{"any":[{"kind":"function_expression"},{"kind":"generator_function"},{"kind":"arrow_function"}],"inside":{"kind":"pair","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"kind":"property_identifier","regex":"^set$"},{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"computed_property_name","has":{"stopBy":"neighbor","any":[{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"template_string","regex":"^`set`$"}]}}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}},"inside":{"stopBy":"neighbor","matches":"descriptor"}}}]}}}},"violation":{"anchor":"witness.span","code":"no-setter-return","message":"Setter cannot return a value.","suppress":{"eslint":{"rules":["no-setter-return"]},"oxlint":{"rules":["no-setter-return"]},"biome":{"rules":["lint/correctness/noSetterReturn"]}}}},{"id":"arrow-expression-body","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"not":{"any":[{"kind":"statement_block"},{"regex":"^=>$"}]},"follows":{"regex":"^=>$","stopBy":"neighbor"},"inside":{"stopBy":"neighbor","kind":"arrow_function","matches":"setter"}},"utils":{"callee-Object-defineProperty":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(defineProperty)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](defineProperty)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Object-defineProperty"}}]},"callee-Reflect-defineProperty":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Reflect"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(defineProperty)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Reflect"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](defineProperty)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Reflect-defineProperty"}}]},"callee-Object-create-defineProperties":{"any":[{"kind":"member_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","kind":"property_identifier","regex":"^(create|defineProperties)$"}}]},{"kind":"subscript_expression","all":[{"has":{"stopBy":"neighbor","any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["Object"],"directives":"eslint"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string"}],"regex":"^['\"`](create|defineProperties)['\"`]$"}}]},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"callee-Object-create-defineProperties"}}]},"descriptor":{"kind":"object","any":[{"inside":{"kind":"arguments","stopBy":"neighbor","inside":{"kind":"call_expression","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"matches":"callee-Object-defineProperty"},{"matches":"callee-Reflect-defineProperty"}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}},"count":{"follows":{"regex":"^,$","stopBy":"end"},"min":2,"max":2}},{"inside":{"kind":"pair","stopBy":"neighbor","inside":{"kind":"object","stopBy":"neighbor","inside":{"kind":"arguments","stopBy":"neighbor","inside":{"kind":"call_expression","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"matches":"callee-Object-create-defineProperties"}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}},"count":{"follows":{"regex":"^,$","stopBy":"end"},"min":1,"max":1}}}}]},"setter":{"any":[{"kind":"method_definition","has":{"regex":"^set$","not":{"kind":"property_identifier"},"stopBy":"neighbor"}},{"kind":"method_definition","all":[{"not":{"has":{"regex":"^get$","not":{"kind":"property_identifier"},"stopBy":"neighbor"}}},{"has":{"stopBy":"neighbor","any":[{"kind":"property_identifier","regex":"^set$"},{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"computed_property_name","has":{"stopBy":"neighbor","any":[{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"template_string","regex":"^`set`$"}]}}]}}],"inside":{"stopBy":"neighbor","matches":"descriptor"}},{"any":[{"kind":"function_expression"},{"kind":"generator_function"},{"kind":"arrow_function"}],"inside":{"kind":"pair","stopBy":"neighbor","has":{"stopBy":"neighbor","any":[{"kind":"property_identifier","regex":"^set$"},{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"computed_property_name","has":{"stopBy":"neighbor","any":[{"kind":"string","regex":"^['\"]set['\"]$"},{"kind":"template_string","regex":"^`set`$"}]}}],"not":{"follows":{"regex":"[\\s\\S]","stopBy":"neighbor"}}},"inside":{"stopBy":"neighbor","matches":"descriptor"}}}]}}}},"violation":{"anchor":"witness.span","code":"no-setter-return","message":"Setter cannot return a value.","suppress":{"eslint":{"rules":["no-setter-return"]},"oxlint":{"rules":["no-setter-return"]},"biome":{"rules":["lint/correctness/noSetterReturn"]}}}}]}
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-unsafe-negation","revision":4,"mode":"steer","description":"Port of ESLint's `no-unsafe-negation` rule (https://eslint.org/docs/latest/rules/no-unsafe-negation). Reports an unparenthesized `!x` as the left operand of `in` or `instanceof`. 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":{"enforceForOrderingRelations":{"type":"boolean","nullable":true,"default":null}}}},{"id":"negated-left-operand-of-in","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^in$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of 'in' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-instanceof","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^instanceof$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of 'instanceof' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-lt","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^<$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}},"when":{"option":{"enforceForOrderingRelations":true}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of '<' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-gt","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^>$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}},"when":{"option":{"enforceForOrderingRelations":true}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of '>' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-le","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^<=$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}},"when":{"option":{"enforceForOrderingRelations":true}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of '<=' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-ge","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^>=$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}},"when":{"option":{"enforceForOrderingRelations":true}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of '>=' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-unsafe-negation","revision":5,"mode":"steer","description":"Port of ESLint's `no-unsafe-negation` rule (https://eslint.org/docs/latest/rules/no-unsafe-negation). Reports an unparenthesized `!x` as the left operand of `in` or `instanceof`. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.","scope":{"include":["**/*.js","**/*.jsx","**/*.mjs","**/*.cjs"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"enforceForOrderingRelations":{"type":"boolean","nullable":true,"default":null}}}},{"id":"negated-left-operand-of-in","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^in$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of 'in' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-instanceof","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^instanceof$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of 'instanceof' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-lt","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^<$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}},"when":{"option":{"enforceForOrderingRelations":true}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of '<' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-gt","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^>$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}},"when":{"option":{"enforceForOrderingRelations":true}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of '>' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-le","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^<=$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}},"when":{"option":{"enforceForOrderingRelations":true}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of '<=' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}},{"id":"negated-left-operand-of-ge","forbid":{"ast":{"language":"typescript","rule":{"kind":"unary_expression","has":{"regex":"^!$","stopBy":"neighbor"},"precedes":{"regex":"^>=$","stopBy":"neighbor"},"inside":{"kind":"binary_expression","stopBy":"neighbor"}},"when":{"option":{"enforceForOrderingRelations":true}}}},"violation":{"anchor":"witness.span","code":"no-unsafe-negation","message":"Unexpected negating the left operand of '>=' operator.","suppress":{"eslint":{"rules":["no-unsafe-negation"]},"oxlint":{"rules":["no-unsafe-negation"]},"biome":{"rules":["lint/suspicious/noUnsafeNegation"]}}}}]}
@@ -0,0 +1 @@
1
+ {"format":"rerail.policy/v1","id":"eslint-no-unused-labels","revision":2,"mode":"steer","description":"Port of ESLint's `no-unused-labels` rule (https://eslint.org/docs/latest/rules/no-unused-labels). Flags a label no `break`/`continue` in its body names; removes the label when no comment sits between label and body, the body cannot become a directive, and removal creates no ASI hazard.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"unused-label-fixable","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"unused"},{"matches":"body"},{"not":{"matches":"unfixable"}}]},"utils":{"unused":{"all":[{"kind":"labeled_statement"},{"has":{"kind":"statement_identifier","pattern":"$L","stopBy":"neighbor"}},{"not":{"has":{"stopBy":{"any":[{"kind":"function_declaration"},{"kind":"function_expression"},{"kind":"arrow_function"},{"kind":"generator_function_declaration"},{"kind":"generator_function"},{"kind":"method_definition"},{"kind":"class_static_block"}]},"any":[{"kind":"break_statement"},{"kind":"continue_statement"}],"has":{"kind":"statement_identifier","pattern":"$L","stopBy":"neighbor"}}}}]},"body":{"has":{"stopBy":"neighbor","pattern":"$BODY","not":{"any":[{"kind":"statement_identifier"},{"kind":"comment"}]}}},"directive-body":{"all":[{"kind":"expression_statement"},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string","not":{"has":{"kind":"template_substitution","stopBy":"neighbor"}}},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string","not":{"has":{"kind":"template_substitution","stopBy":"neighbor"}}}]}}]}}]},"unfixable":{"any":[{"has":{"kind":"comment","stopBy":"neighbor"}},{"all":[{"has":{"stopBy":"neighbor","matches":"directive-body"}},{"inside":{"stopBy":{"not":{"kind":"labeled_statement"}},"any":[{"kind":"program"},{"kind":"statement_block","inside":{"stopBy":"neighbor","any":[{"kind":"function_declaration"},{"kind":"function_expression"},{"kind":"arrow_function"},{"kind":"generator_function_declaration"},{"kind":"generator_function"},{"kind":"method_definition"}]}}]}}]},{"all":[{"has":{"stopBy":"neighbor","not":{"any":[{"kind":"statement_identifier"},{"kind":"comment"}]},"regex":"^[(\\[\\-+/`]"}},{"follows":{"stopBy":{"not":{"kind":"comment"}},"not":{"kind":"comment"},"regex":"[^;{:]$"}}]}]}}}},"violation":{"anchor":"capture.L","code":"no-unused-labels","message":"'$L:' is defined but never used.","fix":"$BODY","suppress":{"eslint":{"rules":["no-unused-labels"]},"oxlint":{"rules":["no-unused-labels"]},"biome":{"rules":["lint/correctness/noUnusedLabels"]}}}},{"id":"unused-label","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"unused"},{"matches":"unfixable"}]},"utils":{"unused":{"all":[{"kind":"labeled_statement"},{"has":{"kind":"statement_identifier","pattern":"$L","stopBy":"neighbor"}},{"not":{"has":{"stopBy":{"any":[{"kind":"function_declaration"},{"kind":"function_expression"},{"kind":"arrow_function"},{"kind":"generator_function_declaration"},{"kind":"generator_function"},{"kind":"method_definition"},{"kind":"class_static_block"}]},"any":[{"kind":"break_statement"},{"kind":"continue_statement"}],"has":{"kind":"statement_identifier","pattern":"$L","stopBy":"neighbor"}}}}]},"directive-body":{"all":[{"kind":"expression_statement"},{"has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string","not":{"has":{"kind":"template_substitution","stopBy":"neighbor"}}},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","any":[{"kind":"string"},{"kind":"template_string","not":{"has":{"kind":"template_substitution","stopBy":"neighbor"}}}]}}]}}]},"unfixable":{"any":[{"has":{"kind":"comment","stopBy":"neighbor"}},{"all":[{"has":{"stopBy":"neighbor","matches":"directive-body"}},{"inside":{"stopBy":{"not":{"kind":"labeled_statement"}},"any":[{"kind":"program"},{"kind":"statement_block","inside":{"stopBy":"neighbor","any":[{"kind":"function_declaration"},{"kind":"function_expression"},{"kind":"arrow_function"},{"kind":"generator_function_declaration"},{"kind":"generator_function"},{"kind":"method_definition"}]}}]}}]},{"all":[{"has":{"stopBy":"neighbor","not":{"any":[{"kind":"statement_identifier"},{"kind":"comment"}]},"regex":"^[(\\[\\-+/`]"}},{"follows":{"stopBy":{"not":{"kind":"comment"}},"not":{"kind":"comment"},"regex":"[^;{:]$"}}]}]}}}},"violation":{"anchor":"capture.L","code":"no-unused-labels","message":"'$L:' is defined but never used.","suppress":{"eslint":{"rules":["no-unused-labels"]},"oxlint":{"rules":["no-unused-labels"]},"biome":{"rules":["lint/correctness/noUnusedLabels"]}}}}]}
@@ -0,0 +1,83 @@
1
+ {
2
+ "format": "rerail.policy/v1",
3
+ "id": "eslint-no-unused-private-class-members",
4
+ "revision": 2,
5
+ "mode": "steer",
6
+ "description": "ESLint 10.11.0 no-unused-private-class-members, default options. Port of ESLint's `no-unused-private-class-members` rule (https://eslint.org/docs/latest/rules/no-unused-private-class-members). A private field, method or accessor that no reference in its class body uses (`binds.used: false` on the private name: writes only count for fields and methods, any reference for accessors), reported at its last declaration.",
7
+ "scope": {
8
+ "include": [
9
+ "**/*.ts",
10
+ "**/*.tsx",
11
+ "**/*.mts",
12
+ "**/*.cts",
13
+ "**/*.js",
14
+ "**/*.jsx",
15
+ "**/*.mjs",
16
+ "**/*.cjs"
17
+ ],
18
+ "exclude": []
19
+ },
20
+ "clauses": [
21
+ {
22
+ "id": "unused-private-member",
23
+ "forbid": {
24
+ "ast": {
25
+ "language": "typescript",
26
+ "rule": {
27
+ "kind": "private_property_identifier",
28
+ "pattern": "$N",
29
+ "binds": {
30
+ "used": false
31
+ },
32
+ "not": {
33
+ "inside": {
34
+ "stopBy": "neighbor",
35
+ "any": [
36
+ {
37
+ "kind": "public_field_definition"
38
+ },
39
+ {
40
+ "kind": "method_definition"
41
+ }
42
+ ],
43
+ "precedes": {
44
+ "stopBy": "end",
45
+ "any": [
46
+ {
47
+ "kind": "public_field_definition"
48
+ },
49
+ {
50
+ "kind": "method_definition"
51
+ }
52
+ ],
53
+ "has": {
54
+ "stopBy": "neighbor",
55
+ "kind": "private_property_identifier",
56
+ "pattern": "$N"
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ },
64
+ "violation": {
65
+ "anchor": "capture.N",
66
+ "code": "no-unused-private-class-members",
67
+ "message": "'$N' is defined but never used.",
68
+ "suppress": {
69
+ "eslint": {
70
+ "rules": [
71
+ "no-unused-private-class-members"
72
+ ]
73
+ },
74
+ "oxlint": {
75
+ "rules": [
76
+ "no-unused-private-class-members"
77
+ ]
78
+ }
79
+ }
80
+ }
81
+ }
82
+ ]
83
+ }
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "format": "rerail.policy/v1",
3
3
  "id": "eslint-no-with",
4
- "revision": 3,
4
+ "revision": 4,
5
5
  "mode": "steer",
6
6
  "description": "Port of ESLint's `no-with` rule (https://eslint.org/docs/latest/rules/no-with). Reports every `with` statement, at its `with` keyword.",
7
7
  "scope": {
8
8
  "include": [
9
- "**/*"
9
+ "**/*.js",
10
+ "**/*.jsx",
11
+ "**/*.mjs",
12
+ "**/*.cjs"
10
13
  ],
11
14
  "exclude": []
12
15
  },