@neralabs/rerail-pack-python 0.1.3 → 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 (138) hide show
  1. package/README.md +704 -0
  2. package/package.json +1 -1
  3. package/rules/bandit-b101-assert-used.json +2 -2
  4. package/rules/bandit-b102-exec-used.json +2 -2
  5. package/rules/bandit-b110-try-except-pass.json +1 -1
  6. package/rules/bandit-b112-try-except-continue.json +1 -1
  7. package/rules/bandit-b113-request-without-timeout.json +2 -2
  8. package/rules/bandit-b301-pickle.json +2 -2
  9. package/rules/bandit-b302-marshal.json +2 -2
  10. package/rules/bandit-b303-md5.json +1 -1
  11. package/rules/bandit-b305-cipher-modes.json +2 -2
  12. package/rules/bandit-b306-mktemp-q.json +2 -2
  13. package/rules/bandit-b307-eval.json +1 -1
  14. package/rules/bandit-b308-mark-safe.json +2 -2
  15. package/rules/bandit-b310-urllib-urlopen.json +1 -1
  16. package/rules/bandit-b311-random.json +1 -1
  17. package/rules/bandit-b312-telnetlib.json +1 -1
  18. package/rules/bandit-b313-xml-bad-celementtree.json +1 -1
  19. package/rules/bandit-b314-xml-bad-elementtree.json +1 -1
  20. package/rules/bandit-b315-xml-bad-expatreader.json +1 -1
  21. package/rules/bandit-b316-xml-bad-expatbuilder.json +1 -1
  22. package/rules/bandit-b317-xml-bad-sax.json +1 -1
  23. package/rules/bandit-b318-xml-bad-minidom.json +1 -1
  24. package/rules/bandit-b319-xml-bad-pulldom.json +1 -1
  25. package/rules/bandit-b321-ftplib.json +2 -2
  26. package/rules/bandit-b323-unverified-context.json +2 -2
  27. package/rules/bandit-b401-import-telnetlib.json +2 -2
  28. package/rules/bandit-b402-import-ftplib.json +2 -2
  29. package/rules/bandit-b405-import-xml-etree.json +1 -1
  30. package/rules/bandit-b407-import-xml-expat.json +1 -1
  31. package/rules/bandit-b408-import-xml-minidom.json +1 -1
  32. package/rules/bandit-b409-import-xml-pulldom.json +1 -1
  33. package/rules/bandit-b411-import-xmlrpclib.json +1 -1
  34. package/rules/bandit-b413-import-pycrypto.json +1 -1
  35. package/rules/bandit-b415-import-pyghmi.json +2 -2
  36. package/rules/bandit-b502-ssl-with-bad-version.json +2 -2
  37. package/rules/bandit-b505-weak-cryptographic-key.json +2 -2
  38. package/rules/bandit-b507-ssh-no-host-key-verification.json +2 -2
  39. package/rules/bandit-b606-start-process-with-no-shell.json +2 -2
  40. package/rules/bandit-b615-huggingface-unsafe-download.json +2 -2
  41. package/rules/ruff-async100-cancel-scope-no-checkpoint.json +2 -2
  42. package/rules/ruff-async105-trio-sync-call.json +1 -1
  43. package/rules/ruff-async115-async-zero-sleep.json +1 -1
  44. package/rules/ruff-async116-long-sleep-not-forever.json +1 -1
  45. package/rules/ruff-async210-blocking-http-call-in-async-function.json +2 -2
  46. package/rules/ruff-async221-run-process-in-async-function.json +1 -1
  47. package/rules/ruff-async222-wait-for-process-in-async-function.json +2 -2
  48. package/rules/ruff-async230-blocking-open-call-in-async-function.json +2 -2
  49. package/rules/ruff-async250-blocking-input-in-async-function.json +2 -2
  50. package/rules/ruff-async251-blocking-sleep-in-async-function.json +1 -1
  51. package/rules/ruff-b002-unary-prefix-increment-decrement.json +3 -3
  52. package/rules/ruff-b003-assignment-to-os-environ.json +2 -2
  53. package/rules/ruff-b004-unreliable-callable-check.json +1 -1
  54. package/rules/ruff-b005-strip-with-multi-characters.json +2 -2
  55. package/rules/ruff-b007-unused-loop-control-variable.json +1 -1
  56. package/rules/ruff-b009-get-attr-with-constant.json +1 -1
  57. package/rules/ruff-b010-set-attr-with-constant.json +2 -2
  58. package/rules/ruff-b011-assert-false.json +1 -1
  59. package/rules/ruff-b013-redundant-tuple-in-exception-handler.json +1 -1
  60. package/rules/ruff-b014-duplicate-handler-exception.json +1 -1
  61. package/rules/ruff-b016-raise-literal.json +1 -1
  62. package/rules/ruff-b020-loop-variable-overrides-iterator.json +1 -1
  63. package/rules/ruff-b021-f-string-docstring.json +1 -1
  64. package/rules/ruff-b022-useless-contextlib-suppress.json +1 -1
  65. package/rules/ruff-b023-function-uses-loop-variable.json +2 -2
  66. package/rules/ruff-b025-duplicate-try-block-exception.json +1 -1
  67. package/rules/ruff-b026-star-arg-unpacking-after-keyword-arg.json +1 -1
  68. package/rules/ruff-b028-no-explicit-stacklevel.json +2 -2
  69. package/rules/ruff-b029-except-with-empty-tuple.json +1 -1
  70. package/rules/ruff-b030-except-with-non-exception-classes.json +1 -1
  71. package/rules/ruff-b032-unintentional-type-annotation.json +1 -1
  72. package/rules/ruff-b033-duplicate-value.json +1 -1
  73. package/rules/ruff-b034-re-sub-positional-args.json +1 -1
  74. package/rules/ruff-b039-mutable-contextvar-default.json +2 -2
  75. package/rules/ruff-b904-raise-without-from-inside-except.json +2 -2
  76. package/rules/ruff-b905-zip-without-explicit-strict.json +1 -1
  77. package/rules/ruff-e711-none-comparison.json +1 -1
  78. package/rules/ruff-e721-type-comparison.json +1 -1
  79. package/rules/ruff-e722-bare-except.json +2 -2
  80. package/rules/ruff-e742-ambiguous-class-name.json +2 -2
  81. package/rules/ruff-e743-ambiguous-function-name.json +2 -2
  82. package/rules/ruff-f403-undefined-local-with-import-star.json +1 -1
  83. package/rules/ruff-f405-undefined-local-with-import-star-usage.json +2 -2
  84. package/rules/ruff-f406-undefined-local-with-nested-import-star-usage.json +2 -2
  85. package/rules/ruff-f407-future-feature-not-defined.json +1 -1
  86. package/rules/ruff-f501-percent-format-invalid-format.json +2 -2
  87. package/rules/ruff-f502-percent-format-expected-mapping.json +1 -1
  88. package/rules/ruff-f503-percent-format-expected-sequence.json +1 -1
  89. package/rules/ruff-f504-percent-format-extra-named-arguments.json +1 -1
  90. package/rules/ruff-f505-percent-format-missing-argument.json +1 -1
  91. package/rules/ruff-f506-percent-format-mixed-positional-and-named.json +2 -2
  92. package/rules/ruff-f507-percent-format-positional-count-mismatch.json +2 -2
  93. package/rules/ruff-f508-percent-format-star-requires-sequence.json +2 -2
  94. package/rules/ruff-f509-percent-format-unsupported-format-character.json +2 -2
  95. package/rules/ruff-f521-string-dot-format-invalid-format.json +1 -1
  96. package/rules/ruff-f522-string-dot-format-extra-named-arguments.json +2 -2
  97. package/rules/ruff-f523-string-dot-format-extra-positional-arguments.json +1 -1
  98. package/rules/ruff-f524-string-dot-format-missing-arguments.json +1 -1
  99. package/rules/ruff-f525-string-dot-format-mixing-automatic.json +1 -1
  100. package/rules/ruff-f541-f-string-missing-placeholders.json +2 -2
  101. package/rules/ruff-f601-multi-value-repeated-key-literal.json +1 -1
  102. package/rules/ruff-f602-multi-value-repeated-key-variable.json +2 -2
  103. package/rules/ruff-f622-multiple-starred-expressions.json +1 -1
  104. package/rules/ruff-f632-is-literal.json +1 -1
  105. package/rules/ruff-f633-invalid-print-syntax.json +2 -2
  106. package/rules/ruff-f701-break-outside-loop.json +1 -1
  107. package/rules/ruff-f702-continue-outside-loop.json +1 -1
  108. package/rules/ruff-f706-return-outside-function.json +1 -1
  109. package/rules/ruff-f707-default-except-not-last.json +1 -1
  110. package/rules/ruff-f822-undefined-export.json +1 -1
  111. package/rules/ruff-f823-undefined-local.json +2 -2
  112. package/rules/ruff-f842-unused-annotation.json +1 -1
  113. package/rules/ruff-f901-raise-not-implemented.json +1 -1
  114. package/rules/ruff-pie794-duplicate-class-field-definition.json +1 -1
  115. package/rules/ruff-pie796-non-unique-enums.json +1 -1
  116. package/rules/ruff-pie800-unnecessary-spread.json +1 -1
  117. package/rules/ruff-pie804-unnecessary-dict-kwargs.json +1 -1
  118. package/rules/ruff-pie807-reimplemented-container-builtin.json +1 -1
  119. package/rules/ruff-pie810-multiple-starts-ends-with.json +2 -2
  120. package/rules/ruff-ret501-unnecessary-return-none.json +1 -1
  121. package/rules/ruff-ret502-implicit-return-value.json +2 -2
  122. package/rules/ruff-ret505-superfluous-else-return.json +1 -1
  123. package/rules/ruff-ret506-superfluous-else-raise.json +1 -1
  124. package/rules/ruff-ret507-superfluous-else-continue.json +1 -1
  125. package/rules/ruff-ret508-superfluous-else-break.json +1 -1
  126. package/rules/ruff-sim101-duplicate-isinstance-call.json +1 -1
  127. package/rules/ruff-sim107-return-in-try-except-finally.json +2 -2
  128. package/rules/ruff-sim109-compare-with-tuple.json +1 -1
  129. package/rules/ruff-sim112-uncapitalized-environment-variables.json +2 -2
  130. package/rules/ruff-sim113-enumerate-for-loop.json +1 -1
  131. package/rules/ruff-sim208-double-negation.json +1 -1
  132. package/rules/ruff-sim210-if-expr-with-true-false.json +1 -1
  133. package/rules/ruff-sim211-if-expr-with-false-true.json +1 -1
  134. package/rules/ruff-sim212-if-expr-with-twisted-arms.json +2 -2
  135. package/rules/ruff-sim300-yoda-conditions.json +2 -2
  136. package/rules/ruff-sim905-split-static-string.json +1 -1
  137. package/rules/ruff-sim910-dict-get-with-none-default.json +1 -1
  138. package/rules/ruff-t100-debugger.json +3 -3
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f405-undefined-local-with-import-star-usage",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F405 (undefined-local-with-import-star-usage) on the engine's name resolution (M10a `resolves.unresolved: \"star\"`): a reference, or a string entry of a module `__all__`, that no binding in scope and no builtin resolves and that a visible star import may bind, reported on the name or the string; and such a name inside a string Ruff parses as a type definition (M11a `parse` with `annotation`, nested strings included), reported on each such name inside the string.",
6
+ "description": "Import names explicitly instead of relying on a star import to define them; names that may only come from a star import can't be checked.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -72,7 +72,7 @@
72
72
  "violation": {
73
73
  "anchor": "capture.NAME",
74
74
  "code": "F405",
75
- "message": "`$NAME` may be undefined, or defined from star imports",
75
+ "message": "Import `$NAME` explicitly from its module; it may only be defined by a star import.",
76
76
  "each": "NAME",
77
77
  "suppress": {
78
78
  "noqa": {
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f406-undefined-local-with-nested-import-star-usage",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F406 (undefined-local-with-nested-import-star-usage): a `from <module> import *` outside module scope, i.e. anywhere inside a function or class body, reported on the whole statement.",
6
+ "description": "Don't use from module import * inside a function or class; star imports are only allowed at module level.",
7
7
  "scope": { "include": ["**/*"], "exclude": [] },
8
8
  "clauses": [
9
9
  {
@@ -25,7 +25,7 @@
25
25
  "violation": {
26
26
  "anchor": "witness.span",
27
27
  "code": "F406",
28
- "message": "`from $MODULE import *` only allowed at module level",
28
+ "message": "Import the needed names from `$MODULE` explicitly; a star import is only allowed at module level.",
29
29
  "suppress": {
30
30
  "noqa": {
31
31
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f407-future-feature-not-defined",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F407 (future-feature-not-defined): a name imported from `__future__` (also through a relative `from .__future__`, matched by the module's text with `resolves.imported` and `relative: \"text\"`, as Ruff ignores the level) that is not one of CPython's future features (`is_known_future_feature` in ruff_python_parser's semantic_errors.rs), reported on the alias (`name as alias` included) or on the `*` of a star import.",
6
+ "description": "Import only real feature names from __future__; an unknown feature name is a syntax error.",
7
7
  "scope": { "include": ["**/*"], "exclude": [] },
8
8
  "clauses": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f501-percent-format-invalid-format",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F501 (percent-format-invalid-format): a `%`-format string the parser refuses for any reason but an unsupported format character (an incomplete specifier, an unclosed mapping key, a width or precision too big). The format string is a str literal (no f/t/b prefix; implicit concatenations joined, escapes decoded, parentheses transparent) left of `%`, read with the `percentFormat` grammar (a port of ruff_python_literal's cformat parser).",
6
+ "description": "Fix malformed %-format strings, such as incomplete specifiers or unclosed %(key) names; they raise an error at run time.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -74,7 +74,7 @@
74
74
  "violation": {
75
75
  "anchor": "witness.span",
76
76
  "code": "F501",
77
- "message": "`%`-format string has invalid format string",
77
+ "message": "Fix this malformed %-format string, such as an incomplete specifier or an unclosed %(key) name.",
78
78
  "suppress": {
79
79
  "noqa": {
80
80
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f502-percent-format-expected-mapping",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F502 (percent-format-expected-mapping): a valid `%`-format string with a `%(key)` placeholder applied to a list, tuple or set display, a list or set comprehension or a generator. The format string is a str literal (no f/t/b prefix; implicit concatenations joined, escapes decoded, parentheses transparent) left of `%`, read with the `percentFormat` grammar (a port of ruff_python_literal's cformat parser).",
6
+ "description": "Pass a mapping, not a list, tuple or set, to a %-format string that uses %(key) placeholders; the call fails at run time.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f503-percent-format-expected-sequence",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F503 (percent-format-expected-sequence): a valid `%`-format string consuming more than one positional value (placeholders without a key, and `*` widths and precisions) applied to a dict display or comprehension. The format string is a str literal (no f/t/b prefix; implicit concatenations joined, escapes decoded, parentheses transparent) left of `%`, read with the `percentFormat` grammar (a port of ruff_python_literal's cformat parser).",
6
+ "description": "Pass a tuple, not a dict, to a %-format string with several positional placeholders; the call fails at run time.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f504-percent-format-extra-named-arguments",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F504 (percent-format-extra-named-arguments): a valid `%`-format string without positional placeholders applied to a dict display without `**` with a string-literal key no `%(key)` placeholder names. `formatArgs` reads the format string left of `%` (a str literal with no f/t/b prefix, implicit concatenations joined, escapes decoded, parentheses transparent) with the `percentFormat` grammar (a port of ruff_python_literal's cformat parser), and the right operand as Ruff's strings.rs does.",
6
+ "description": "Remove dict keys that no %(key) placeholder in the %-format string uses; an unused key usually means a typo or a stale argument.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f505-percent-format-missing-argument",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F505 (percent-format-missing-argument): a valid `%`-format string without positional placeholders applied to a dict display without `**`, all of whose keys are string literals, that passes no value for some `%(key)` placeholder. `formatArgs` reads the format string left of `%` (a str literal with no f/t/b prefix, implicit concatenations joined, escapes decoded, parentheses transparent) with the `percentFormat` grammar (a port of ruff_python_literal's cformat parser), and the right operand as Ruff's strings.rs does.",
6
+ "description": "Supply a value for every %(key) placeholder in a %-format string; a missing key raises KeyError at run time.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f506-percent-format-mixed-positional-and-named",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F506 (percent-format-mixed-positional-and-named): a valid `%`-format string with both a `%(key)` placeholder and a positional value (a placeholder without a key, or a `*` width or precision). The format string is a str literal (no f/t/b prefix; implicit concatenations joined, escapes decoded, parentheses transparent) left of `%`, read with the `percentFormat` grammar (a port of ruff_python_literal's cformat parser).",
6
+ "description": "Don't mix %(key) placeholders and positional placeholders in one %-format string; Python cannot format it.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -100,7 +100,7 @@
100
100
  "violation": {
101
101
  "anchor": "witness.span",
102
102
  "code": "F506",
103
- "message": "`%`-format string has mixed positional and named placeholders",
103
+ "message": "Use only %(key) placeholders or only positional ones in this format string; Python cannot format a mix.",
104
104
  "suppress": {
105
105
  "noqa": {
106
106
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f507-percent-format-positional-count-mismatch",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F507 (percent-format-positional-count-mismatch): a valid `%`-format string without `%(key)` placeholders whose positional values differ in number from a tuple display without starred items, or, with any count but one, from a right operand Ruff's ResolvedPythonType infers as one non-tuple value; with no placeholder, any right operand but a tuple display or one Ruff types as a tuple (`(1,) + (2,)`). `formatArgs` reads the format string left of `%` (a str literal with no f/t/b prefix, implicit concatenations joined, escapes decoded, parentheses transparent) with the `percentFormat` grammar (a port of ruff_python_literal's cformat parser), and the right operand as Ruff's strings.rs does. Ported from the Ruff conformance suite (rerail/conformance/ruff/rules/F507.json at 3f102adcb), with Ruff's `# noqa` honoured as the Ruff CLI honours it.",
6
+ "description": "Match the number of %-format placeholders to the number of values supplied; a mismatch raises TypeError at run time.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -64,7 +64,7 @@
64
64
  "violation": {
65
65
  "anchor": "witness.span",
66
66
  "code": "F507",
67
- "message": "`%`-format string placeholder count differs from the substitution count",
67
+ "message": "Make the number of values match the placeholders in this %-format string; a mismatch raises TypeError.",
68
68
  "suppress": {
69
69
  "noqa": {
70
70
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f508-percent-format-star-requires-sequence",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F508 (percent-format-star-requires-sequence): a valid `%`-format string with a `*` width or precision applied to a dict display or comprehension. The format string is a str literal (no f/t/b prefix; implicit concatenations joined, escapes decoded, parentheses transparent) left of `%`, read with the `percentFormat` grammar (a port of ruff_python_literal's cformat parser).",
6
+ "description": "Pass a tuple, not a dict, to a %-format string that uses a * width or precision; the call fails at run time.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -98,7 +98,7 @@
98
98
  "violation": {
99
99
  "anchor": "witness.span",
100
100
  "code": "F508",
101
- "message": "`%`-format string `*` specifier requires sequence",
101
+ "message": "Pass a tuple instead of a dict to this %-format string; its `*` width or precision takes positional values.",
102
102
  "suppress": {
103
103
  "noqa": {
104
104
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f509-percent-format-unsupported-format-character",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F509 (percent-format-unsupported-format-character): a `%`-format string the parser refuses at an unsupported conversion character. The format string is a str literal (no f/t/b prefix; implicit concatenations joined, escapes decoded, parentheses transparent) left of `%`, read with the `percentFormat` grammar (a port of ruff_python_literal's cformat parser).",
6
+ "description": "Use only valid conversion characters in Python %-format strings; an unsupported one raises ValueError at runtime.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -72,7 +72,7 @@
72
72
  "violation": {
73
73
  "anchor": "witness.span",
74
74
  "code": "F509",
75
- "message": "`%`-format string has unsupported format character",
75
+ "message": "Replace the unsupported conversion character in this %-format string with a valid one such as `s`, `d`, `r` or `f`.",
76
76
  "suppress": {
77
77
  "noqa": {
78
78
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f521-string-dot-format-invalid-format",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F521 (string-dot-format-invalid-format): a `.format` call on a str literal the format parser refuses (unmatched braces, fields nested deeper than one level, an empty attribute or index, an unclosed `[`, a bad conversion or format spec). The format string is a str literal (no f/t/b prefix; implicit concatenations joined, escapes decoded, parentheses transparent) receiving `.format`, read with the `braceFormat` grammar (a port of ruff_python_literal's format parser as pyflakes' FormatSummary reads it).",
6
+ "description": "Keep str.format() strings well-formed, with balanced braces and valid fields and format specs; a malformed one raises ValueError at runtime.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f522-string-dot-format-extra-named-arguments",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F522 (string-dot-format-extra-named-arguments): a `.format` call without `**` on a valid format string, passing a keyword argument no named field (top level or nested in a spec) reads. `formatArgs` reads the format string receiving `.format` (a str literal with no f/t/b prefix, implicit concatenations joined, escapes decoded, parentheses transparent) with the `braceFormat` grammar (a port of ruff_python_literal's format parser as pyflakes' FormatSummary reads it), and the call's arguments as Ruff's strings.rs does.",
6
+ "description": "Remove keyword arguments to str.format() that no named placeholder in the string uses; they are silently ignored.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -32,7 +32,7 @@
32
32
  "violation": {
33
33
  "anchor": "witness.span",
34
34
  "code": "F522",
35
- "message": "`.format` call has unused named argument(s)",
35
+ "message": "Remove the keyword arguments that no named placeholder in this str.format() string uses.",
36
36
  "suppress": {
37
37
  "noqa": {
38
38
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f523-string-dot-format-extra-positional-arguments",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F523 (string-dot-format-extra-positional-arguments): a `.format` call on a valid format string with a positional argument (not starred; counted by syntactic index, past a starred one too) that no automatic or numbered field reads. `formatArgs` reads the format string receiving `.format` (a str literal with no f/t/b prefix, implicit concatenations joined, escapes decoded, parentheses transparent) with the `braceFormat` grammar (a port of ruff_python_literal's format parser as pyflakes' FormatSummary reads it), and the call's arguments as Ruff's strings.rs does. Ported from the Ruff conformance suite (rerail/conformance/ruff/rules/F523.json at 3f102adcb), with Ruff's `# noqa` honoured as the Ruff CLI honours it.",
6
+ "description": "Remove positional arguments to str.format() that no placeholder in the string uses; they are silently ignored.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f524-string-dot-format-missing-arguments",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F524 (string-dot-format-missing-arguments): a `.format` call without `*` or `**` on a valid format string with a field (top level or nested in a spec) whose index is past the positional arguments or whose name no keyword argument passes. `formatArgs` reads the format string receiving `.format` (a str literal with no f/t/b prefix, implicit concatenations joined, escapes decoded, parentheses transparent) with the `braceFormat` grammar (a port of ruff_python_literal's format parser as pyflakes' FormatSummary reads it), and the call's arguments as Ruff's strings.rs does. Ported from the Ruff conformance suite (rerail/conformance/ruff/rules/F524.json at 3f102adcb), with Ruff's `# noqa` honoured as the Ruff CLI honours it.",
6
+ "description": "Pass an argument for every placeholder in a str.format() string; a missing one raises IndexError or KeyError at runtime.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f525-string-dot-format-mixing-automatic",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F525 (string-dot-format-mixing-automatic): a `.format` call on a valid format string with both an automatically numbered field (`{}`) and a manually numbered one (`{0}`), nested fields in specs included. The format string is a str literal (no f/t/b prefix; implicit concatenations joined, escapes decoded, parentheses transparent) receiving `.format`, read with the `braceFormat` grammar (a port of ruff_python_literal's format parser as pyflakes' FormatSummary reads it).",
6
+ "description": "Don't mix automatic and manually numbered fields in one str.format() string; Python raises ValueError at runtime.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f541-f-string-missing-placeholders",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F541 (f-string-missing-placeholders) with default settings: every f-string part of a string expression (an implicit concatenation counts as one expression) when no f-string part of that expression has a replacement field. `{{`/`}}` escapes are not placeholders; nested f-strings inside a replacement field or format spec are their own expressions.",
6
+ "description": "Remove the f prefix from Python f-strings that have no placeholders; it suggests interpolation that never happens.",
7
7
  "scope": { "include": ["**/*"], "exclude": [] },
8
8
  "clauses": [
9
9
  {
@@ -38,7 +38,7 @@
38
38
  "violation": {
39
39
  "anchor": "witness.span",
40
40
  "code": "F541",
41
- "message": "f-string without any placeholders",
41
+ "message": "Remove the `f` prefix from this string; it has no placeholders.",
42
42
  "suppress": {
43
43
  "noqa": {
44
44
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f601-multi-value-repeated-key-literal",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F601 (multi-value-repeated-key-literal) with default settings: a literal dictionary key (string, bytes, number, boolean, None, Ellipsis, tuple, f-string, signed number, real +/- imaginary; Ruff's is_literal_key) equal to an earlier key of the same dict display, reported on each repeat (parentheses are transparent). Equality is Ruff's HashableExpr (`compare` `text: \"structure-hash\"`): numbers fold by value (`1 == 1.0 == True`, `1 + 0j == 1`), strings by decoded value, tuples of constants element by element, anything else structurally as ComparableExpr (names without NFKC normalization). Ported from the Ruff conformance suite (rerail/conformance/ruff/rules/F601.json at 3f102adcb), with Ruff's `# noqa` honoured as the Ruff CLI honours it.",
6
+ "description": "Avoid repeating a literal key (or an equal one, like 1 and 1.0) in a Python dict literal; the later value silently overwrites the earlier one.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f602-multi-value-repeated-key-variable",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F602 (multi-value-repeated-key-variable) with default settings: a dictionary key that is a bare name equal to an earlier key of the same dict display, reported on each repeat (parentheses transparent).",
6
+ "description": "Avoid repeating the same variable as a key in a Python dict literal; the later value silently overwrites the earlier one.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -109,7 +109,7 @@
109
109
  "violation": {
110
110
  "anchor": "witness.span",
111
111
  "code": "F602",
112
- "message": "Dictionary key `$KEY` repeated",
112
+ "message": "Remove or merge the repeated key `$KEY` in this dict; the later value silently overwrites the earlier one.",
113
113
  "suppress": {
114
114
  "noqa": {
115
115
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f622-multiple-starred-expressions",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F622 (multiple-starred-expressions, a semantic syntax error) with default settings: a tuple or list assignment target (assignment, `for`, comprehension `for`, `with ... as`), at any nesting, with two or more starred elements of its own. Reported on the target tuple or list, parentheses included.",
6
+ "description": "Use at most one starred element in each Python unpacking target; two in the same target is a syntax error.",
7
7
  "scope": { "include": ["**/*"], "exclude": [] },
8
8
  "clauses": [
9
9
  {
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f632-is-literal",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F632 (is-literal) with default settings: `is` or `is not` with an operand that is a non-singleton constant (string, bytes or number literal, tuple of constants) or a list, set or dict display or comprehension, one finding per offending operator reported on the whole comparison, as in Ruff; also a comparison inside a string Ruff parses as a type definition (a string annotation, `cast`/`TypeVar` arguments, `List[\"...\"]`), reported on the comparison inside the string, once per offending operator; strings nested in one (`List['1 is x']` inside a string annotation) are read too. Ported from the Ruff conformance suite (rerail/conformance/ruff/rules/F632.json at 3f102adcb), with Ruff's `# noqa` honoured as the Ruff CLI honours it.",
6
+ "description": "Use == instead of is to compare against string, number, tuple or container literals; the identity of such values is unreliable.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f633-invalid-print-syntax",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F633 (invalid-print-syntax) with default settings: the left operand of `>>` when it resolves to the builtin `print` (or `builtins.print`), reported on `print`. tree-sitter-python parses a statement `print >> f, x` as a Python 2 print statement whose `print` is a keyword token, not a name reference, so name resolution cannot be asked there; that form falls back to a file-wide test: no binding of `print` anywhere in the file (assignment, loop, with/except and walrus targets, def/class names, parameters, imports, global/nonlocal).",
6
+ "description": "Use print()'s file argument instead of Python 2's >> redirection, which raises TypeError with the print function.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -285,7 +285,7 @@
285
285
  "violation": {
286
286
  "anchor": "witness.span",
287
287
  "code": "F633",
288
- "message": "Use of `>>` is invalid with `print` function",
288
+ "message": "Replace `>>` with print()'s `file=` argument, as in `print(msg, file=sys.stderr)`.",
289
289
  "suppress": {
290
290
  "noqa": {
291
291
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f701-break-outside-loop",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F701 (break-outside-loop, a semantic syntax error) with default settings: `break` with no enclosing `for`/`while` body between it and the nearest function or class definition. A loop's `else` block does not count as inside that loop.",
6
+ "description": "Keep break inside a for or while loop body; outside one (including a loop's else block) it is a Python syntax error.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f702-continue-outside-loop",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F702 (continue-outside-loop, a semantic syntax error) with default settings: `continue` with no enclosing `for`/`while` body between it and the nearest function or class definition. A loop's `else` block does not count as inside that loop.",
6
+ "description": "Keep continue inside a for or while loop body; outside one (including a loop's else block) it is a Python syntax error.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f706-return-outside-function",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F706 (return-outside-function, a semantic syntax error) with default settings: `return` whose nearest enclosing function or class body is not a function body (module level, or directly in a class body).",
6
+ "description": "Keep return inside a function; at module level or directly in a class body it is a Python syntax error.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f707-default-except-not-last",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F707 (default-except-not-last) with default settings: a bare `except:` handler followed by another handler of the same `try`. Reported on the `except` keyword.",
6
+ "description": "Put a bare except handler last in its try statement; Python rejects any handler after it.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f822-undefined-export",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F822 (undefined-export) with default settings, on the engine's name resolution (M10a `resolves.unresolved` on `__all__` entries): a string entry of a static module `__all__` definition (Ruff's extract_dunder_all_names) (an implicit concatenation is one entry) that names no module binding (a bare annotation included) and no builtin, in a module without a star import. `__init__.py` is exempt (Ruff reports it only in preview). Reported on the string.",
6
+ "description": "List only names the module actually defines in its __all__ (outside __init__.py); an undefined entry breaks star imports.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f823-undefined-local",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F823 (undefined-local) with default settings, on the engine's name resolution (M10a `resolves.beforeLocal`, Ruff's undefined_local): a function's first read of a name that resolves to an enclosing function's or the module's binding which the function's own later binding of the name shadows, where that binding is the function's first and latest of the name (not `global`, `nonlocal` or `del`). Reported on the read. Ported from the Ruff conformance suite (rerail/conformance/ruff/rules/F823.json at 3f102adcb), with Ruff's `# noqa` honoured as the Ruff CLI honours it.",
6
+ "description": "Don't read a variable before the function assigns it, even when an outer scope has the same name; Python raises UnboundLocalError.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -28,7 +28,7 @@
28
28
  "violation": {
29
29
  "anchor": "witness.span",
30
30
  "code": "F823",
31
- "message": "Local variable `$N` referenced before assignment",
31
+ "message": "Assign `$N` before reading it here, or declare it `global` or `nonlocal` if you meant the outer variable.",
32
32
  "suppress": {
33
33
  "noqa": {
34
34
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f842-unused-annotation",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F842 (unused-annotation) with default settings (`dummy-variable-rgx` = `^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$`), on the engine's usedness (M10a `binds` with form `annotation`, Ruff's unused_annotation): the latest binding of a name in a function or lambda scope that is a bare annotation (`x: int`, `(x): int`) nothing reads, not a dummy name. Names in strings Ruff parses as type definitions are reads (M11a).",
6
+ "description": "Remove local variables that are annotated but never assigned or read; the annotation alone does nothing.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-f901-raise-not-implemented",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's F901 (raise-not-implemented) with default settings: the exception of a `raise` (not its `from` cause) that is the name `NotImplemented` or a call whose callee is that name, parentheses transparent. Reported on the name. Ruff matches the name itself, not the builtin binding.",
6
+ "description": "Raise NotImplementedError, not NotImplemented; NotImplemented is a comparison sentinel and raising it is a TypeError.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-pie794-duplicate-class-field-definition",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's PIE794 (duplicate-class-field-definition): in a class body, an assignment or annotated assignment to a name `N` whose value does not mention `N`, after an earlier such definition of `N` in the same body.",
6
+ "description": "Define each class field once; a later definition silently replaces the earlier one.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-pie796-non-unique-enums",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's PIE796 (non-unique-enums): in a class with an `enum.Enum` base, a plain assignment whose value equals the value of an earlier assignment in the same body as Ruff's ComparableExpr (`text: \"structure\"`: literals by type and value, `1 == 0x1`, `'a' == \"a\"`, `-1 == -(1)`, not `1 == 1.0 == True`; names compared without NFKC normalization); `enum.auto()` values (alone or in a tuple) are skipped, and in stubs (`.pyi`) so are `...` and `typing.cast(T, ...)`. Ported from the Ruff conformance suite (rerail/conformance/ruff/rules/PIE796.json at 3f102adcb), with Ruff's `# noqa` honoured as the Ruff CLI honours it, and its `.py`/`.pyi` split read per file (`ast.file.path`): the suite's `select_when` gate holds wherever a matching file exists anywhere in the workspace, so in a repository it would read stubs as modules and modules as stubs.",
6
+ "description": "Give each Enum member a unique value; a duplicate becomes an alias of the earlier member instead of a new one.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-pie800-unnecessary-spread",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's PIE800 (unnecessary-spread): a dict display spread with `**` into another dict display, reported on the inner dict (inside any parentheses).",
6
+ "description": "Write the entries directly instead of spreading a dict literal into another Python dict literal.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-pie804-unnecessary-dict-kwargs",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's PIE804 (unnecessary-dict-kwargs): a call argument `**{...}` whose dict display is a single `**x` spread, empty, or has only keys that are str literals (not bytes, f- or t-strings; escapes decoded, implicit concatenations joined) whose value is a Python identifier (not a keyword). Reported on the `**` argument.",
6
+ "description": "Pass keyword arguments directly instead of unpacking a dict literal into a Python call.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-pie807-reimplemented-container-builtin",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's PIE807 (reimplemented-container-builtin): a parameterless `lambda` whose body is an empty list or dict display.",
6
+ "description": "Use list or dict directly instead of a lambda that returns an empty list or dict, such as for a default factory.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-pie810-multiple-starts-ends-with",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's PIE810 (multiple-starts-ends-with): an `or` chain with two or more operands `R.startswith(x)` (or two `R.endswith(x)`) on the same name `R`, each with one positional argument and no keywords, where the argument is not a name bound to a tuple (Ruff's is_bound_to_tuple through `resolves.binding`, read as lookup_symbol does with `stopAtGlobal`: a `def`'s `*args`, a tuple-typed value, `tuple(...)`, or a `tuple`/`Tuple` annotation or return annotation). Reported on the whole chain, once per such group.",
6
+ "description": "Pass a tuple to one startswith() or endswith() call instead of or-ing several calls on the same string.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -570,7 +570,7 @@
570
570
  "violation": {
571
571
  "anchor": "witness.span",
572
572
  "code": "PIE810",
573
- "message": "Call `$M` once with a `tuple`",
573
+ "message": "Call `$M` once with a tuple of all the prefixes or suffixes instead of or-ing several calls.",
574
574
  "each": "FIRST",
575
575
  "suppress": {
576
576
  "noqa": {
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-ret501-unnecessary-return-none",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's RET501 (unnecessary-return-none): `return None` in a function whose every `return` is bare or returns `None` (nested functions and classes are separate; generators and functions whose body is a lone `return` are skipped), unless the function has a return annotation other than `None` or a property decorator (`property`, `enum.property`, `functools.cached_property`, `abc.abstractproperty`, `types.DynamicClassAttribute`, resolved through the file's bindings and imports). Reported on the `return` statement.",
6
+ "description": "Use a bare return instead of return None in Python functions that never return anything else.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-ret502-implicit-return-value",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's RET502 (implicit-return-value): a bare `return` in a function that also has a `return` with a value other than `None` (nested functions and classes are separate; generators and functions whose body is a lone `return` are skipped), reported on the `return`.",
6
+ "description": "Use return None instead of a bare return in Python functions that also return a value; make the None result explicit.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -149,7 +149,7 @@
149
149
  "violation": {
150
150
  "anchor": "witness.span",
151
151
  "code": "RET502",
152
- "message": "Do not implicitly `return None` in function able to return non-`None` value",
152
+ "message": "Write `return None` instead of a bare `return`, since this function returns a value elsewhere.",
153
153
  "suppress": {
154
154
  "noqa": {
155
155
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-ret505-superfluous-else-return",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's RET505 (superfluous-else-return): the first `elif`/`else` clause of an `if` statement inside a function whose `if` body has a direct `return` statement and no earlier direct raise/continue/break statement, reported on the `elif`/`else` keyword. As in Ruff, only the `if` body and the first clause are compared, nested functions and classes are separate, and generator functions and functions whose body is a lone `return` are skipped.",
6
+ "description": "Remove the else or elif after an if branch that returns, and dedent its code; the branch already leaves the function.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -3,7 +3,7 @@
3
3
  "id": "ruff-ret506-superfluous-else-raise",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Ruff's RET506 (superfluous-else-raise): the first `elif`/`else` clause of an `if` statement inside a function whose `if` body has a direct `raise` statement and no earlier direct return/continue/break statement, reported on the `elif`/`else` keyword. As in Ruff, only the `if` body and the first clause are compared, nested functions and classes are separate, and generator functions and functions whose body is a lone `return` are skipped.",
6
+ "description": "Remove the else or elif after an if branch that raises, and dedent its code; the branch already leaves the function.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"