@neralabs/rerail-pack-javascript 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +416 -3
  2. package/licenses/eslint/UPSTREAM.md +28 -3
  3. package/licenses/eslint-plugin-unicorn/UPSTREAM.md +39 -2
  4. package/pack.json +43 -3
  5. package/package.json +1 -1
  6. package/rules/eslint-arrow-body-style.json +1 -1
  7. package/rules/eslint-capitalized-comments.json +1 -1
  8. package/rules/eslint-curly.json +1 -0
  9. package/rules/eslint-default-case-last.json +1 -1
  10. package/rules/eslint-default-case.json +1 -1
  11. package/rules/eslint-eqeqeq.json +1 -1
  12. package/rules/eslint-func-style.json +1 -1
  13. package/rules/eslint-guard-for-in.json +1 -1
  14. package/rules/eslint-no-bitwise.json +1 -1
  15. package/rules/eslint-no-caller.json +2 -2
  16. package/rules/eslint-no-case-declarations.json +2 -2
  17. package/rules/eslint-no-compare-neg-zero.json +2 -2
  18. package/rules/eslint-no-cond-assign.json +1 -1
  19. package/rules/eslint-no-console.json +1 -1
  20. package/rules/eslint-no-continue.json +2 -2
  21. package/rules/eslint-no-debugger.json +1 -1
  22. package/rules/eslint-no-delete-var.json +2 -2
  23. package/rules/eslint-no-div-regex.json +1 -1
  24. package/rules/eslint-no-dupe-keys.json +3 -7
  25. package/rules/eslint-no-duplicate-case.json +2 -2
  26. package/rules/eslint-no-empty-pattern.json +1 -1
  27. package/rules/eslint-no-empty-static-block.json +2 -2
  28. package/rules/eslint-no-empty.json +2 -2
  29. package/rules/eslint-no-eq-null.json +1 -1
  30. package/rules/eslint-no-extend-native.json +1 -1
  31. package/rules/eslint-no-inline-comments.json +1 -1
  32. package/rules/eslint-no-iterator.json +1 -1
  33. package/rules/eslint-no-labels.json +1 -0
  34. package/rules/eslint-no-loss-of-precision.json +1 -1
  35. package/rules/eslint-no-multi-str.json +2 -2
  36. package/rules/eslint-no-negated-condition.json +2 -2
  37. package/rules/eslint-no-nested-ternary.json +1 -1
  38. package/rules/eslint-no-new-wrappers.json +1 -1
  39. package/rules/eslint-no-new.json +2 -2
  40. package/rules/eslint-no-nonoctal-decimal-escape.json +2 -2
  41. package/rules/eslint-no-object-constructor.json +1 -0
  42. package/rules/eslint-no-octal-escape.json +1 -1
  43. package/rules/eslint-no-octal.json +2 -2
  44. package/rules/eslint-no-plusplus.json +1 -1
  45. package/rules/eslint-no-proto.json +1 -1
  46. package/rules/eslint-no-prototype-builtins.json +3 -3
  47. package/rules/eslint-no-return-assign.json +1 -1
  48. package/rules/eslint-no-script-url.json +1 -1
  49. package/rules/eslint-no-self-compare.json +2 -2
  50. package/rules/eslint-no-sequences.json +1 -0
  51. package/rules/eslint-no-setter-return.json +1 -1
  52. package/rules/eslint-no-sparse-arrays.json +1 -1
  53. package/rules/eslint-no-template-curly-in-string.json +2 -2
  54. package/rules/eslint-no-ternary.json +1 -1
  55. package/rules/eslint-no-unneeded-ternary.json +1 -1
  56. package/rules/eslint-no-unsafe-finally.json +7 -7
  57. package/rules/eslint-no-unsafe-negation.json +1 -1
  58. package/rules/eslint-no-unused-labels.json +1 -0
  59. package/rules/eslint-no-unused-private-class-members.json +83 -0
  60. package/rules/eslint-no-useless-call.json +1 -1
  61. package/rules/eslint-no-useless-catch.json +1 -1
  62. package/rules/eslint-no-useless-concat.json +1 -1
  63. package/rules/eslint-no-void.json +1 -1
  64. package/rules/eslint-no-warning-comments.json +1 -1
  65. package/rules/eslint-no-with.json +7 -4
  66. package/rules/eslint-operator-assignment.json +1 -1
  67. package/rules/eslint-prefer-numeric-literals.json +1 -1
  68. package/rules/eslint-prefer-spread.json +1 -1
  69. package/rules/eslint-prefer-template.json +2 -2
  70. package/rules/eslint-radix.json +2 -2
  71. package/rules/eslint-sort-imports.json +1 -1
  72. package/rules/eslint-sort-keys.json +1 -1
  73. package/rules/eslint-sort-vars.json +1 -1
  74. package/rules/eslint-use-isnan.json +3 -3
  75. package/rules/eslint-valid-typeof.json +1 -1
  76. package/rules/eslint-yoda.json +1 -1
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.2",
3
+ "version": "0.1.4",
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": {
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-arrow-body-style","revision":4,"mode":"steer","description":"Port of ESLint's `arrow-body-style` rule (default options: as-needed). Flags an arrow block body that only returns a value. Fixes when ESLint's comment and ASI guards allow and the rewrite is a template of whole nodes. 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},"requireReturnForObjectLiteral":{"type":"boolean","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"already-parenthesized":{"has":{"stopBy":"neighbor","kind":"return_statement","has":{"stopBy":"neighbor","kind":"parenthesized_expression"}}},"arg":{"has":{"stopBy":"neighbor","kind":"return_statement","has":{"stopBy":"neighbor","matches":"return-value","pattern":"$ARG"}}},"arrow-block":{"kind":"statement_block","inside":{"kind":"arrow_function","stopBy":"neighbor"}},"arrow-expression-body":{"not":{"any":[{"kind":"comment"},{"kind":"statement_block"}]},"follows":{"regex":"^=>$","stopBy":"end"},"inside":{"kind":"arrow_function","stopBy":"neighbor"}},"bare-return":{"has":{"stopBy":"neighbor","kind":"return_statement","not":{"has":{"stopBy":"neighbor","matches":"return-value"}}}},"block-statement":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^[{}]$"}}]},"first-child":{"not":{"follows":{"regex":"[\\s\\S]"}}},"for-init":{"inside":{"stopBy":"end","follows":{"regex":"^\\($"},"inside":{"kind":"for_statement","stopBy":"neighbor"}}},"hazard-after":{"any":[{"precedes":{"stopBy":{"not":{"kind":"comment"}},"not":{"kind":"comment"},"regex":"^[(\\[/`+-]"}},{"all":[{"not":{"precedes":{"stopBy":"end","not":{"kind":"comment"}}}},{"inside":{"stopBy":"neighbor","matches":"hazard-after"}}]}]},"leads-with-paren-object":{"any":[{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","follows":{"regex":"^\\($"},"matches":"starts-with-object"}},{"has":{"stopBy":"neighbor","all":[{"matches":"first-child"},{"matches":"leads-with-paren-object"}]}}]},"needs-parens":{"any":[{"matches":"object-first"},{"has":{"stopBy":"neighbor","kind":"return_statement","has":{"stopBy":"neighbor","kind":"sequence_expression"}}},{"all":[{"inside":{"kind":"arrow_function","stopBy":"neighbor","has":{"stopBy":"end","kind":"binary_expression","has":{"stopBy":"neighbor","regex":"^in$"}}}},{"inside":{"kind":"arrow_function","stopBy":"neighbor","matches":"for-init"}}]}]},"no-comments":{"all":[{"not":{"has":{"kind":"comment"}}},{"not":{"has":{"kind":"return_statement","has":{"kind":"comment"}}}}]},"object-first":{"has":{"stopBy":"neighbor","kind":"return_statement","has":{"stopBy":"neighbor","matches":"return-value","regex":"^\\{"}}},"return-value":{"not":{"any":[{"kind":"comment"},{"regex":"^(?:return|;)$"}]}},"single-return":{"all":[{"has":{"stopBy":"neighbor","kind":"return_statement","pattern":"$RET"}},{"not":{"has":{"stopBy":"neighbor","all":[{"matches":"block-statement"},{"not":{"kind":"return_statement"}}]}}},{"not":{"has":{"stopBy":"neighbor","kind":"return_statement","precedes":{"kind":"return_statement","stopBy":"end"}}}}]},"starts-with-object":{"any":[{"kind":"object"},{"has":{"stopBy":"neighbor","all":[{"matches":"first-child"},{"matches":"starts-with-object"}]}}]},"unparen":{"any":[{"not":{"kind":"parenthesized_expression"},"pattern":"$INNER"},{"kind":"parenthesized_expression","has":{"not":{"any":[{"kind":"comment"},{"regex":"^[()]$"}]},"matches":"unparen"}}]},"unparen-object":{"any":[{"kind":"object"},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"unparen-object"}}]},"r1":{"not":{"has":{"has":{"matches":"unparen-object","stopBy":"neighbor"},"kind":"return_statement","stopBy":"neighbor"}}},"r2":{"has":{"not":{"any":[{"kind":"comment"},{"regex":"^[()]$"}]},"pattern":"$X","stopBy":"neighbor"},"kind":"parenthesized_expression","regex":"^\\(\\{[\\s\\S]*\\S\\)$"},"r3":{"not":{"all":[{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"}]}},"r4":{"any":[{"not":{"matches":"needs-parens"}},{"matches":"already-parenthesized"}]},"r5":{"has":{"matches":"block-statement","stopBy":"neighbor"}}}}},{"id":"unexpectedObjectBlock-fix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"matches":"object-first"},{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"},{"matches":"r4"}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; parenthesize the returned value and move it immediately after the `=>`.","fix":"$ARG","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedObjectBlock-fix-parens","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"matches":"object-first"},{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"},{"matches":"needs-parens"},{"not":{"matches":"already-parenthesized"}}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; parenthesize the returned value and move it immediately after the `=>`.","fix":"($ARG)","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedObjectBlock-nofix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"matches":"object-first"},{"matches":"r3"}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; parenthesize the returned value and move it immediately after the `=>`.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedSingleBlock-fix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"not":{"matches":"object-first"}},{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"},{"matches":"r4"}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`.","fix":"$ARG","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedSingleBlock-fix-parens","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"not":{"matches":"object-first"}},{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"},{"matches":"needs-parens"},{"not":{"matches":"already-parenthesized"}}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`.","fix":"($ARG)","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedSingleBlock-nofix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"not":{"matches":"object-first"}},{"matches":"r3"}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"expectedBlock-fix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-expression-body"},{"$option":"option","cases":{"as-needed":[{"matches":"unparen-object"}]},"default":[],"spread":true},{"not":{"matches":"leads-with-paren-object"}},{"matches":"unparen"},{"pattern":"$B"}]},"when":{"option":{"option":{"in":["always","as-needed"]}}}}},"violation":{"anchor":"capture.INNER","code":"arrow-body-style","message":"Expected block statement surrounding arrow body.","fix":"{return $B}","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"expectedBlock-fix-object","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-expression-body"},{"$option":"option","cases":{"as-needed":[{"matches":"unparen-object"}]},"default":[],"spread":true},{"matches":"r2"},{"matches":"unparen"}]},"when":{"option":{"option":{"in":["always","as-needed"]}}}}},"violation":{"anchor":"capture.INNER","code":"arrow-body-style","message":"Expected block statement surrounding arrow body.","fix":"{return $X}","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"expectedBlock-nofix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-expression-body"},{"$option":"option","cases":{"as-needed":[{"matches":"unparen-object"}]},"default":[],"spread":true},{"matches":"leads-with-paren-object"},{"not":{"matches":"r2"}},{"matches":"unparen"}]},"when":{"option":{"option":{"in":["always","as-needed"]}}}}},"violation":{"anchor":"capture.INNER","code":"arrow-body-style","message":"Expected block statement surrounding arrow body.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedEmptyBlock","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"not":{"matches":"r5"}}]},"when":{"option":{"option":"never"}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; put a value of `undefined` immediately after the `=>`.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedOtherBlock","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"r5"},{"not":{"matches":"single-return"}}]},"when":{"option":{"option":"never"}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-arrow-body-style","revision":4,"mode":"steer","description":"Drop the braces and return from an arrow function whose body only returns a value; write the value directly after the arrow.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"option":{"type":"string","nullable":true,"default":null},"requireReturnForObjectLiteral":{"type":"boolean","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"already-parenthesized":{"has":{"stopBy":"neighbor","kind":"return_statement","has":{"stopBy":"neighbor","kind":"parenthesized_expression"}}},"arg":{"has":{"stopBy":"neighbor","kind":"return_statement","has":{"stopBy":"neighbor","matches":"return-value","pattern":"$ARG"}}},"arrow-block":{"kind":"statement_block","inside":{"kind":"arrow_function","stopBy":"neighbor"}},"arrow-expression-body":{"not":{"any":[{"kind":"comment"},{"kind":"statement_block"}]},"follows":{"regex":"^=>$","stopBy":"end"},"inside":{"kind":"arrow_function","stopBy":"neighbor"}},"bare-return":{"has":{"stopBy":"neighbor","kind":"return_statement","not":{"has":{"stopBy":"neighbor","matches":"return-value"}}}},"block-statement":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^[{}]$"}}]},"first-child":{"not":{"follows":{"regex":"[\\s\\S]"}}},"for-init":{"inside":{"stopBy":"end","follows":{"regex":"^\\($"},"inside":{"kind":"for_statement","stopBy":"neighbor"}}},"hazard-after":{"any":[{"precedes":{"stopBy":{"not":{"kind":"comment"}},"not":{"kind":"comment"},"regex":"^[(\\[/`+-]"}},{"all":[{"not":{"precedes":{"stopBy":"end","not":{"kind":"comment"}}}},{"inside":{"stopBy":"neighbor","matches":"hazard-after"}}]}]},"leads-with-paren-object":{"any":[{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","follows":{"regex":"^\\($"},"matches":"starts-with-object"}},{"has":{"stopBy":"neighbor","all":[{"matches":"first-child"},{"matches":"leads-with-paren-object"}]}}]},"needs-parens":{"any":[{"matches":"object-first"},{"has":{"stopBy":"neighbor","kind":"return_statement","has":{"stopBy":"neighbor","kind":"sequence_expression"}}},{"all":[{"inside":{"kind":"arrow_function","stopBy":"neighbor","has":{"stopBy":"end","kind":"binary_expression","has":{"stopBy":"neighbor","regex":"^in$"}}}},{"inside":{"kind":"arrow_function","stopBy":"neighbor","matches":"for-init"}}]}]},"no-comments":{"all":[{"not":{"has":{"kind":"comment"}}},{"not":{"has":{"kind":"return_statement","has":{"kind":"comment"}}}}]},"object-first":{"has":{"stopBy":"neighbor","kind":"return_statement","has":{"stopBy":"neighbor","matches":"return-value","regex":"^\\{"}}},"return-value":{"not":{"any":[{"kind":"comment"},{"regex":"^(?:return|;)$"}]}},"single-return":{"all":[{"has":{"stopBy":"neighbor","kind":"return_statement","pattern":"$RET"}},{"not":{"has":{"stopBy":"neighbor","all":[{"matches":"block-statement"},{"not":{"kind":"return_statement"}}]}}},{"not":{"has":{"stopBy":"neighbor","kind":"return_statement","precedes":{"kind":"return_statement","stopBy":"end"}}}}]},"starts-with-object":{"any":[{"kind":"object"},{"has":{"stopBy":"neighbor","all":[{"matches":"first-child"},{"matches":"starts-with-object"}]}}]},"unparen":{"any":[{"not":{"kind":"parenthesized_expression"},"pattern":"$INNER"},{"kind":"parenthesized_expression","has":{"not":{"any":[{"kind":"comment"},{"regex":"^[()]$"}]},"matches":"unparen"}}]},"unparen-object":{"any":[{"kind":"object"},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"unparen-object"}}]},"r1":{"not":{"has":{"has":{"matches":"unparen-object","stopBy":"neighbor"},"kind":"return_statement","stopBy":"neighbor"}}},"r2":{"has":{"not":{"any":[{"kind":"comment"},{"regex":"^[()]$"}]},"pattern":"$X","stopBy":"neighbor"},"kind":"parenthesized_expression","regex":"^\\(\\{[\\s\\S]*\\S\\)$"},"r3":{"not":{"all":[{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"}]}},"r4":{"any":[{"not":{"matches":"needs-parens"}},{"matches":"already-parenthesized"}]},"r5":{"has":{"matches":"block-statement","stopBy":"neighbor"}}}}},{"id":"unexpectedObjectBlock-fix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"matches":"object-first"},{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"},{"matches":"r4"}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; parenthesize the returned value and move it immediately after the `=>`.","fix":"$ARG","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedObjectBlock-fix-parens","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"matches":"object-first"},{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"},{"matches":"needs-parens"},{"not":{"matches":"already-parenthesized"}}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; parenthesize the returned value and move it immediately after the `=>`.","fix":"($ARG)","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedObjectBlock-nofix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"matches":"object-first"},{"matches":"r3"}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; parenthesize the returned value and move it immediately after the `=>`.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedSingleBlock-fix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"not":{"matches":"object-first"}},{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"},{"matches":"r4"}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`.","fix":"$ARG","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedSingleBlock-fix-parens","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"not":{"matches":"object-first"}},{"not":{"matches":"bare-return"}},{"matches":"no-comments"},{"not":{"matches":"hazard-after"}},{"matches":"arg"},{"matches":"needs-parens"},{"not":{"matches":"already-parenthesized"}}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`.","fix":"($ARG)","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedSingleBlock-nofix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"single-return"},{"$option":"requireReturnForObjectLiteral","cases":{"true":[{"matches":"r1"}]},"default":[],"spread":true},{"not":{"matches":"object-first"}},{"matches":"r3"}]},"when":{"option":{"option":{"in":[null,"never","as-needed"]}}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"expectedBlock-fix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-expression-body"},{"$option":"option","cases":{"as-needed":[{"matches":"unparen-object"}]},"default":[],"spread":true},{"not":{"matches":"leads-with-paren-object"}},{"matches":"unparen"},{"pattern":"$B"}]},"when":{"option":{"option":{"in":["always","as-needed"]}}}}},"violation":{"anchor":"capture.INNER","code":"arrow-body-style","message":"Expected block statement surrounding arrow body.","fix":"{return $B}","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"expectedBlock-fix-object","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-expression-body"},{"$option":"option","cases":{"as-needed":[{"matches":"unparen-object"}]},"default":[],"spread":true},{"matches":"r2"},{"matches":"unparen"}]},"when":{"option":{"option":{"in":["always","as-needed"]}}}}},"violation":{"anchor":"capture.INNER","code":"arrow-body-style","message":"Expected block statement surrounding arrow body.","fix":"{return $X}","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"expectedBlock-nofix","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-expression-body"},{"$option":"option","cases":{"as-needed":[{"matches":"unparen-object"}]},"default":[],"spread":true},{"matches":"leads-with-paren-object"},{"not":{"matches":"r2"}},{"matches":"unparen"}]},"when":{"option":{"option":{"in":["always","as-needed"]}}}}},"violation":{"anchor":"capture.INNER","code":"arrow-body-style","message":"Expected block statement surrounding arrow body.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedEmptyBlock","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"not":{"matches":"r5"}}]},"when":{"option":{"option":"never"}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body; put a value of `undefined` immediately after the `=>`.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}},{"id":"unexpectedOtherBlock","forbid":{"ast":{"language":"typescript","rule":{"all":[{"matches":"arrow-block"},{"matches":"r5"},{"not":{"matches":"single-return"}}]},"when":{"option":{"option":"never"}}}},"violation":{"anchor":"witness.span","code":"arrow-body-style","message":"Unexpected block statement surrounding arrow body.","suppress":{"eslint":{"rules":["arrow-body-style"]},"oxlint":{"rules":["arrow-body-style"]},"biome":{"rules":["lint/style/useConsistentArrowReturn"]}}}}]}
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-capitalized-comments","revision":5,"mode":"steer","description":"Port of ESLint's `capitalized-comments` rule (default options: always). Tests the first non-whitespace, non-asterisk character of each comment for letter case (Unicode Ll/Lu), skipping directive comments and URLs. Fixes as ESLint does: the first letter's case converted (`transform` `convert` of the regex group `L`, written over it with `fix.range`). 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},"ignoreInlineComments":{"type":"boolean","nullable":true,"default":null},"ignoreConsecutiveComments":{"type":"boolean","nullable":true,"default":null},"ignorePattern":{"type":"string","nullable":true,"default":null},"block.ignorePattern":{"type":"string","nullable":true,"default":null},"line.ignorePattern":{"type":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"all":[{"layout":{"before":{"breaks":{"eq":0},"comments":true,"to":"token"}}},{"layout":{"after":{"breaks":{"eq":0},"comments":true,"to":"token"}}}]}}}},{"id":"comment-case","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"comment"},{"regex":{"$option":"option","cases":{"never":"^(?://|/\\*)[\\s*]*(?<L>\\p{Lu})"},"default":"^(?://|/\\*)[\\s*]*(?<L>\\p{Ll})"}},{"not":{"regex":"^(?://|/\\*)\\s*(?:eslint|jshint\\s+|jslint\\s+|istanbul\\s+|globals?\\s+|exported\\s+|jscs)"}},{"not":{"regex":"^(?://|/\\*)[\\s*]*(?:[^:/?#\\s*]\\**)+:\\**/\\**/\\**[^?#*]"}},{"$option":"ignorePattern","cases":{"match":[],"Match":[],"foo|bar":[],"Foo|Bar":[],"ignored?":[]},"default":{"$option":"ignoreInlineComments","cases":{"true":[{"not":{"$option":"ignoreInlineComments","cases":{"true":{"matches":"r1"}},"default":{"follows":{"kind":"comment"}}}}]},"default":{"$option":"ignoreConsecutiveComments","cases":{"true":[{"not":{"$option":"ignoreInlineComments","cases":{"true":{"matches":"r1"}},"default":{"follows":{"kind":"comment"}}}}]},"default":[]}},"spread":true},{"$option":"ignorePattern","cases":{"match":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:match)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"match":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:match)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"Match":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:Match)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"Match":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:Match)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"foo|bar":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:foo|bar)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"foo|bar":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:foo|bar)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"Foo|Bar":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:Foo|Bar)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"Foo|Bar":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:Foo|Bar)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"ignored?":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:ignored?)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"ignored?":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:ignored?)"}]}}]},"default":[],"spread":true},{"$option":"block.ignorePattern","cases":{"blockCommentIgnorePattern":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:lineCommentIgnorePattern)"}]}}]},"default":[],"spread":true},{"$option":"block.ignorePattern","cases":{"blockCommentIgnorePattern":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:blockCommentIgnorePattern)"}]}}]},"default":[],"spread":true}]},"transform":{"C":{"convert":{"source":"$L","toCase":{"$option":"option","cases":{"never":"lowerCase"},"default":"upperCase"}}}}}},"violation":{"anchor":"witness.span","code":"capitalized-comments","message":{"$option":"option","cases":{"never":"Comments should not begin with an uppercase character."},"default":"Comments should not begin with a lowercase character."},"fix":{"template":"$C","range":"capture.L"},"suppress":{"eslint":{"rules":["capitalized-comments"]},"oxlint":{"rules":["capitalized-comments"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-capitalized-comments","revision":5,"mode":"steer","description":"Start every comment with a capital letter; directive comments and comments starting with a URL are skipped.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"option":{"type":"string","nullable":true,"default":null},"ignoreInlineComments":{"type":"boolean","nullable":true,"default":null},"ignoreConsecutiveComments":{"type":"boolean","nullable":true,"default":null},"ignorePattern":{"type":"string","nullable":true,"default":null},"block.ignorePattern":{"type":"string","nullable":true,"default":null},"line.ignorePattern":{"type":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"all":[{"layout":{"before":{"breaks":{"eq":0},"comments":true,"to":"token"}}},{"layout":{"after":{"breaks":{"eq":0},"comments":true,"to":"token"}}}]}}}},{"id":"comment-case","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"comment"},{"regex":{"$option":"option","cases":{"never":"^(?://|/\\*)[\\s*]*(?<L>\\p{Lu})"},"default":"^(?://|/\\*)[\\s*]*(?<L>\\p{Ll})"}},{"not":{"regex":"^(?://|/\\*)\\s*(?:eslint|jshint\\s+|jslint\\s+|istanbul\\s+|globals?\\s+|exported\\s+|jscs)"}},{"not":{"regex":"^(?://|/\\*)[\\s*]*(?:[^:/?#\\s*]\\**)+:\\**/\\**/\\**[^?#*]"}},{"$option":"ignorePattern","cases":{"match":[],"Match":[],"foo|bar":[],"Foo|Bar":[],"ignored?":[]},"default":{"$option":"ignoreInlineComments","cases":{"true":[{"not":{"$option":"ignoreInlineComments","cases":{"true":{"matches":"r1"}},"default":{"follows":{"kind":"comment"}}}}]},"default":{"$option":"ignoreConsecutiveComments","cases":{"true":[{"not":{"$option":"ignoreInlineComments","cases":{"true":{"matches":"r1"}},"default":{"follows":{"kind":"comment"}}}}]},"default":[]}},"spread":true},{"$option":"ignorePattern","cases":{"match":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:match)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"match":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:match)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"Match":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:Match)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"Match":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:Match)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"foo|bar":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:foo|bar)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"foo|bar":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:foo|bar)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"Foo|Bar":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:Foo|Bar)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"Foo|Bar":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:Foo|Bar)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"ignored?":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:ignored?)"}]}}]},"default":[],"spread":true},{"$option":"ignorePattern","cases":{"ignored?":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:ignored?)"}]}}]},"default":[],"spread":true},{"$option":"block.ignorePattern","cases":{"blockCommentIgnorePattern":[{"not":{"all":[{"regex":"^//"},{"regex":"^(?://|/\\*)[\\s*]*(?:lineCommentIgnorePattern)"}]}}]},"default":[],"spread":true},{"$option":"block.ignorePattern","cases":{"blockCommentIgnorePattern":[{"not":{"all":[{"regex":"^/\\*"},{"regex":"^(?://|/\\*)[\\s*]*(?:blockCommentIgnorePattern)"}]}}]},"default":[],"spread":true}]},"transform":{"C":{"convert":{"source":"$L","toCase":{"$option":"option","cases":{"never":"lowerCase"},"default":"upperCase"}}}}}},"violation":{"anchor":"witness.span","code":"capitalized-comments","message":{"$option":"option","cases":{"never":"Comments should not begin with an uppercase character."},"default":"Comments should not begin with a lowercase character."},"fix":{"template":"$C","range":"capture.L"},"suppress":{"eslint":{"rules":["capitalized-comments"]},"oxlint":{"rules":["capitalized-comments"]}}}}]}
@@ -0,0 +1 @@
1
+ {"format":"rerail.policy/v1","id":"eslint-curly","revision":2,"mode":"steer","description":"Wrap every if, else and loop body in braces, even a single statement; unbraced bodies invite bugs when lines are added.","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"]}}}}]}
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-default-case-last",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `default-case-last` (https://eslint.org/docs/latest/rules/default-case-last). Flags a `default` clause followed by a `case` clause.",
6
+ "description": "Put the default clause last in a switch statement; a default in the middle is easy to misread.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-default-case","revision":4,"mode":"steer","description":"Port of ESLint's `default-case` rule (https://eslint.org/docs/latest/rules/default-case): a non-empty switch needs a `default` case unless the last comment after its last case reads `no default` (case-insensitive). 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":{"commentPattern":{"type":"string","nullable":true,"default":null}}}},{"id":"missing-default","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"switch_statement"},{"has":{"stopBy":"neighbor","kind":"switch_body","all":[{"has":{"stopBy":"neighbor","kind":"switch_case"}},{"not":{"has":{"stopBy":"neighbor","kind":"switch_default"}}},{"not":{"any":[{"has":{"stopBy":"neighbor","all":[{"kind":"comment","regex":{"$option":"commentPattern","cases":{".?":"(?s)^(?://|/\\*)\\s*","default case omitted":"(?s)^(?://|/\\*)\\s*.*default case omitted","^skip default":"(?s)^(?://|/\\*)\\s*skip default","default":"(?s)^(?://|/\\*)\\s*.*default","skipped default case":"(?s)^(?://|/\\*)\\s*.*skipped default case","default omitted":"(?s)^(?://|/\\*)\\s*.*default omitted"},"default":"(?i)^(?://|/\\*)\\s*no default\\s*(?:\\*/)?$"}},{"precedes":{"stopBy":"neighbor","regex":"^\\}$"}}]}},{"has":{"stopBy":"neighbor","kind":"switch_case","precedes":{"stopBy":"neighbor","regex":"^\\}$"},"has":{"stopBy":"neighbor","all":[{"kind":"comment","regex":{"$option":"commentPattern","cases":{".?":"(?s)^(?://|/\\*)\\s*","default case omitted":"(?s)^(?://|/\\*)\\s*.*default case omitted","^skip default":"(?s)^(?://|/\\*)\\s*skip default","default":"(?s)^(?://|/\\*)\\s*.*default","skipped default case":"(?s)^(?://|/\\*)\\s*.*skipped default case","default omitted":"(?s)^(?://|/\\*)\\s*.*default omitted"},"default":"(?i)^(?://|/\\*)\\s*no default\\s*(?:\\*/)?$"}},{"not":{"precedes":{"stopBy":"neighbor","regex":"[\\s\\S]"}}}]}}}]}}]}}]}}},"violation":{"anchor":"witness.span","code":"default-case","message":"Expected a default case.","suppress":{"eslint":{"rules":["default-case"]},"oxlint":{"rules":["default-case"]},"biome":{"rules":["lint/style/useDefaultSwitchClause"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-default-case","revision":4,"mode":"steer","description":"Add a default case to every switch, or a trailing \"no default\" comment when omitting it is deliberate.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"commentPattern":{"type":"string","nullable":true,"default":null}}}},{"id":"missing-default","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"switch_statement"},{"has":{"stopBy":"neighbor","kind":"switch_body","all":[{"has":{"stopBy":"neighbor","kind":"switch_case"}},{"not":{"has":{"stopBy":"neighbor","kind":"switch_default"}}},{"not":{"any":[{"has":{"stopBy":"neighbor","all":[{"kind":"comment","regex":{"$option":"commentPattern","cases":{".?":"(?s)^(?://|/\\*)\\s*","default case omitted":"(?s)^(?://|/\\*)\\s*.*default case omitted","^skip default":"(?s)^(?://|/\\*)\\s*skip default","default":"(?s)^(?://|/\\*)\\s*.*default","skipped default case":"(?s)^(?://|/\\*)\\s*.*skipped default case","default omitted":"(?s)^(?://|/\\*)\\s*.*default omitted"},"default":"(?i)^(?://|/\\*)\\s*no default\\s*(?:\\*/)?$"}},{"precedes":{"stopBy":"neighbor","regex":"^\\}$"}}]}},{"has":{"stopBy":"neighbor","kind":"switch_case","precedes":{"stopBy":"neighbor","regex":"^\\}$"},"has":{"stopBy":"neighbor","all":[{"kind":"comment","regex":{"$option":"commentPattern","cases":{".?":"(?s)^(?://|/\\*)\\s*","default case omitted":"(?s)^(?://|/\\*)\\s*.*default case omitted","^skip default":"(?s)^(?://|/\\*)\\s*skip default","default":"(?s)^(?://|/\\*)\\s*.*default","skipped default case":"(?s)^(?://|/\\*)\\s*.*skipped default case","default omitted":"(?s)^(?://|/\\*)\\s*.*default omitted"},"default":"(?i)^(?://|/\\*)\\s*no default\\s*(?:\\*/)?$"}},{"not":{"precedes":{"stopBy":"neighbor","regex":"[\\s\\S]"}}}]}}}]}}]}}]}}},"violation":{"anchor":"witness.span","code":"default-case","message":"Add a default case to this switch, or a `// no default` comment if leaving it out is deliberate.","suppress":{"eslint":{"rules":["default-case"]},"oxlint":{"rules":["default-case"]},"biome":{"rules":["lint/style/useDefaultSwitchClause"]}}}}]}
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-eqeqeq",
4
4
  "revision": 4,
5
5
  "mode": "steer",
6
- "description": "ESLint 10.11.0 eqeqeq, default options. Port of ESLint's `eqeqeq` rule (https://eslint.org/docs/latest/rules/eqeqeq). Default options (`always`, null `always`): requires === and !==; autofixes only when an operand is typeof or both operands are literals of one type. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.",
6
+ "description": "Use === and !== instead of == and !=; loose equality applies surprising type coercion.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.ts",
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-func-style","revision":3,"mode":"steer","description":"Port of ESLint's `func-style` rule (https://eslint.org/docs/latest/rules/func-style). Reports function declarations that are not default exports or TypeScript overload implementations. 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},"overrides.namedExports":{"type":"string","nullable":true,"default":null},"allowArrowFunctions":{"type":"boolean","nullable":true,"default":null},"allowTypeAnnotation":{"type":"boolean","nullable":true,"default":null}}}},{"id":"function-declaration","forbid":{"ast":{"language":"typescript","utils":{"fn-decl":{"any":[{"kind":"function_declaration"},{"kind":"generator_function_declaration"}]},"export-default":{"inside":{"kind":"export_statement","has":{"regex":"^default$","stopBy":"neighbor"},"stopBy":"neighbor"}},"signature-n":{"kind":"function_signature","has":{"kind":"identifier","pattern":"$N","stopBy":"neighbor"}},"overloaded":{"any":[{"precedes":{"stopBy":"end","matches":"signature-n"}},{"follows":{"stopBy":"end","matches":"signature-n"}},{"inside":{"kind":"export_statement","any":[{"precedes":{"stopBy":"end","kind":"export_statement","has":{"matches":"signature-n","stopBy":"neighbor"}}},{"follows":{"stopBy":"end","kind":"export_statement","has":{"matches":"signature-n","stopBy":"neighbor"}}}],"stopBy":"neighbor"}},{"inside":{"kind":"switch_case","inside":{"kind":"switch_body","has":{"kind":"switch_case","has":{"matches":"signature-n","stopBy":"neighbor"},"stopBy":"neighbor"},"stopBy":"neighbor"},"stopBy":"neighbor"}}]},"exported":{"inside":{"kind":"export_statement","stopBy":"neighbor"}}},"rule":{"matches":"fn-decl","all":[{"any":[{"$option":"overrides.namedExports","cases":{"expression":{"$option":"option","cases":{"expression":[]},"default":[{"$option":"option","cases":{"declaration":{"matches":"exported"}},"default":{"all":[{"not":{"matches":"export-default"}},{"$option":"overrides.namedExports","cases":{"declaration":[{"not":{"matches":"exported"}}],"ignore":[{"not":{"matches":"exported"}}]},"default":[],"spread":true}]}}]}},"default":[{"$option":"option","cases":{"declaration":{"matches":"exported"}},"default":{"all":[{"not":{"matches":"export-default"}},{"$option":"overrides.namedExports","cases":{"declaration":[{"not":{"matches":"exported"}}],"ignore":[{"not":{"matches":"exported"}}]},"default":[],"spread":true}]}}],"spread":true},{"$option":"overrides.namedExports","cases":{"expression":{"$option":"option","cases":{"expression":[{"all":[{"not":{"matches":"export-default"}},{"not":{"matches":"exported"}}]}]},"default":[]}},"default":[],"spread":true},{"$option":"overrides.namedExports","cases":{"expression":{"$option":"option","cases":{"expression":[{"matches":"exported"}]},"default":[]}},"default":[],"spread":true}]},{"has":{"kind":"identifier","pattern":"$N","stopBy":"neighbor"}},{"not":{"matches":"overloaded"}}]},"when":{"option":{"$option":"option","cases":{"declaration":{"$option":"overrides.namedExports","cases":{"expression":{"option":{"not":{"in":[]}}}},"default":{"option":{"in":[]}}}},"default":{"option":{"not":{"in":[]}}}}}}},"violation":{"anchor":"witness.span","code":"func-style","message":"Expected a function expression.","suppress":{"eslint":{"rules":["func-style"]},"oxlint":{"rules":["func-style"]}}}},{"id":"function-expression-declarator","forbid":{"ast":{"language":"typescript","utils":{"checked-fn":{"any":[{"kind":"parenthesized_expression","has":{"matches":"checked-fn","stopBy":"neighbor"}},{"kind":"function_expression"},{"kind":"generator_function"}]},"checked-arrow":{"any":[{"kind":"parenthesized_expression","has":{"matches":"checked-arrow","stopBy":"neighbor"}},{"kind":"arrow_function","not":{"has":{"stopBy":{"any":[{"kind":"function_declaration"},{"kind":"generator_function_declaration"},{"kind":"function_expression"},{"kind":"generator_function"},{"kind":"arrow_function"},{"kind":"method_definition"}]},"any":[{"kind":"this"},{"kind":"super"}]}}}]},"declarator-exported":{"inside":{"any":[{"kind":"lexical_declaration"},{"kind":"variable_declaration"}],"inside":{"kind":"export_statement","stopBy":"neighbor"},"stopBy":"neighbor"}}},"rule":{"kind":"variable_declarator","all":[{"$option":"allowArrowFunctions","cases":{"true":{"$option":"overrides.namedExports","cases":{"expression":[],"ignore":[]},"default":[{"any":[{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[]},"default":[{"$option":"overrides.namedExports","cases":{"expression":{"not":{"matches":"declarator-exported"}},"declaration":{"matches":"declarator-exported"},"ignore":{"not":{"matches":"declarator-exported"}}},"default":{"kind":"variable_declarator"}}]}},"default":[{"$option":"overrides.namedExports","cases":{"expression":{"not":{"matches":"declarator-exported"}},"declaration":{"matches":"declarator-exported"},"ignore":{"not":{"matches":"declarator-exported"}}},"default":{"kind":"variable_declarator"}}],"spread":true},{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[{"not":{"matches":"declarator-exported"}}]},"default":[]}},"default":[],"spread":true},{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[{"matches":"declarator-exported"}]},"default":[]}},"default":[],"spread":true}]}]}},"default":[{"any":[{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[]},"default":[{"$option":"overrides.namedExports","cases":{"expression":{"not":{"matches":"declarator-exported"}},"declaration":{"matches":"declarator-exported"},"ignore":{"not":{"matches":"declarator-exported"}}},"default":{"kind":"variable_declarator"}}]}},"default":[{"$option":"overrides.namedExports","cases":{"expression":{"not":{"matches":"declarator-exported"}},"declaration":{"matches":"declarator-exported"},"ignore":{"not":{"matches":"declarator-exported"}}},"default":{"kind":"variable_declarator"}}],"spread":true},{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[{"not":{"matches":"declarator-exported"}}]},"default":[]}},"default":[],"spread":true},{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[{"matches":"declarator-exported"}]},"default":[]}},"default":[],"spread":true}]}],"spread":true},{"$option":"allowArrowFunctions","cases":{"true":{"$option":"overrides.namedExports","cases":{"expression":[],"ignore":[]},"default":[{"has":{"any":[{"matches":"checked-fn"},{"$option":"allowArrowFunctions","cases":{"true":[]},"default":[{"matches":"checked-arrow"}],"spread":true}],"stopBy":"neighbor"}}]}},"default":[{"has":{"any":[{"matches":"checked-fn"},{"$option":"allowArrowFunctions","cases":{"true":[]},"default":[{"matches":"checked-arrow"}],"spread":true}],"stopBy":"neighbor"}}],"spread":true},{"$option":"allowTypeAnnotation","cases":{"true":[{"not":{"has":{"kind":"type_annotation","stopBy":"neighbor"}}}]},"default":[],"spread":true},{"$option":"allowArrowFunctions","cases":{"true":{"$option":"overrides.namedExports","cases":{"expression":[{"any":[{"not":{"matches":"declarator-exported"}}]}],"ignore":[{"any":[{"not":{"matches":"declarator-exported"}}]}]},"default":[]}},"default":[],"spread":true},{"$option":"allowArrowFunctions","cases":{"true":{"$option":"overrides.namedExports","cases":{"expression":[{"has":{"any":[{"matches":"checked-fn"}],"stopBy":"neighbor"}}],"ignore":[{"has":{"any":[{"matches":"checked-fn"}],"stopBy":"neighbor"}}]},"default":[]}},"default":[],"spread":true}]},"when":{"option":{"$option":"overrides.namedExports","cases":{"declaration":{"option":{"not":{"in":[]}}}},"default":{"$option":"option","cases":{"declaration":{"option":{"not":{"in":[]}}}},"default":{"option":{"in":[]}}}}}}},"violation":{"anchor":"witness.span","code":"func-style","message":"Expected a function declaration.","suppress":{"eslint":{"rules":["func-style"]},"oxlint":{"rules":["func-style"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-func-style","revision":3,"mode":"steer","description":"Use function expressions assigned to variables instead of function declarations, except for default exports and TypeScript overloads.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"option":{"type":"string","nullable":true,"default":null},"overrides.namedExports":{"type":"string","nullable":true,"default":null},"allowArrowFunctions":{"type":"boolean","nullable":true,"default":null},"allowTypeAnnotation":{"type":"boolean","nullable":true,"default":null}}}},{"id":"function-declaration","forbid":{"ast":{"language":"typescript","utils":{"fn-decl":{"any":[{"kind":"function_declaration"},{"kind":"generator_function_declaration"}]},"export-default":{"inside":{"kind":"export_statement","has":{"regex":"^default$","stopBy":"neighbor"},"stopBy":"neighbor"}},"signature-n":{"kind":"function_signature","has":{"kind":"identifier","pattern":"$N","stopBy":"neighbor"}},"overloaded":{"any":[{"precedes":{"stopBy":"end","matches":"signature-n"}},{"follows":{"stopBy":"end","matches":"signature-n"}},{"inside":{"kind":"export_statement","any":[{"precedes":{"stopBy":"end","kind":"export_statement","has":{"matches":"signature-n","stopBy":"neighbor"}}},{"follows":{"stopBy":"end","kind":"export_statement","has":{"matches":"signature-n","stopBy":"neighbor"}}}],"stopBy":"neighbor"}},{"inside":{"kind":"switch_case","inside":{"kind":"switch_body","has":{"kind":"switch_case","has":{"matches":"signature-n","stopBy":"neighbor"},"stopBy":"neighbor"},"stopBy":"neighbor"},"stopBy":"neighbor"}}]},"exported":{"inside":{"kind":"export_statement","stopBy":"neighbor"}}},"rule":{"matches":"fn-decl","all":[{"any":[{"$option":"overrides.namedExports","cases":{"expression":{"$option":"option","cases":{"expression":[]},"default":[{"$option":"option","cases":{"declaration":{"matches":"exported"}},"default":{"all":[{"not":{"matches":"export-default"}},{"$option":"overrides.namedExports","cases":{"declaration":[{"not":{"matches":"exported"}}],"ignore":[{"not":{"matches":"exported"}}]},"default":[],"spread":true}]}}]}},"default":[{"$option":"option","cases":{"declaration":{"matches":"exported"}},"default":{"all":[{"not":{"matches":"export-default"}},{"$option":"overrides.namedExports","cases":{"declaration":[{"not":{"matches":"exported"}}],"ignore":[{"not":{"matches":"exported"}}]},"default":[],"spread":true}]}}],"spread":true},{"$option":"overrides.namedExports","cases":{"expression":{"$option":"option","cases":{"expression":[{"all":[{"not":{"matches":"export-default"}},{"not":{"matches":"exported"}}]}]},"default":[]}},"default":[],"spread":true},{"$option":"overrides.namedExports","cases":{"expression":{"$option":"option","cases":{"expression":[{"matches":"exported"}]},"default":[]}},"default":[],"spread":true}]},{"has":{"kind":"identifier","pattern":"$N","stopBy":"neighbor"}},{"not":{"matches":"overloaded"}}]},"when":{"option":{"$option":"option","cases":{"declaration":{"$option":"overrides.namedExports","cases":{"expression":{"option":{"not":{"in":[]}}}},"default":{"option":{"in":[]}}}},"default":{"option":{"not":{"in":[]}}}}}}},"violation":{"anchor":"witness.span","code":"func-style","message":"Expected a function expression.","suppress":{"eslint":{"rules":["func-style"]},"oxlint":{"rules":["func-style"]}}}},{"id":"function-expression-declarator","forbid":{"ast":{"language":"typescript","utils":{"checked-fn":{"any":[{"kind":"parenthesized_expression","has":{"matches":"checked-fn","stopBy":"neighbor"}},{"kind":"function_expression"},{"kind":"generator_function"}]},"checked-arrow":{"any":[{"kind":"parenthesized_expression","has":{"matches":"checked-arrow","stopBy":"neighbor"}},{"kind":"arrow_function","not":{"has":{"stopBy":{"any":[{"kind":"function_declaration"},{"kind":"generator_function_declaration"},{"kind":"function_expression"},{"kind":"generator_function"},{"kind":"arrow_function"},{"kind":"method_definition"}]},"any":[{"kind":"this"},{"kind":"super"}]}}}]},"declarator-exported":{"inside":{"any":[{"kind":"lexical_declaration"},{"kind":"variable_declaration"}],"inside":{"kind":"export_statement","stopBy":"neighbor"},"stopBy":"neighbor"}}},"rule":{"kind":"variable_declarator","all":[{"$option":"allowArrowFunctions","cases":{"true":{"$option":"overrides.namedExports","cases":{"expression":[],"ignore":[]},"default":[{"any":[{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[]},"default":[{"$option":"overrides.namedExports","cases":{"expression":{"not":{"matches":"declarator-exported"}},"declaration":{"matches":"declarator-exported"},"ignore":{"not":{"matches":"declarator-exported"}}},"default":{"kind":"variable_declarator"}}]}},"default":[{"$option":"overrides.namedExports","cases":{"expression":{"not":{"matches":"declarator-exported"}},"declaration":{"matches":"declarator-exported"},"ignore":{"not":{"matches":"declarator-exported"}}},"default":{"kind":"variable_declarator"}}],"spread":true},{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[{"not":{"matches":"declarator-exported"}}]},"default":[]}},"default":[],"spread":true},{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[{"matches":"declarator-exported"}]},"default":[]}},"default":[],"spread":true}]}]}},"default":[{"any":[{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[]},"default":[{"$option":"overrides.namedExports","cases":{"expression":{"not":{"matches":"declarator-exported"}},"declaration":{"matches":"declarator-exported"},"ignore":{"not":{"matches":"declarator-exported"}}},"default":{"kind":"variable_declarator"}}]}},"default":[{"$option":"overrides.namedExports","cases":{"expression":{"not":{"matches":"declarator-exported"}},"declaration":{"matches":"declarator-exported"},"ignore":{"not":{"matches":"declarator-exported"}}},"default":{"kind":"variable_declarator"}}],"spread":true},{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[{"not":{"matches":"declarator-exported"}}]},"default":[]}},"default":[],"spread":true},{"$option":"overrides.namedExports","cases":{"declaration":{"$option":"option","cases":{"declaration":[{"matches":"declarator-exported"}]},"default":[]}},"default":[],"spread":true}]}],"spread":true},{"$option":"allowArrowFunctions","cases":{"true":{"$option":"overrides.namedExports","cases":{"expression":[],"ignore":[]},"default":[{"has":{"any":[{"matches":"checked-fn"},{"$option":"allowArrowFunctions","cases":{"true":[]},"default":[{"matches":"checked-arrow"}],"spread":true}],"stopBy":"neighbor"}}]}},"default":[{"has":{"any":[{"matches":"checked-fn"},{"$option":"allowArrowFunctions","cases":{"true":[]},"default":[{"matches":"checked-arrow"}],"spread":true}],"stopBy":"neighbor"}}],"spread":true},{"$option":"allowTypeAnnotation","cases":{"true":[{"not":{"has":{"kind":"type_annotation","stopBy":"neighbor"}}}]},"default":[],"spread":true},{"$option":"allowArrowFunctions","cases":{"true":{"$option":"overrides.namedExports","cases":{"expression":[{"any":[{"not":{"matches":"declarator-exported"}}]}],"ignore":[{"any":[{"not":{"matches":"declarator-exported"}}]}]},"default":[]}},"default":[],"spread":true},{"$option":"allowArrowFunctions","cases":{"true":{"$option":"overrides.namedExports","cases":{"expression":[{"has":{"any":[{"matches":"checked-fn"}],"stopBy":"neighbor"}}],"ignore":[{"has":{"any":[{"matches":"checked-fn"}],"stopBy":"neighbor"}}]},"default":[]}},"default":[],"spread":true}]},"when":{"option":{"$option":"overrides.namedExports","cases":{"declaration":{"option":{"not":{"in":[]}}}},"default":{"$option":"option","cases":{"declaration":{"option":{"not":{"in":[]}}}},"default":{"option":{"in":[]}}}}}}},"violation":{"anchor":"witness.span","code":"func-style","message":"Expected a function declaration.","suppress":{"eslint":{"rules":["func-style"]},"oxlint":{"rules":["func-style"]}}}}]}
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-guard-for-in",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `guard-for-in` rule (https://eslint.org/docs/latest/rules/guard-for-in). A for-in body must be empty, an if statement, or a block whose first statement is an if that is either the only statement or whose consequent is `continue` / `{ continue; }`.",
6
+ "description": "Guard the body of every for-in loop with an if check; for-in also iterates inherited properties from the prototype chain.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-bitwise","revision":4,"mode":"steer","description":"Port of ESLint's `no-bitwise` rule (https://eslint.org/docs/latest/rules/no-bitwise). Flags bitwise operators in binary, unary and compound-assignment expressions. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allow":{"type":"array","items":"string","nullable":true,"default":null},"int32Hint":{"type":"boolean","nullable":true,"default":null}}}},{"id":"bitwise-operator","forbid":{"ast":{"language":"typescript","rule":{"$option":"int32Hint","cases":{"true":{"all":[{"any":[{"kind":"binary_expression"},{"kind":"augmented_assignment_expression"},{"kind":"unary_expression"}],"has":{"pattern":"$$OP","regex":"^(\\^|\\||\\&|<<|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=|\\~)$","stopBy":"neighbor"}},{"not":{"all":[{"kind":"binary_expression"},{"has":{"regex":"^\\|$","stopBy":"neighbor"}},{"has":{"kind":"number","regex":"^(0[xXoObB])?0*(\\.0*)?([eE][+-]?[0-9]+)?$","stopBy":"neighbor","not":{"precedes":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}]}}]}},"default":{"any":[{"kind":"binary_expression"},{"kind":"augmented_assignment_expression"},{"kind":"unary_expression"}],"has":{"pattern":"$$OP","regex":{"$option":"allow","cases":{"[\"~\"]":"^(\\^|\\||\\&|<<|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=)$","[\"~\",\"<<\"]":"^(\\^|\\||\\&|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=)$","[\"|\"]":"^(\\^|\\&|<<|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=|\\~)$"},"default":"^(\\^|\\||\\&|<<|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=|\\~)$"},"stopBy":"neighbor"}}}}},"violation":{"anchor":"witness.span","code":"no-bitwise","message":"Unexpected use of '$OP'.","suppress":{"eslint":{"rules":["no-bitwise"]},"oxlint":{"rules":["no-bitwise"]},"biome":{"rules":["lint/suspicious/noBitwiseOperators"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-bitwise","revision":4,"mode":"steer","description":"Avoid bitwise operators; they are rare in application code and usually a typo for a logical operator.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allow":{"type":"array","items":"string","nullable":true,"default":null},"int32Hint":{"type":"boolean","nullable":true,"default":null}}}},{"id":"bitwise-operator","forbid":{"ast":{"language":"typescript","rule":{"$option":"int32Hint","cases":{"true":{"all":[{"any":[{"kind":"binary_expression"},{"kind":"augmented_assignment_expression"},{"kind":"unary_expression"}],"has":{"pattern":"$$OP","regex":"^(\\^|\\||\\&|<<|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=|\\~)$","stopBy":"neighbor"}},{"not":{"all":[{"kind":"binary_expression"},{"has":{"regex":"^\\|$","stopBy":"neighbor"}},{"has":{"kind":"number","regex":"^(0[xXoObB])?0*(\\.0*)?([eE][+-]?[0-9]+)?$","stopBy":"neighbor","not":{"precedes":{"regex":"[\\s\\S]","stopBy":"neighbor"}}}}]}}]}},"default":{"any":[{"kind":"binary_expression"},{"kind":"augmented_assignment_expression"},{"kind":"unary_expression"}],"has":{"pattern":"$$OP","regex":{"$option":"allow","cases":{"[\"~\"]":"^(\\^|\\||\\&|<<|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=)$","[\"~\",\"<<\"]":"^(\\^|\\||\\&|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=)$","[\"|\"]":"^(\\^|\\&|<<|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=|\\~)$"},"default":"^(\\^|\\||\\&|<<|>>|>>>|\\^=|\\|=|\\&=|<<=|>>=|>>>=|\\~)$"},"stopBy":"neighbor"}}}}},"violation":{"anchor":"witness.span","code":"no-bitwise","message":"Replace '$OP' with the logical or arithmetic operator you meant.","suppress":{"eslint":{"rules":["no-bitwise"]},"oxlint":{"rules":["no-bitwise"]},"biome":{"rules":["lint/suspicious/noBitwiseOperators"]}}}}]}
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-caller",
4
4
  "revision": 2,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-caller` rule (https://eslint.org/docs/latest/rules/no-caller). Reports `arguments.callee` and `arguments.caller` (object through parentheses).",
6
+ "description": "Don't use arguments.callee or arguments.caller; they are deprecated and throw in strict mode.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -44,7 +44,7 @@
44
44
  "violation": {
45
45
  "anchor": "witness.span",
46
46
  "code": "no-caller",
47
- "message": "Avoid arguments.$PROP.",
47
+ "message": "Replace arguments.$PROP with a reference to the function by name or an explicit parameter.",
48
48
  "suppress": {
49
49
  "eslint": {
50
50
  "rules": [
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-case-declarations",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-case-declarations` rule (https://eslint.org/docs/latest/rules/no-case-declarations). Flags a let/const, function or class declaration that is a direct statement of a `case` or `default` clause. `using` declarations, which tree-sitter-typescript 0.23.2 parses as assignments with a `using` token, count as lexical declarations.",
6
+ "description": "Wrap let, const, function and class declarations inside a switch case in braces; otherwise they leak into the whole switch.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -77,7 +77,7 @@
77
77
  "violation": {
78
78
  "anchor": "witness.span",
79
79
  "code": "no-case-declarations",
80
- "message": "Unexpected lexical declaration in case block.",
80
+ "message": "Wrap this case's body in braces so the declaration stays scoped to it.",
81
81
  "suppress": {
82
82
  "eslint": {
83
83
  "rules": [
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-compare-neg-zero",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "ESLint 10.11.0 no-compare-neg-zero, default options. Port of ESLint's `no-compare-neg-zero` rule (https://eslint.org/docs/latest/rules/no-compare-neg-zero). Flags a comparison with `-0` (a unary minus applied to a numeric literal whose value is 0). Scope only matters to ESLint's Object.is suggestion, which is not a fix.",
6
+ "description": "Don't compare against -0 with equality or relational operators; they treat -0 and 0 as equal, so use Object.is instead.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.ts",
@@ -85,7 +85,7 @@
85
85
  "violation": {
86
86
  "anchor": "witness.span",
87
87
  "code": "no-compare-neg-zero",
88
- "message": "Do not use the '$$OP' operator to compare against -0.",
88
+ "message": "Replace this '$$OP' comparison with Object.is(value, -0), or compare against 0.",
89
89
  "suppress": {
90
90
  "eslint": {
91
91
  "rules": [