@neralabs/rerail-pack-javascript 0.1.3 → 0.1.5

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 (75) hide show
  1. package/README.md +412 -4
  2. package/licenses/eslint/UPSTREAM.md +5 -5
  3. package/licenses/eslint-plugin-unicorn/UPSTREAM.md +5 -5
  4. package/package.json +1 -1
  5. package/rules/eslint-arrow-body-style.json +1 -1
  6. package/rules/eslint-capitalized-comments.json +1 -1
  7. package/rules/eslint-curly.json +1 -1
  8. package/rules/eslint-default-case-last.json +1 -1
  9. package/rules/eslint-default-case.json +1 -1
  10. package/rules/eslint-eqeqeq.json +1 -1
  11. package/rules/eslint-func-style.json +1 -1
  12. package/rules/eslint-guard-for-in.json +1 -1
  13. package/rules/eslint-no-bitwise.json +1 -1
  14. package/rules/eslint-no-caller.json +2 -2
  15. package/rules/eslint-no-case-declarations.json +2 -2
  16. package/rules/eslint-no-compare-neg-zero.json +2 -2
  17. package/rules/eslint-no-cond-assign.json +1 -1
  18. package/rules/eslint-no-console.json +1 -1
  19. package/rules/eslint-no-continue.json +2 -2
  20. package/rules/eslint-no-debugger.json +1 -1
  21. package/rules/eslint-no-delete-var.json +2 -2
  22. package/rules/eslint-no-div-regex.json +1 -1
  23. package/rules/eslint-no-dupe-keys.json +2 -2
  24. package/rules/eslint-no-duplicate-case.json +2 -2
  25. package/rules/eslint-no-empty-pattern.json +1 -1
  26. package/rules/eslint-no-empty-static-block.json +2 -2
  27. package/rules/eslint-no-empty.json +2 -2
  28. package/rules/eslint-no-eq-null.json +1 -1
  29. package/rules/eslint-no-extend-native.json +1 -1
  30. package/rules/eslint-no-inline-comments.json +1 -1
  31. package/rules/eslint-no-iterator.json +1 -1
  32. package/rules/eslint-no-labels.json +1 -1
  33. package/rules/eslint-no-loss-of-precision.json +1 -1
  34. package/rules/eslint-no-multi-str.json +2 -2
  35. package/rules/eslint-no-negated-condition.json +2 -2
  36. package/rules/eslint-no-nested-ternary.json +1 -1
  37. package/rules/eslint-no-new-wrappers.json +1 -1
  38. package/rules/eslint-no-new.json +2 -2
  39. package/rules/eslint-no-nonoctal-decimal-escape.json +2 -2
  40. package/rules/eslint-no-object-constructor.json +1 -1
  41. package/rules/eslint-no-octal-escape.json +1 -1
  42. package/rules/eslint-no-octal.json +2 -2
  43. package/rules/eslint-no-plusplus.json +1 -1
  44. package/rules/eslint-no-proto.json +1 -1
  45. package/rules/eslint-no-prototype-builtins.json +3 -3
  46. package/rules/eslint-no-return-assign.json +1 -1
  47. package/rules/eslint-no-script-url.json +1 -1
  48. package/rules/eslint-no-self-compare.json +2 -2
  49. package/rules/eslint-no-sequences.json +1 -1
  50. package/rules/eslint-no-setter-return.json +1 -1
  51. package/rules/eslint-no-sparse-arrays.json +1 -1
  52. package/rules/eslint-no-template-curly-in-string.json +2 -2
  53. package/rules/eslint-no-ternary.json +1 -1
  54. package/rules/eslint-no-unneeded-ternary.json +1 -1
  55. package/rules/eslint-no-unsafe-finally.json +7 -7
  56. package/rules/eslint-no-unsafe-negation.json +1 -1
  57. package/rules/eslint-no-unused-labels.json +1 -1
  58. package/rules/eslint-no-unused-private-class-members.json +1 -1
  59. package/rules/eslint-no-useless-call.json +1 -1
  60. package/rules/eslint-no-useless-catch.json +1 -1
  61. package/rules/eslint-no-useless-concat.json +1 -1
  62. package/rules/eslint-no-void.json +1 -1
  63. package/rules/eslint-no-warning-comments.json +1 -1
  64. package/rules/eslint-no-with.json +2 -2
  65. package/rules/eslint-operator-assignment.json +1 -1
  66. package/rules/eslint-prefer-numeric-literals.json +1 -1
  67. package/rules/eslint-prefer-spread.json +1 -1
  68. package/rules/eslint-prefer-template.json +2 -2
  69. package/rules/eslint-radix.json +2 -2
  70. package/rules/eslint-sort-imports.json +1 -1
  71. package/rules/eslint-sort-keys.json +1 -1
  72. package/rules/eslint-sort-vars.json +1 -1
  73. package/rules/eslint-use-isnan.json +3 -3
  74. package/rules/eslint-valid-typeof.json +1 -1
  75. package/rules/eslint-yoda.json +1 -1
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-console","revision":4,"mode":"steer","description":"Port of ESLint's `no-console` rule (https://eslint.org/docs/latest/rules/no-console). Flags member access on the global `console` (resolved with `resolves`), reported at the member expression. Default options: allow []. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allow":{"type":"array","items":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"kind":"template_string","not":{"has":{"kind":"template_substitution"}}}}}},{"id":"console","forbid":{"ast":{"language":"typescript","rule":{"all":[{"any":[{"kind":"member_expression"},{"kind":"subscript_expression"}]},{"has":{"all":[{"any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["console"]}},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}},{"$option":"allow","cases":{"[\"warn\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"error\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"log\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"warn\",\"error\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"warn\",\"info\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"info\",\"log\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"info\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"error\",\"warn\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"log\",\"error\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"info\",\"log\",\"warn\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"warn\",\"info\",\"log\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"warn\",\"error\",\"log\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"log\",\"error\",\"warn\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}]},"default":[],"spread":true}]}}},"violation":{"anchor":"witness.span","code":"no-console","message":{"$option":"allow","cases":{"[\"warn\"]":"Unexpected console statement. Only these console methods are allowed: warn.","[\"error\"]":"Unexpected console statement. Only these console methods are allowed: error.","[\"log\"]":"Unexpected console statement. Only these console methods are allowed: log.","[\"warn\",\"error\"]":"Unexpected console statement. Only these console methods are allowed: warn, error.","[\"warn\",\"info\"]":"Unexpected console statement. Only these console methods are allowed: warn, info.","[\"info\",\"log\"]":"Unexpected console statement. Only these console methods are allowed: info, log.","[\"info\"]":"Unexpected console statement. Only these console methods are allowed: info.","[\"error\",\"warn\"]":"Unexpected console statement. Only these console methods are allowed: error, warn.","[\"log\",\"error\"]":"Unexpected console statement. Only these console methods are allowed: log, error.","[\"info\",\"log\",\"warn\"]":"Unexpected console statement. Only these console methods are allowed: info, log, warn.","[\"warn\",\"info\",\"log\"]":"Unexpected console statement. Only these console methods are allowed: warn, info, log.","[\"warn\",\"error\",\"log\"]":"Unexpected console statement. Only these console methods are allowed: warn, error, log.","[\"log\",\"error\",\"warn\"]":"Unexpected console statement. Only these console methods are allowed: log, error, warn."},"default":"Unexpected console statement."},"suppress":{"eslint":{"rules":["no-console"]},"oxlint":{"rules":["no-console"]},"biome":{"rules":["lint/suspicious/noConsole"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-console","revision":4,"mode":"steer","description":"Remove console calls; use a proper logger instead of leaving debug output in the code.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allow":{"type":"array","items":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"kind":"template_string","not":{"has":{"kind":"template_substitution"}}}}}},{"id":"console","forbid":{"ast":{"language":"typescript","rule":{"all":[{"any":[{"kind":"member_expression"},{"kind":"subscript_expression"}]},{"has":{"all":[{"any":[{"kind":"identifier"},{"kind":"parenthesized_expression"}],"resolves":{"global":["console"]}},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}},{"$option":"allow","cases":{"[\"warn\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"error\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"log\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"warn\",\"error\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"warn\",\"info\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"info\",\"log\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"info\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"error\",\"warn\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"log\",\"error\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"info\",\"log\",\"warn\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"warn\",\"info\",\"log\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"warn\",\"error\",\"log\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}],"[\"log\",\"error\",\"warn\"]":[{"not":{"has":{"any":[{"kind":"property_identifier","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}},{"any":[{"kind":"string"},{"matches":"r1"}],"has":{"kind":"string_fragment","regex":{"$option":"allow","cases":{"null":"^(warn)$"},"default":{"$option":"allow","join":"|","template":"^({})$"}}}}]}}}]},"default":[],"spread":true}]}}},"violation":{"anchor":"witness.span","code":"no-console","message":{"$option":"allow","cases":{"[\"warn\"]":"Unexpected console statement. Only these console methods are allowed: warn.","[\"error\"]":"Unexpected console statement. Only these console methods are allowed: error.","[\"log\"]":"Unexpected console statement. Only these console methods are allowed: log.","[\"warn\",\"error\"]":"Unexpected console statement. Only these console methods are allowed: warn, error.","[\"warn\",\"info\"]":"Unexpected console statement. Only these console methods are allowed: warn, info.","[\"info\",\"log\"]":"Unexpected console statement. Only these console methods are allowed: info, log.","[\"info\"]":"Unexpected console statement. Only these console methods are allowed: info.","[\"error\",\"warn\"]":"Unexpected console statement. Only these console methods are allowed: error, warn.","[\"log\",\"error\"]":"Unexpected console statement. Only these console methods are allowed: log, error.","[\"info\",\"log\",\"warn\"]":"Unexpected console statement. Only these console methods are allowed: info, log, warn.","[\"warn\",\"info\",\"log\"]":"Unexpected console statement. Only these console methods are allowed: warn, info, log.","[\"warn\",\"error\",\"log\"]":"Unexpected console statement. Only these console methods are allowed: warn, error, log.","[\"log\",\"error\",\"warn\"]":"Unexpected console statement. Only these console methods are allowed: log, error, warn."},"default":"Unexpected console statement."},"suppress":{"eslint":{"rules":["no-console"]},"oxlint":{"rules":["no-console"]},"biome":{"rules":["lint/suspicious/noConsole"]}}}}]}
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-continue",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-continue` rule (https://eslint.org/docs/latest/rules/no-continue). Reports every `continue` statement.",
6
+ "description": "Avoid continue statements in loops; restructure the loop with a condition instead.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -24,7 +24,7 @@
24
24
  "violation": {
25
25
  "anchor": "witness.span",
26
26
  "code": "no-continue",
27
- "message": "Unexpected use of continue statement.",
27
+ "message": "Replace this continue with an if that wraps the rest of the loop body.",
28
28
  "suppress": {
29
29
  "eslint": {
30
30
  "rules": [
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-debugger",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "ESLint 10.11.0 no-debugger, default options. Port of ESLint's `no-debugger` rule (https://eslint.org/docs/latest/rules/no-debugger). Reports every `debugger` statement.",
6
+ "description": "Remove debugger statements; they pause execution whenever developer tools are open.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.ts",
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-delete-var",
4
4
  "revision": 2,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-delete-var` rule (https://eslint.org/docs/latest/rules/no-delete-var). Reports `delete` applied to a bare identifier (through parentheses).",
6
+ "description": "Don't use delete on a plain variable; delete only removes object properties and is a syntax error on variables 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-delete-var",
47
- "message": "Variables should not be deleted.",
47
+ "message": "Remove this delete; to clear the variable, assign undefined to it instead.",
48
48
  "suppress": {
49
49
  "eslint": {
50
50
  "rules": [
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-div-regex","revision":4,"mode":"steer","description":"Port of ESLint's `no-div-regex` rule (https://eslint.org/docs/latest/rules/no-div-regex). Reports a regular expression literal whose pattern starts with `=`. Fixes as ESLint does, replacing the pattern's first `=` with `[=]` (M12b `fix.range` over a regex group).","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"leading-equals-regex","forbid":{"ast":{"language":"typescript","rule":{"kind":"regex","regex":"^/(?<EQ>=)"}}},"violation":{"anchor":"witness.span","code":"no-div-regex","message":"A regular expression literal can be confused with '/='.","fix":{"template":"[=]","range":"capture.EQ"},"suppress":{"eslint":{"rules":["no-div-regex"]},"oxlint":{"rules":["no-div-regex"]},"biome":{"rules":["lint/complexity/noDivRegex"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-div-regex","revision":4,"mode":"steer","description":"Avoid starting a regular expression literal with an equals sign; it reads like the division-assignment operator.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"leading-equals-regex","forbid":{"ast":{"language":"typescript","rule":{"kind":"regex","regex":"^/(?<EQ>=)"}}},"violation":{"anchor":"witness.span","code":"no-div-regex","message":"Write the leading '=' as '[=]' so this regex literal can't be misread as the '/=' operator.","fix":{"template":"[=]","range":"capture.EQ"},"suppress":{"eslint":{"rules":["no-div-regex"]},"oxlint":{"rules":["no-div-regex"]},"biome":{"rules":["lint/complexity/noDivRegex"]}}}}]}
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-dupe-keys",
4
4
  "revision": 7,
5
5
  "mode": "steer",
6
- "description": "ESLint 10.11.0 no-dupe-keys, default options. Port of ESLint's `no-dupe-keys` rule (https://eslint.org/docs/latest/rules/no-dupe-keys). Flags an object-literal property whose static key (ESLint's getStaticPropertyName, via `compare` text `key`) repeats an earlier property of the same object; a getter may pair with a setter, and a non-computed `__proto__: value` is not a key.",
6
+ "description": "Don't repeat a key in a JavaScript object literal; the later value silently overwrites the earlier one.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.js",
@@ -267,7 +267,7 @@
267
267
  "violation": {
268
268
  "anchor": "capture.K",
269
269
  "code": "no-dupe-keys",
270
- "message": "Duplicate key '$KT'.",
270
+ "message": "Remove or rename one of the duplicate '$KT' keys; the later value silently overwrites the earlier one.",
271
271
  "suppress": {
272
272
  "eslint": {
273
273
  "rules": [
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-duplicate-case",
4
4
  "revision": 4,
5
5
  "mode": "steer",
6
- "description": "ESLint 10.11.0 no-duplicate-case, default options. Port of ESLint's `no-duplicate-case` rule (https://eslint.org/docs/latest/rules/no-duplicate-case). Reports a case whose test (inside any parentheses) is token-equal (ESLint's equalTokens, via `compare` text `tokens`) to an earlier case of the same switch.",
6
+ "description": "Don't repeat the same case test in a switch statement; the duplicate case can never be reached.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.ts",
@@ -136,7 +136,7 @@
136
136
  "violation": {
137
137
  "anchor": "witness.span",
138
138
  "code": "no-duplicate-case",
139
- "message": "Duplicate case label.",
139
+ "message": "Remove this case or change its test; an earlier case with the same test always matches first.",
140
140
  "suppress": {
141
141
  "eslint": {
142
142
  "rules": [
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-empty-pattern","revision":4,"mode":"steer","description":"Port of ESLint's `no-empty-pattern` rule (https://eslint.org/docs/latest/rules/no-empty-pattern). Flags empty object and array destructuring patterns. 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":{"allowObjectPatternsAsParameters":{"type":"boolean","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"has":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^[{}]$"}}]}},"r2":{"kind":"object_pattern","not":{"matches":"r1"}}}}},{"id":"empty-object-pattern","forbid":{"ast":{"language":"typescript","rule":{"$option":"allowObjectPatternsAsParameters","cases":{"true":{"all":[{"matches":"r2"},{"not":{"inside":{"stopBy":"neighbor","all":[{"any":[{"kind":"required_parameter"},{"kind":"optional_parameter"}]},{"any":[{"not":{"has":{"regex":"^=$"}}},{"has":{"kind":"object","not":{"matches":"r1"}}}]}]}}}]}},"default":{"matches":"r2"}}}},"violation":{"anchor":"witness.span","code":"no-empty-pattern","message":"Unexpected empty object pattern.","suppress":{"eslint":{"rules":["no-empty-pattern"]},"oxlint":{"rules":["no-empty-pattern"]},"biome":{"rules":["lint/correctness/noEmptyPattern"]}}}},{"id":"empty-array-pattern","forbid":{"ast":{"language":"typescript","rule":{"kind":"array_pattern","not":{"has":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^[\\[\\]]$"}}]}}}}},"violation":{"anchor":"witness.span","code":"no-empty-pattern","message":"Unexpected empty array pattern.","suppress":{"eslint":{"rules":["no-empty-pattern"]},"oxlint":{"rules":["no-empty-pattern"]},"biome":{"rules":["lint/correctness/noEmptyPattern"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-empty-pattern","revision":4,"mode":"steer","description":"Avoid empty object and array destructuring patterns; they bind nothing and usually mean a default value was intended.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allowObjectPatternsAsParameters":{"type":"boolean","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"has":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^[{}]$"}}]}},"r2":{"kind":"object_pattern","not":{"matches":"r1"}}}}},{"id":"empty-object-pattern","forbid":{"ast":{"language":"typescript","rule":{"$option":"allowObjectPatternsAsParameters","cases":{"true":{"all":[{"matches":"r2"},{"not":{"inside":{"stopBy":"neighbor","all":[{"any":[{"kind":"required_parameter"},{"kind":"optional_parameter"}]},{"any":[{"not":{"has":{"regex":"^=$"}}},{"has":{"kind":"object","not":{"matches":"r1"}}}]}]}}}]}},"default":{"matches":"r2"}}}},"violation":{"anchor":"witness.span","code":"no-empty-pattern","message":"Replace this empty object pattern with a binding or a default value, e.g. {a = {}} instead of {a: {}}.","suppress":{"eslint":{"rules":["no-empty-pattern"]},"oxlint":{"rules":["no-empty-pattern"]},"biome":{"rules":["lint/correctness/noEmptyPattern"]}}}},{"id":"empty-array-pattern","forbid":{"ast":{"language":"typescript","rule":{"kind":"array_pattern","not":{"has":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^[\\[\\]]$"}}]}}}}},"violation":{"anchor":"witness.span","code":"no-empty-pattern","message":"Replace this empty array pattern with a binding or a default value, e.g. {a = []} instead of {a: []}.","suppress":{"eslint":{"rules":["no-empty-pattern"]},"oxlint":{"rules":["no-empty-pattern"]},"biome":{"rules":["lint/correctness/noEmptyPattern"]}}}}]}
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-empty-static-block",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-empty-static-block` rule (https://eslint.org/docs/latest/rules/no-empty-static-block). Reports a class static block with no statements and no comment inside its braces (a trailing comment the grammar attaches after the closing brace does not count).",
6
+ "description": "Remove empty class static blocks, or add a comment explaining why one is empty.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -40,7 +40,7 @@
40
40
  "violation": {
41
41
  "anchor": "witness.span",
42
42
  "code": "no-empty-static-block",
43
- "message": "Unexpected empty static block.",
43
+ "message": "Remove this empty static block, or add a comment saying why it is empty.",
44
44
  "suppress": {
45
45
  "eslint": {
46
46
  "rules": [
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-empty",
4
4
  "revision": 4,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-empty` rule (https://eslint.org/docs/latest/rules/no-empty). Flags a block (not a function body, class static block or TS module body) or switch with no statements and no comment. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.",
6
+ "description": "Avoid empty blocks and switch statements in JavaScript; add the missing code or a comment explaining why it is empty.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.js",
@@ -119,7 +119,7 @@
119
119
  "violation": {
120
120
  "anchor": "witness.span",
121
121
  "code": "no-empty",
122
- "message": "Empty block statement.",
122
+ "message": "Add the missing code to this empty block, or add a comment saying why it is intentionally empty.",
123
123
  "suppress": {
124
124
  "eslint": {
125
125
  "rules": [
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-eq-null",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-eq-null` rule (https://eslint.org/docs/latest/rules/no-eq-null). Reports `==` and `!=` with a `null` operand (through parentheses).",
6
+ "description": "Use strict equality when comparing with null; loose equality also matches undefined.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-extend-native","revision":4,"mode":"steer","description":"Port of ESLint's `no-extend-native` rule (https://eslint.org/docs/latest/rules/no-extend-native). Flags assigning to a property of `<Builtin>.prototype`, or passing it to Object.defineProperty/defineProperties, for the ECMAScript builtins ESLint lists, of which the configured ecmaVersion and globals (`ast.languageOptions`) declare only some. The builtin must resolve to the global (resolved with `resolves`). Default options: exceptions []. 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":{"exceptions":{"type":"array","items":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"has":{"any":[{"kind":"string"},{"matches":"r2"}],"has":{"kind":"string_fragment","regex":"^prototype$"}}},"r2":{"kind":"template_string","not":{"has":{"kind":"template_substitution"}}},"r3":{"has":{"kind":"property_identifier","regex":"^prototype$"}}}}},{"id":"prototype-assignment","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"all":[{"any":[{"kind":"assignment_expression"},{"kind":"augmented_assignment_expression"}]},{"has":{"all":[{"not":{"follows":{"regex":"[\\s\\S]"}}},{"any":[{"kind":"member_expression"},{"kind":"subscript_expression"}]},{"has":{"all":[{"not":{"follows":{"regex":"[\\s\\S]"}}},{"matches":"prototype"}]}}]}}]},"utils":{"prototype":{"any":[{"any":[{"kind":"member_expression","all":[{"matches":"r3"},{"has":{"all":[{"matches":"builtin"},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}}]},{"kind":"subscript_expression","all":[{"matches":"r1"},{"has":{"all":[{"matches":"builtin"},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}}]}]},{"kind":"parenthesized_expression","has":{"matches":"prototype"}}]},"builtin":{"any":[{"kind":"identifier","pattern":"$G","resolves":{"global":["Array","Boolean","Date","Error","EvalError","Function","Infinity","Math","NaN","Number",{"$option":"exceptions","cases":{"[\"Object\"]":[]},"default":["Object"],"spread":true},"RangeError","ReferenceError","RegExp","String","SyntaxError","TypeError","URIError","JSON","ArrayBuffer","DataView","Float32Array","Float64Array","Int16Array","Int32Array","Int8Array","Intl","Map","Promise","Proxy","Reflect","Set","Symbol","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","WeakMap","WeakSet","Atomics","SharedArrayBuffer","BigInt","BigInt64Array","BigUint64Array","AggregateError","FinalizationRegistry","WeakRef","Float16Array","Iterator","AsyncDisposableStack","DisposableStack","SuppressedError","Temporal"],"directives":"eslint","scriptDeclarations":true}},{"kind":"parenthesized_expression","has":{"matches":"builtin"}}]}}}},"violation":{"anchor":"witness.span","code":"no-extend-native","message":"$G prototype is read only, properties should not be added.","suppress":{"eslint":{"rules":["no-extend-native"]},"oxlint":{"rules":["no-extend-native"]},"biome":{"rules":["lint/nursery/noExtendNative"]}}}},{"id":"define-property","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"kind":"call_expression","all":[{"has":{"matches":"define-property"}},{"has":{"kind":"arguments","has":{"all":[{"matches":"arg"},{"not":{"follows":{"regex":"^,$","stopBy":"end"}}},{"matches":"prototype"}]}}}]},"utils":{"prototype":{"any":[{"any":[{"kind":"member_expression","all":[{"matches":"r3"},{"has":{"all":[{"matches":"builtin"},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}}]},{"kind":"subscript_expression","all":[{"matches":"r1"},{"has":{"all":[{"matches":"builtin"},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}}]}]},{"kind":"parenthesized_expression","has":{"matches":"prototype"}}]},"define-property":{"any":[{"any":[{"kind":"member_expression","all":[{"has":{"kind":"property_identifier","regex":"^definePropert(?:y|ies)$"}},{"has":{"matches":"object-id"}}]},{"kind":"subscript_expression","all":[{"has":{"any":[{"kind":"string"},{"matches":"r2"}],"has":{"kind":"string_fragment","regex":"^definePropert(?:y|ies)$"}}},{"has":{"matches":"object-id"}}]}]},{"kind":"parenthesized_expression","has":{"matches":"define-property"}}]},"object-id":{"any":[{"kind":"identifier","regex":"^Object$"},{"kind":"parenthesized_expression","has":{"matches":"object-id"}}]},"arg":{"not":{"any":[{"regex":"^[(),]$"},{"kind":"comment"}]}},"builtin":{"any":[{"kind":"identifier","pattern":"$G","resolves":{"global":["Array","Boolean","Date","Error","EvalError","Function","Infinity","Math","NaN","Number",{"$option":"exceptions","cases":{"[\"Object\"]":[]},"default":["Object"],"spread":true},"RangeError","ReferenceError","RegExp","String","SyntaxError","TypeError","URIError","JSON","ArrayBuffer","DataView","Float32Array","Float64Array","Int16Array","Int32Array","Int8Array","Intl","Map","Promise","Proxy","Reflect","Set","Symbol","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","WeakMap","WeakSet","Atomics","SharedArrayBuffer","BigInt","BigInt64Array","BigUint64Array","AggregateError","FinalizationRegistry","WeakRef","Float16Array","Iterator","AsyncDisposableStack","DisposableStack","SuppressedError","Temporal"],"directives":"eslint","scriptDeclarations":true}},{"kind":"parenthesized_expression","has":{"matches":"builtin"}}]}}}},"violation":{"anchor":"witness.span","code":"no-extend-native","message":"$G prototype is read only, properties should not be added.","suppress":{"eslint":{"rules":["no-extend-native"]},"oxlint":{"rules":["no-extend-native"]},"biome":{"rules":["lint/nursery/noExtendNative"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-extend-native","revision":4,"mode":"steer","description":"Don't add properties to built-in prototypes such as Array or Object; it can clash with other code and future language features.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"exceptions":{"type":"array","items":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"has":{"any":[{"kind":"string"},{"matches":"r2"}],"has":{"kind":"string_fragment","regex":"^prototype$"}}},"r2":{"kind":"template_string","not":{"has":{"kind":"template_substitution"}}},"r3":{"has":{"kind":"property_identifier","regex":"^prototype$"}}}}},{"id":"prototype-assignment","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"all":[{"any":[{"kind":"assignment_expression"},{"kind":"augmented_assignment_expression"}]},{"has":{"all":[{"not":{"follows":{"regex":"[\\s\\S]"}}},{"any":[{"kind":"member_expression"},{"kind":"subscript_expression"}]},{"has":{"all":[{"not":{"follows":{"regex":"[\\s\\S]"}}},{"matches":"prototype"}]}}]}}]},"utils":{"prototype":{"any":[{"any":[{"kind":"member_expression","all":[{"matches":"r3"},{"has":{"all":[{"matches":"builtin"},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}}]},{"kind":"subscript_expression","all":[{"matches":"r1"},{"has":{"all":[{"matches":"builtin"},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}}]}]},{"kind":"parenthesized_expression","has":{"matches":"prototype"}}]},"builtin":{"any":[{"kind":"identifier","pattern":"$G","resolves":{"global":["Array","Boolean","Date","Error","EvalError","Function","Infinity","Math","NaN","Number",{"$option":"exceptions","cases":{"[\"Object\"]":[]},"default":["Object"],"spread":true},"RangeError","ReferenceError","RegExp","String","SyntaxError","TypeError","URIError","JSON","ArrayBuffer","DataView","Float32Array","Float64Array","Int16Array","Int32Array","Int8Array","Intl","Map","Promise","Proxy","Reflect","Set","Symbol","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","WeakMap","WeakSet","Atomics","SharedArrayBuffer","BigInt","BigInt64Array","BigUint64Array","AggregateError","FinalizationRegistry","WeakRef","Float16Array","Iterator","AsyncDisposableStack","DisposableStack","SuppressedError","Temporal"],"directives":"eslint","scriptDeclarations":true}},{"kind":"parenthesized_expression","has":{"matches":"builtin"}}]}}}},"violation":{"anchor":"witness.span","code":"no-extend-native","message":"Move this addition to $G.prototype into a standalone helper function or a subclass.","suppress":{"eslint":{"rules":["no-extend-native"]},"oxlint":{"rules":["no-extend-native"]},"biome":{"rules":["lint/nursery/noExtendNative"]}}}},{"id":"define-property","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"kind":"call_expression","all":[{"has":{"matches":"define-property"}},{"has":{"kind":"arguments","has":{"all":[{"matches":"arg"},{"not":{"follows":{"regex":"^,$","stopBy":"end"}}},{"matches":"prototype"}]}}}]},"utils":{"prototype":{"any":[{"any":[{"kind":"member_expression","all":[{"matches":"r3"},{"has":{"all":[{"matches":"builtin"},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}}]},{"kind":"subscript_expression","all":[{"matches":"r1"},{"has":{"all":[{"matches":"builtin"},{"not":{"follows":{"regex":"[\\s\\S]"}}}]}}]}]},{"kind":"parenthesized_expression","has":{"matches":"prototype"}}]},"define-property":{"any":[{"any":[{"kind":"member_expression","all":[{"has":{"kind":"property_identifier","regex":"^definePropert(?:y|ies)$"}},{"has":{"matches":"object-id"}}]},{"kind":"subscript_expression","all":[{"has":{"any":[{"kind":"string"},{"matches":"r2"}],"has":{"kind":"string_fragment","regex":"^definePropert(?:y|ies)$"}}},{"has":{"matches":"object-id"}}]}]},{"kind":"parenthesized_expression","has":{"matches":"define-property"}}]},"object-id":{"any":[{"kind":"identifier","regex":"^Object$"},{"kind":"parenthesized_expression","has":{"matches":"object-id"}}]},"arg":{"not":{"any":[{"regex":"^[(),]$"},{"kind":"comment"}]}},"builtin":{"any":[{"kind":"identifier","pattern":"$G","resolves":{"global":["Array","Boolean","Date","Error","EvalError","Function","Infinity","Math","NaN","Number",{"$option":"exceptions","cases":{"[\"Object\"]":[]},"default":["Object"],"spread":true},"RangeError","ReferenceError","RegExp","String","SyntaxError","TypeError","URIError","JSON","ArrayBuffer","DataView","Float32Array","Float64Array","Int16Array","Int32Array","Int8Array","Intl","Map","Promise","Proxy","Reflect","Set","Symbol","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","WeakMap","WeakSet","Atomics","SharedArrayBuffer","BigInt","BigInt64Array","BigUint64Array","AggregateError","FinalizationRegistry","WeakRef","Float16Array","Iterator","AsyncDisposableStack","DisposableStack","SuppressedError","Temporal"],"directives":"eslint","scriptDeclarations":true}},{"kind":"parenthesized_expression","has":{"matches":"builtin"}}]}}}},"violation":{"anchor":"witness.span","code":"no-extend-native","message":"Move this addition to $G.prototype into a standalone helper function or a subclass.","suppress":{"eslint":{"rules":["no-extend-native"]},"oxlint":{"rules":["no-extend-native"]},"biome":{"rules":["lint/nursery/noExtendNative"]}}}}]}
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-inline-comments","revision":4,"mode":"steer","description":"Port of ESLint's `no-inline-comments` rule (https://eslint.org/docs/latest/rules/no-inline-comments). A comment is reported when a token or comment ends on its start line before it or starts on its end line after it (`layout` gaps, comments included), except ESLint directive comments (isDirectiveComment's prefixes) and a comment alone in a JSX expression container whose line holds nothing but `{` before and `}` after it. 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":{"ignorePattern":{"type":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"any":[{"any":[{"regex":"^//[\\s\\x{FEFF}]*eslint-"},{"regex":"(?s)^/\\*[\\s\\x{FEFF}]*(?:eslint-|(?:eslint|globals?|exported) .*[^\\s\\x{FEFF}].*\\*/$)"}]},{"all":[{"inside":{"kind":"jsx_expression","not":{"has":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^[{}]$"}}]}},"stopBy":"neighbor"}},{"any":[{"not":{"matches":"r2"}},{"follows":{"not":{"matches":"r2"},"regex":"^\\{$","stopBy":"neighbor"}}]},{"any":[{"not":{"matches":"r3"}},{"precedes":{"not":{"matches":"r3"},"regex":"^\\}$","stopBy":"neighbor"}}]}]}]},"r2":{"layout":{"before":{"breaks":{"eq":0},"comments":true,"to":"token"}}},"r3":{"layout":{"after":{"breaks":{"eq":0},"comments":true,"to":"token"}}}}}},{"id":"inline-comment","forbid":{"ast":{"language":"typescript","rule":{"$option":"ignorePattern","cases":{"(?:webpackChunkName):\\s.+":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"},"all":[{"not":{"regex":{"$option":"ignorePattern","cases":{"null":"(?:webpackChunkName):\\s.+"},"default":{"$option":"ignorePattern"}}}}]},"Note: ":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"},"all":[{"not":{"regex":{"$option":"ignorePattern","cases":{"null":"(?:webpackChunkName):\\s.+"},"default":{"$option":"ignorePattern"}}}}]},"otherthing":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"},"all":[{"not":{"regex":{"$option":"ignorePattern","cases":{"null":"(?:webpackChunkName):\\s.+"},"default":{"$option":"ignorePattern"}}}}]},"something":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"},"all":[{"not":{"regex":{"$option":"ignorePattern","cases":{"null":"(?:webpackChunkName):\\s.+"},"default":{"$option":"ignorePattern"}}}}]}},"default":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"}}}}},"violation":{"anchor":"witness.span","code":"no-inline-comments","message":"Unexpected comment inline with code.","suppress":{"eslint":{"rules":["no-inline-comments"]},"oxlint":{"rules":["no-inline-comments"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-inline-comments","revision":4,"mode":"steer","description":"Put comments on their own line rather than on the same line as code.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"ignorePattern":{"type":"string","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"any":[{"any":[{"regex":"^//[\\s\\x{FEFF}]*eslint-"},{"regex":"(?s)^/\\*[\\s\\x{FEFF}]*(?:eslint-|(?:eslint|globals?|exported) .*[^\\s\\x{FEFF}].*\\*/$)"}]},{"all":[{"inside":{"kind":"jsx_expression","not":{"has":{"all":[{"not":{"kind":"comment"}},{"not":{"regex":"^[{}]$"}}]}},"stopBy":"neighbor"}},{"any":[{"not":{"matches":"r2"}},{"follows":{"not":{"matches":"r2"},"regex":"^\\{$","stopBy":"neighbor"}}]},{"any":[{"not":{"matches":"r3"}},{"precedes":{"not":{"matches":"r3"},"regex":"^\\}$","stopBy":"neighbor"}}]}]}]},"r2":{"layout":{"before":{"breaks":{"eq":0},"comments":true,"to":"token"}}},"r3":{"layout":{"after":{"breaks":{"eq":0},"comments":true,"to":"token"}}}}}},{"id":"inline-comment","forbid":{"ast":{"language":"typescript","rule":{"$option":"ignorePattern","cases":{"(?:webpackChunkName):\\s.+":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"},"all":[{"not":{"regex":{"$option":"ignorePattern","cases":{"null":"(?:webpackChunkName):\\s.+"},"default":{"$option":"ignorePattern"}}}}]},"Note: ":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"},"all":[{"not":{"regex":{"$option":"ignorePattern","cases":{"null":"(?:webpackChunkName):\\s.+"},"default":{"$option":"ignorePattern"}}}}]},"otherthing":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"},"all":[{"not":{"regex":{"$option":"ignorePattern","cases":{"null":"(?:webpackChunkName):\\s.+"},"default":{"$option":"ignorePattern"}}}}]},"something":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"},"all":[{"not":{"regex":{"$option":"ignorePattern","cases":{"null":"(?:webpackChunkName):\\s.+"},"default":{"$option":"ignorePattern"}}}}]}},"default":{"kind":"comment","any":[{"matches":"r2"},{"matches":"r3"}],"not":{"matches":"r1"}}}}},"violation":{"anchor":"witness.span","code":"no-inline-comments","message":"Unexpected comment inline with code.","suppress":{"eslint":{"rules":["no-inline-comments"]},"oxlint":{"rules":["no-inline-comments"]}}}}]}
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-iterator","revision":3,"mode":"steer","description":"Port of ESLint's `no-iterator` (https://eslint.org/docs/latest/rules/no-iterator). Flags member accesses whose static property name (getStaticPropertyName) is `__iterator__`: a non-computed name (identifier escapes decoded), or a string or substitution-free template index by its cooked value.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"iterator-member","forbid":{"ast":{"language":"typescript","utils":{"static-str":{"any":[{"kind":"string"},{"kind":"template_string","not":{"has":{"kind":"template_substitution","stopBy":"neighbor"}}},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"static-str"}}]}},"rule":{"any":[{"kind":"member_expression","has":{"kind":"property_identifier","stopBy":"neighbor","regex":"^(?:[_]|\\\\u005[fF]|\\\\u\\{0*5[fF]\\})(?:[_]|\\\\u005[fF]|\\\\u\\{0*5[fF]\\})(?:[i]|\\\\u0069|\\\\u\\{0*69\\})(?:[t]|\\\\u0074|\\\\u\\{0*74\\})(?:[e]|\\\\u0065|\\\\u\\{0*65\\})(?:[r]|\\\\u0072|\\\\u\\{0*72\\})(?:[a]|\\\\u0061|\\\\u\\{0*61\\})(?:[t]|\\\\u0074|\\\\u\\{0*74\\})(?:[o]|\\\\u006[fF]|\\\\u\\{0*6[fF]\\})(?:[r]|\\\\u0072|\\\\u\\{0*72\\})(?:[_]|\\\\u005[fF]|\\\\u\\{0*5[fF]\\})(?:[_]|\\\\u005[fF]|\\\\u\\{0*5[fF]\\})$"}},{"kind":"subscript_expression","has":{"stopBy":"neighbor","precedes":{"regex":"^\\]$","stopBy":"neighbor"},"matches":"static-str","value":{"eq":"__iterator__"}}}]}}},"violation":{"anchor":"witness.span","code":"no-iterator","message":"Reserved name '__iterator__'.","suppress":{"eslint":{"rules":["no-iterator"]},"oxlint":{"rules":["no-iterator"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-iterator","revision":3,"mode":"steer","description":"Don't use the obsolete __iterator__ property; use Symbol.iterator and standard iteration instead.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"iterator-member","forbid":{"ast":{"language":"typescript","utils":{"static-str":{"any":[{"kind":"string"},{"kind":"template_string","not":{"has":{"kind":"template_substitution","stopBy":"neighbor"}}},{"kind":"parenthesized_expression","has":{"stopBy":"neighbor","matches":"static-str"}}]}},"rule":{"any":[{"kind":"member_expression","has":{"kind":"property_identifier","stopBy":"neighbor","regex":"^(?:[_]|\\\\u005[fF]|\\\\u\\{0*5[fF]\\})(?:[_]|\\\\u005[fF]|\\\\u\\{0*5[fF]\\})(?:[i]|\\\\u0069|\\\\u\\{0*69\\})(?:[t]|\\\\u0074|\\\\u\\{0*74\\})(?:[e]|\\\\u0065|\\\\u\\{0*65\\})(?:[r]|\\\\u0072|\\\\u\\{0*72\\})(?:[a]|\\\\u0061|\\\\u\\{0*61\\})(?:[t]|\\\\u0074|\\\\u\\{0*74\\})(?:[o]|\\\\u006[fF]|\\\\u\\{0*6[fF]\\})(?:[r]|\\\\u0072|\\\\u\\{0*72\\})(?:[_]|\\\\u005[fF]|\\\\u\\{0*5[fF]\\})(?:[_]|\\\\u005[fF]|\\\\u\\{0*5[fF]\\})$"}},{"kind":"subscript_expression","has":{"stopBy":"neighbor","precedes":{"regex":"^\\]$","stopBy":"neighbor"},"matches":"static-str","value":{"eq":"__iterator__"}}}]}}},"violation":{"anchor":"witness.span","code":"no-iterator","message":"Replace '__iterator__' with a [Symbol.iterator]() method.","suppress":{"eslint":{"rules":["no-iterator"]},"oxlint":{"rules":["no-iterator"]}}}}]}
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-labels","revision":3,"mode":"steer","description":"Port of ESLint's `no-labels` rule (https://eslint.org/docs/latest/rules/no-labels). Flags every labeled statement and every labeled break/continue. Options are declared in the `options` define (the rule's defaults); a variant is a config patch.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allowLoop":{"type":"boolean","nullable":true,"default":null},"allowSwitch":{"type":"boolean","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"any":[{"kind":"function_declaration"},{"kind":"function_expression"},{"kind":"arrow_function"},{"kind":"generator_function_declaration"},{"kind":"generator_function"},{"kind":"method_definition"},{"kind":"class_static_block"}]},"r2":{"has":{"kind":"statement_identifier","pattern":"$L","stopBy":"neighbor"}}}}},{"id":"labeled-statement","forbid":{"ast":{"language":"typescript","rule":{"$option":"allowLoop","cases":{"true":{"all":[{"kind":"labeled_statement"},{"not":{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}}]}},"default":{"$option":"allowSwitch","cases":{"true":{"all":[{"kind":"labeled_statement"},{"not":{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}}]}},"default":{"kind":"labeled_statement"}}}}},"violation":{"anchor":"witness.span","code":"no-labels","message":"Unexpected labeled statement.","suppress":{"eslint":{"rules":["no-labels"]},"oxlint":{"rules":["no-labels"]}}}},{"id":"label-in-break","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"break_statement"},{"matches":"r2"},{"$option":"allowLoop","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":{"$option":"allowSwitch","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":[]},"spread":true}]}}},"violation":{"anchor":"witness.span","code":"no-labels","message":"Unexpected label in break statement.","suppress":{"eslint":{"rules":["no-labels"]},"oxlint":{"rules":["no-labels"]}}}},{"id":"label-in-continue","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"continue_statement"},{"matches":"r2"},{"$option":"allowLoop","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":{"$option":"allowSwitch","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":[]},"spread":true}]}}},"violation":{"anchor":"witness.span","code":"no-labels","message":"Unexpected label in continue statement.","suppress":{"eslint":{"rules":["no-labels"]},"oxlint":{"rules":["no-labels"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-labels","revision":3,"mode":"steer","description":"Avoid labeled statements and labeled break or continue; restructure the loop or extract a function instead.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allowLoop":{"type":"boolean","nullable":true,"default":null},"allowSwitch":{"type":"boolean","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"r1":{"any":[{"kind":"function_declaration"},{"kind":"function_expression"},{"kind":"arrow_function"},{"kind":"generator_function_declaration"},{"kind":"generator_function"},{"kind":"method_definition"},{"kind":"class_static_block"}]},"r2":{"has":{"kind":"statement_identifier","pattern":"$L","stopBy":"neighbor"}}}}},{"id":"labeled-statement","forbid":{"ast":{"language":"typescript","rule":{"$option":"allowLoop","cases":{"true":{"all":[{"kind":"labeled_statement"},{"not":{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}}]}},"default":{"$option":"allowSwitch","cases":{"true":{"all":[{"kind":"labeled_statement"},{"not":{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}}]}},"default":{"kind":"labeled_statement"}}}}},"violation":{"anchor":"witness.span","code":"no-labels","message":"Remove this label; restructure the loop or extract a function instead.","suppress":{"eslint":{"rules":["no-labels"]},"oxlint":{"rules":["no-labels"]}}}},{"id":"label-in-break","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"break_statement"},{"matches":"r2"},{"$option":"allowLoop","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":{"$option":"allowSwitch","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":[]},"spread":true}]}}},"violation":{"anchor":"witness.span","code":"no-labels","message":"Remove the label from this break; extract the loops into a function and return to exit early.","suppress":{"eslint":{"rules":["no-labels"]},"oxlint":{"rules":["no-labels"]}}}},{"id":"label-in-continue","forbid":{"ast":{"language":"typescript","rule":{"all":[{"kind":"continue_statement"},{"matches":"r2"},{"$option":"allowLoop","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":{"$option":"allowSwitch","cases":{"true":[{"not":{"inside":{"stopBy":{"matches":"r1"},"all":[{"kind":"labeled_statement"},{"matches":"r2"},{"has":{"stopBy":"neighbor","any":[{"$option":"allowLoop","cases":{"true":[{"kind":"for_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"for_in_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"while_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[{"kind":"do_statement"}]},"default":[],"spread":true},{"$option":"allowLoop","cases":{"true":[]},"default":[{"kind":"switch_statement"}],"spread":true}]}}]}}}]},"default":[]},"spread":true}]}}},"violation":{"anchor":"witness.span","code":"no-labels","message":"Remove the label from this continue; restructure the loop or extract its body into a function.","suppress":{"eslint":{"rules":["no-labels"]},"oxlint":{"rules":["no-labels"]}}}}]}
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-loss-of-precision","revision":4,"mode":"steer","description":"Port of ESLint's `no-loss-of-precision` rule (https://eslint.org/docs/latest/rules/no-loss-of-precision). Binary literals whose significant bits span more than 53; decimal literals whose significant digits differ from those of the number they store (String(v) through `transform` with `value: true`: overflow to Infinity and underflow to zero included); hex and octal literals, as binary ones, by the span of their significant bits.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"binary-over-53-bits","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","regex":"^0[bB][0_]*1(?:_*[01]){52,}_*1[01_]*$"}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"This number literal will lose precision at runtime.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}},{"id":"hex-over-53-bits","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","regex":"^0[xX][0_]*(?:1(?:_*[0-9a-fA-F]){13,}_*[13579bdfBDF]|1(?:_*[0-9a-fA-F]){13,}_*[26aeAE]|1(?:_*[0-9a-fA-F]){13,}_*[4cC]|1(?:_*[0-9a-fA-F]){13,}_*8|[23](?:_*[0-9a-fA-F]){12,}_*[13579bdfBDF]|[23](?:_*[0-9a-fA-F]){13,}_*[26aeAE]|[23](?:_*[0-9a-fA-F]){13,}_*[4cC]|[23](?:_*[0-9a-fA-F]){13,}_*8|[4-7](?:_*[0-9a-fA-F]){12,}_*[13579bdfBDF]|[4-7](?:_*[0-9a-fA-F]){12,}_*[26aeAE]|[4-7](?:_*[0-9a-fA-F]){13,}_*[4cC]|[4-7](?:_*[0-9a-fA-F]){13,}_*8|[89a-fA-F](?:_*[0-9a-fA-F]){12,}_*[13579bdfBDF]|[89a-fA-F](?:_*[0-9a-fA-F]){12,}_*[26aeAE]|[89a-fA-F](?:_*[0-9a-fA-F]){12,}_*[4cC]|[89a-fA-F](?:_*[0-9a-fA-F]){13,}_*8)"}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"This number literal will lose precision at runtime.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}},{"id":"octal-over-53-bits","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","regex":"^0[oO]?[0_]*(?:1(?:_*[0-7]){17,}_*[1357]|1(?:_*[0-7]){17,}_*[26]|1(?:_*[0-7]){18,}_*4|[23](?:_*[0-7]){17,}_*[1357]|[23](?:_*[0-7]){17,}_*[26]|[23](?:_*[0-7]){17,}_*4|[4-7](?:_*[0-7]){16,}_*[1357]|[4-7](?:_*[0-7]){17,}_*[26]|[4-7](?:_*[0-7]){17,}_*4)"}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"This number literal will lose precision at runtime.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}},{"id":"decimal-digits","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","pattern":"$N","not":{"regex":"^0[xXoObB]|^0[0-9_]*[0-7]$|^0[0-7_]+$|n$"},"all":[{"regex":"^(?:[0-9_]+\\.?[0-9_]*|\\.[0-9_]+)(?:[eE][-+]?[0-9_]+)?$"},{"compare":{"left":"L4","op":"ne","right":"V4"}}]},"transform":{"L0":{"replace":{"source":"$N","replace":"_","by":""}},"L1":{"replace":{"source":"$L0","replace":"[eE].*$","by":""}},"L2":{"replace":{"source":"$L1","replace":"\\.","by":""}},"L3":{"replace":{"source":"$L2","replace":"^0+","by":""}},"L4":{"replace":{"source":"$L3","replace":"0+$","by":""}},"V0":{"replace":{"source":"$N","replace":"^-","by":"","value":true}},"V1":{"replace":{"source":"$V0","replace":"[eE].*$","by":""}},"V2":{"replace":{"source":"$V1","replace":"\\.","by":""}},"V3":{"replace":{"source":"$V2","replace":"^0+","by":""}},"V4":{"replace":{"source":"$V3","replace":"0+$","by":""}}}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"This number literal will lose precision at runtime.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}},{"id":"long-float","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","pattern":"$N","not":{"regex":"^0[xXoObB]|^0[0-9_]*[0-7]$|^0[0-7_]+$|n$"},"all":[{"regex":"^(?:[0-9_]*\\.[0-9_]*|\\.[0-9_]+)(?:[eE][-+]?[0-9_]+)?$"},{"regex":"^[0._]*[1-9](?:[._]*[0-9]){17,}"},{"compare":{"left":"L4","op":"eq","right":"V4"}},{"compare":{"left":"VI","op":"ne","right":"E"}}]},"transform":{"L0":{"replace":{"source":"$N","replace":"_","by":""}},"L1":{"replace":{"source":"$L0","replace":"[eE].*$","by":""}},"L2":{"replace":{"source":"$L1","replace":"\\.","by":""}},"L3":{"replace":{"source":"$L2","replace":"^0+","by":""}},"L4":{"replace":{"source":"$L3","replace":"0+$","by":""}},"V0":{"replace":{"source":"$N","replace":"^-","by":"","value":true}},"V1":{"replace":{"source":"$V0","replace":"[eE].*$","by":""}},"V2":{"replace":{"source":"$V1","replace":"\\.","by":""}},"V3":{"replace":{"source":"$V2","replace":"^0+","by":""}},"V4":{"replace":{"source":"$V3","replace":"0+$","by":""}},"VI":{"replace":{"source":"$V0","replace":"^[0-9]{1,16}$","by":""}},"E":{"replace":{"source":"$N","replace":"(?s)^.*$","by":""}}}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"This number literal will lose precision at runtime.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-loss-of-precision","revision":4,"mode":"steer","description":"Avoid number literals that cannot be stored exactly as a JavaScript number; the value silently changes at runtime.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"binary-over-53-bits","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","regex":"^0[bB][0_]*1(?:_*[01]){52,}_*1[01_]*$"}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"Rewrite this number literal so a JavaScript number stores it exactly, e.g. with fewer digits or as a BigInt.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}},{"id":"hex-over-53-bits","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","regex":"^0[xX][0_]*(?:1(?:_*[0-9a-fA-F]){13,}_*[13579bdfBDF]|1(?:_*[0-9a-fA-F]){13,}_*[26aeAE]|1(?:_*[0-9a-fA-F]){13,}_*[4cC]|1(?:_*[0-9a-fA-F]){13,}_*8|[23](?:_*[0-9a-fA-F]){12,}_*[13579bdfBDF]|[23](?:_*[0-9a-fA-F]){13,}_*[26aeAE]|[23](?:_*[0-9a-fA-F]){13,}_*[4cC]|[23](?:_*[0-9a-fA-F]){13,}_*8|[4-7](?:_*[0-9a-fA-F]){12,}_*[13579bdfBDF]|[4-7](?:_*[0-9a-fA-F]){12,}_*[26aeAE]|[4-7](?:_*[0-9a-fA-F]){13,}_*[4cC]|[4-7](?:_*[0-9a-fA-F]){13,}_*8|[89a-fA-F](?:_*[0-9a-fA-F]){12,}_*[13579bdfBDF]|[89a-fA-F](?:_*[0-9a-fA-F]){12,}_*[26aeAE]|[89a-fA-F](?:_*[0-9a-fA-F]){12,}_*[4cC]|[89a-fA-F](?:_*[0-9a-fA-F]){13,}_*8)"}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"Rewrite this number literal so a JavaScript number stores it exactly, e.g. with fewer digits or as a BigInt.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}},{"id":"octal-over-53-bits","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","regex":"^0[oO]?[0_]*(?:1(?:_*[0-7]){17,}_*[1357]|1(?:_*[0-7]){17,}_*[26]|1(?:_*[0-7]){18,}_*4|[23](?:_*[0-7]){17,}_*[1357]|[23](?:_*[0-7]){17,}_*[26]|[23](?:_*[0-7]){17,}_*4|[4-7](?:_*[0-7]){16,}_*[1357]|[4-7](?:_*[0-7]){17,}_*[26]|[4-7](?:_*[0-7]){17,}_*4)"}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"Rewrite this number literal so a JavaScript number stores it exactly, e.g. with fewer digits or as a BigInt.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}},{"id":"decimal-digits","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","pattern":"$N","not":{"regex":"^0[xXoObB]|^0[0-9_]*[0-7]$|^0[0-7_]+$|n$"},"all":[{"regex":"^(?:[0-9_]+\\.?[0-9_]*|\\.[0-9_]+)(?:[eE][-+]?[0-9_]+)?$"},{"compare":{"left":"L4","op":"ne","right":"V4"}}]},"transform":{"L0":{"replace":{"source":"$N","replace":"_","by":""}},"L1":{"replace":{"source":"$L0","replace":"[eE].*$","by":""}},"L2":{"replace":{"source":"$L1","replace":"\\.","by":""}},"L3":{"replace":{"source":"$L2","replace":"^0+","by":""}},"L4":{"replace":{"source":"$L3","replace":"0+$","by":""}},"V0":{"replace":{"source":"$N","replace":"^-","by":"","value":true}},"V1":{"replace":{"source":"$V0","replace":"[eE].*$","by":""}},"V2":{"replace":{"source":"$V1","replace":"\\.","by":""}},"V3":{"replace":{"source":"$V2","replace":"^0+","by":""}},"V4":{"replace":{"source":"$V3","replace":"0+$","by":""}}}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"Rewrite this number literal so a JavaScript number stores it exactly, e.g. with fewer digits or as a BigInt.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}},{"id":"long-float","forbid":{"ast":{"language":"typescript","rule":{"kind":"number","pattern":"$N","not":{"regex":"^0[xXoObB]|^0[0-9_]*[0-7]$|^0[0-7_]+$|n$"},"all":[{"regex":"^(?:[0-9_]*\\.[0-9_]*|\\.[0-9_]+)(?:[eE][-+]?[0-9_]+)?$"},{"regex":"^[0._]*[1-9](?:[._]*[0-9]){17,}"},{"compare":{"left":"L4","op":"eq","right":"V4"}},{"compare":{"left":"VI","op":"ne","right":"E"}}]},"transform":{"L0":{"replace":{"source":"$N","replace":"_","by":""}},"L1":{"replace":{"source":"$L0","replace":"[eE].*$","by":""}},"L2":{"replace":{"source":"$L1","replace":"\\.","by":""}},"L3":{"replace":{"source":"$L2","replace":"^0+","by":""}},"L4":{"replace":{"source":"$L3","replace":"0+$","by":""}},"V0":{"replace":{"source":"$N","replace":"^-","by":"","value":true}},"V1":{"replace":{"source":"$V0","replace":"[eE].*$","by":""}},"V2":{"replace":{"source":"$V1","replace":"\\.","by":""}},"V3":{"replace":{"source":"$V2","replace":"^0+","by":""}},"V4":{"replace":{"source":"$V3","replace":"0+$","by":""}},"VI":{"replace":{"source":"$V0","replace":"^[0-9]{1,16}$","by":""}},"E":{"replace":{"source":"$N","replace":"(?s)^.*$","by":""}}}}},"violation":{"anchor":"witness.span","code":"no-loss-of-precision","message":"Rewrite this number literal so a JavaScript number stores it exactly, e.g. with fewer digits or as a BigInt.","suppress":{"eslint":{"rules":["no-loss-of-precision"]},"oxlint":{"rules":["no-loss-of-precision"]},"biome":{"rules":["lint/correctness/noPrecisionLoss"]}}}}]}
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-multi-str",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-multi-str` rule (https://eslint.org/docs/latest/rules/no-multi-str). Reports a string literal whose source text contains a line break (a backslash line continuation), unless its parent is a JSX attribute or JSX expression container.",
6
+ "description": "Avoid multiline strings built with backslash line continuations; use a template literal or concatenation instead.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -37,7 +37,7 @@
37
37
  "violation": {
38
38
  "anchor": "witness.span",
39
39
  "code": "no-multi-str",
40
- "message": "Multiline support is limited to browsers supporting ES5 only.",
40
+ "message": "Replace this backslash-continued string with a template literal or string concatenation.",
41
41
  "suppress": {
42
42
  "eslint": {
43
43
  "rules": [
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-negated-condition",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-negated-condition` (https://eslint.org/docs/latest/rules/no-negated-condition). Flags `if` with a plain `else` and ternaries whose test is `!x`, `!=` or `!==`.",
6
+ "description": "Avoid negated conditions in an if with an else or in a ternary; swap the branches and drop the negation.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -90,7 +90,7 @@
90
90
  "violation": {
91
91
  "anchor": "witness.span",
92
92
  "code": "no-negated-condition",
93
- "message": "Unexpected negated condition.",
93
+ "message": "Remove the negation from this condition and swap the two branches.",
94
94
  "suppress": {
95
95
  "eslint": {
96
96
  "rules": [
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-nested-ternary",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-nested-ternary` rule (https://eslint.org/docs/latest/rules/no-nested-ternary). Reports a conditional expression whose consequent or alternate (through parentheses) is itself a conditional expression.",
6
+ "description": "Avoid nesting ternary expressions inside each other; use if-else or intermediate variables for readability.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-new-wrappers",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "ESLint 10.11.0 no-new-wrappers, default options. Port of ESLint's `no-new-wrappers` rule (https://eslint.org/docs/latest/rules/no-new-wrappers). Flags `new` of the global String, Number or Boolean (resolved with `resolves`).",
6
+ "description": "Don't use new with String, Number or Boolean; it creates wrapper objects that behave unlike primitives.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.ts",
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-new",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-new` rule (https://eslint.org/docs/latest/rules/no-new). Reports an expression statement whose expression (through parentheses) is a `new` expression.",
6
+ "description": "Don't call a constructor with new only for its side effects; keep the created object or use a plain function.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -32,7 +32,7 @@
32
32
  "violation": {
33
33
  "anchor": "witness.span",
34
34
  "code": "no-new",
35
- "message": "Do not use 'new' for side effects.",
35
+ "message": "Keep the object this new creates, or replace it with a plain function call if only its side effects matter.",
36
36
  "suppress": {
37
37
  "eslint": {
38
38
  "rules": [
@@ -3,7 +3,7 @@
3
3
  "id": "eslint-no-nonoctal-decimal-escape",
4
4
  "revision": 3,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-nonoctal-decimal-escape` rule (https://eslint.org/docs/latest/rules/no-nonoctal-decimal-escape). Reports each \\8 or \\9 escape sequence in a string literal.",
6
+ "description": "Avoid the \\8 and \\9 escape sequences in strings; they are not valid escapes and just produce the digit, which misleads readers.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -30,7 +30,7 @@
30
30
  "violation": {
31
31
  "anchor": "witness.span",
32
32
  "code": "no-nonoctal-decimal-escape",
33
- "message": "Don't use '$ESC' escape sequence.",
33
+ "message": "Replace '$ESC' with the plain digit, or escape the backslash if you meant a literal backslash.",
34
34
  "suppress": {
35
35
  "eslint": {
36
36
  "rules": [
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-object-constructor","revision":1,"mode":"steer","description":"Port of ESLint's `no-object-constructor` rule (https://eslint.org/docs/latest/rules/no-object-constructor). Flags `Object()` / `new Object` without arguments when `Object` is the global (resolved with `resolves`). ESLint offers only a suggestion, so no fix is declared.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"object-constructor","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"all":[{"any":[{"kind":"call_expression"},{"kind":"new_expression"}]},{"has":{"matches":"object-callee"}},{"not":{"has":{"kind":"template_string"}}},{"not":{"has":{"kind":"arguments","has":{"matches":"arg"}}}}]},"utils":{"object-callee":{"any":[{"kind":"identifier","resolves":{"global":["Object"],"directives":"eslint"}},{"kind":"parenthesized_expression","has":{"matches":"object-callee"}}]},"arg":{"not":{"any":[{"regex":"^[(),]$"},{"kind":"comment"}]}}}}},"violation":{"anchor":"witness.span","code":"no-object-constructor","message":"The object literal notation {} is preferable.","suppress":{"eslint":{"rules":["no-object-constructor"]},"oxlint":{"rules":["no-object-constructor"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-object-constructor","revision":1,"mode":"steer","description":"Use an object literal instead of calling Object() or new Object() with no arguments.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"object-constructor","forbid":{"ast":{"language":"typescript","languageOptions":{},"rule":{"all":[{"any":[{"kind":"call_expression"},{"kind":"new_expression"}]},{"has":{"matches":"object-callee"}},{"not":{"has":{"kind":"template_string"}}},{"not":{"has":{"kind":"arguments","has":{"matches":"arg"}}}}]},"utils":{"object-callee":{"any":[{"kind":"identifier","resolves":{"global":["Object"],"directives":"eslint"}},{"kind":"parenthesized_expression","has":{"matches":"object-callee"}}]},"arg":{"not":{"any":[{"regex":"^[(),]$"},{"kind":"comment"}]}}}}},"violation":{"anchor":"witness.span","code":"no-object-constructor","message":"The object literal notation {} is preferable.","suppress":{"eslint":{"rules":["no-object-constructor"]},"oxlint":{"rules":["no-object-constructor"]}}}}]}
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-octal-escape","revision":4,"mode":"steer","description":"Port of ESLint's `no-octal-escape` rule (https://eslint.org/docs/latest/rules/no-octal-escape). Reports a string literal containing a legacy octal escape (\\1-\\7, or \\0 followed by a digit), found by scanning the raw text escape by escape.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"octal-escape","forbid":{"ast":{"language":"typescript","rule":{"kind":"string","regex":"(?s)^(?:[^\\\\]|\\\\.)*?(?:(?<SEQ>\\\\(?:[0-3][0-7]{1,2}|[4-7][0-7]))|(?<SEQZ>\\\\0)[89]|(?<SEQD>\\\\[1-7]))"}}},"violation":{"anchor":"witness.span","code":"no-octal-escape","message":"Don't use octal: '$SEQ$SEQZ$SEQD'. Use '\\u....' instead.","suppress":{"eslint":{"rules":["no-octal-escape"]}, "biome":{"rules":["lint/suspicious/noOctalEscape"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-octal-escape","revision":4,"mode":"steer","description":"Use Unicode or hex escapes instead of legacy octal escapes in string literals; octal escapes are deprecated and forbidden in strict mode.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"octal-escape","forbid":{"ast":{"language":"typescript","rule":{"kind":"string","regex":"(?s)^(?:[^\\\\]|\\\\.)*?(?:(?<SEQ>\\\\(?:[0-3][0-7]{1,2}|[4-7][0-7]))|(?<SEQZ>\\\\0)[89]|(?<SEQD>\\\\[1-7]))"}}},"violation":{"anchor":"witness.span","code":"no-octal-escape","message":"Don't use octal: '$SEQ$SEQZ$SEQD'. Use '\\u....' instead.","suppress":{"eslint":{"rules":["no-octal-escape"]}, "biome":{"rules":["lint/suspicious/noOctalEscape"]}}}}]}
@@ -3,13 +3,13 @@
3
3
  "id": "eslint-no-octal",
4
4
  "revision": 2,
5
5
  "mode": "steer",
6
- "description": "Port of ESLint's `no-octal` rule (https://eslint.org/docs/latest/rules/no-octal). Disallows legacy octal (and 0-prefixed decimal) numeric literals: a number whose raw text is 0 followed by a digit.",
6
+ "description": "Avoid numeric literals that start with a zero followed by a digit; legacy octal is deprecated and easily misread as decimal.",
7
7
  "scope": { "include": ["**/*"], "exclude": [] },
8
8
  "clauses": [
9
9
  {
10
10
  "id": "octal-literal",
11
11
  "forbid": { "ast": { "language": "typescript", "rule": { "kind": "number", "regex": "^0[0-9]" } } },
12
- "violation": { "anchor": "witness.span", "code": "no-octal", "message": "Octal literals should not be used.", "suppress": { "eslint": { "rules": ["no-octal"] } } }
12
+ "violation": { "anchor": "witness.span", "code": "no-octal", "message": "Write this number with a 0o prefix if it is octal, or drop the leading zero if it is decimal.", "suppress": { "eslint": { "rules": ["no-octal"] } } }
13
13
  }
14
14
  ]
15
15
  }
@@ -1 +1 @@
1
- {"format":"rerail.policy/v1","id":"eslint-no-plusplus","revision":4,"mode":"steer","description":"Port of ESLint's `no-plusplus` rule. Flags every ++ and -- update expression. 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":{"allowForLoopAfterthoughts":{"type":"boolean","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"afterthought":{"any":[{"inside":{"kind":"for_statement"},"precedes":{"regex":"^\\)$","stopBy":{"not":{"kind":"comment"}}}},{"inside":{"any":[{"kind":"sequence_expression"},{"kind":"parenthesized_expression"}],"matches":"afterthought"}}]},"r1":{"has":{"regex":"^\\+\\+$"},"kind":"update_expression"},"r2":{"has":{"regex":"^--$"},"kind":"update_expression"}}}},{"id":"update-increment","forbid":{"ast":{"$option":"allowForLoopAfterthoughts","cases":{"true":{"language":"typescript","rule":{"all":[{"matches":"r1"},{"not":{"matches":"afterthought"}}]}}},"default":{"language":"typescript","rule":{"matches":"r1"}}}},"violation":{"anchor":"witness.span","code":"no-plusplus","message":"Unary operator '++' used.","suppress":{"eslint":{"rules":["no-plusplus"]},"oxlint":{"rules":["no-plusplus"]},"biome":{"rules":["lint/style/noIncrementDecrement"]}}}},{"id":"update-decrement","forbid":{"ast":{"$option":"allowForLoopAfterthoughts","cases":{"true":{"language":"typescript","rule":{"all":[{"matches":"r2"},{"not":{"matches":"afterthought"}}]}}},"default":{"language":"typescript","rule":{"matches":"r2"}}}},"violation":{"anchor":"witness.span","code":"no-plusplus","message":"Unary operator '--' used.","suppress":{"eslint":{"rules":["no-plusplus"]},"oxlint":{"rules":["no-plusplus"]},"biome":{"rules":["lint/style/noIncrementDecrement"]}}}}]}
1
+ {"format":"rerail.policy/v1","id":"eslint-no-plusplus","revision":4,"mode":"steer","description":"Use += 1 and -= 1 instead of the ++ and -- operators; automatic semicolon insertion can change what they apply to.","scope":{"include":["**/*"],"exclude":[]},"clauses":[{"id":"options","define":{"options":{"allowForLoopAfterthoughts":{"type":"boolean","nullable":true,"default":null}}}},{"id":"shared","define":{"language":"typescript","utils":{"afterthought":{"any":[{"inside":{"kind":"for_statement"},"precedes":{"regex":"^\\)$","stopBy":{"not":{"kind":"comment"}}}},{"inside":{"any":[{"kind":"sequence_expression"},{"kind":"parenthesized_expression"}],"matches":"afterthought"}}]},"r1":{"has":{"regex":"^\\+\\+$"},"kind":"update_expression"},"r2":{"has":{"regex":"^--$"},"kind":"update_expression"}}}},{"id":"update-increment","forbid":{"ast":{"$option":"allowForLoopAfterthoughts","cases":{"true":{"language":"typescript","rule":{"all":[{"matches":"r1"},{"not":{"matches":"afterthought"}}]}}},"default":{"language":"typescript","rule":{"matches":"r1"}}}},"violation":{"anchor":"witness.span","code":"no-plusplus","message":"Replace ++ with += 1, moving it to its own statement if its value is used.","suppress":{"eslint":{"rules":["no-plusplus"]},"oxlint":{"rules":["no-plusplus"]},"biome":{"rules":["lint/style/noIncrementDecrement"]}}}},{"id":"update-decrement","forbid":{"ast":{"$option":"allowForLoopAfterthoughts","cases":{"true":{"language":"typescript","rule":{"all":[{"matches":"r2"},{"not":{"matches":"afterthought"}}]}}},"default":{"language":"typescript","rule":{"matches":"r2"}}}},"violation":{"anchor":"witness.span","code":"no-plusplus","message":"Replace -- with -= 1, moving it to its own statement if its value is used.","suppress":{"eslint":{"rules":["no-plusplus"]},"oxlint":{"rules":["no-plusplus"]},"biome":{"rules":["lint/style/noIncrementDecrement"]}}}}]}