@neralabs/rerail-pack-python 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/README.md +707 -3
  2. package/licenses/bandit/UPSTREAM.md +10 -0
  3. package/licenses/ruff/UPSTREAM.md +56 -0
  4. package/pack.json +7 -20
  5. package/package.json +1 -1
  6. package/rules/bandit-b101-assert-used.json +2 -2
  7. package/rules/bandit-b102-exec-used.json +2 -2
  8. package/rules/bandit-b110-try-except-pass.json +1 -1
  9. package/rules/bandit-b112-try-except-continue.json +1 -1
  10. package/rules/bandit-b113-request-without-timeout.json +2 -2
  11. package/rules/bandit-b301-pickle.json +2 -2
  12. package/rules/bandit-b302-marshal.json +2 -2
  13. package/rules/bandit-b303-md5.json +1 -1
  14. package/rules/bandit-b305-cipher-modes.json +2 -2
  15. package/rules/bandit-b306-mktemp-q.json +2 -2
  16. package/rules/bandit-b307-eval.json +1 -1
  17. package/rules/bandit-b308-mark-safe.json +2 -2
  18. package/rules/bandit-b310-urllib-urlopen.json +1 -1
  19. package/rules/bandit-b311-random.json +1 -1
  20. package/rules/bandit-b312-telnetlib.json +1 -1
  21. package/rules/bandit-b313-xml-bad-celementtree.json +1 -1
  22. package/rules/bandit-b314-xml-bad-elementtree.json +1 -1
  23. package/rules/bandit-b315-xml-bad-expatreader.json +1 -1
  24. package/rules/bandit-b316-xml-bad-expatbuilder.json +1 -1
  25. package/rules/bandit-b317-xml-bad-sax.json +1 -1
  26. package/rules/bandit-b318-xml-bad-minidom.json +1 -1
  27. package/rules/bandit-b319-xml-bad-pulldom.json +1 -1
  28. package/rules/bandit-b321-ftplib.json +2 -2
  29. package/rules/bandit-b323-unverified-context.json +2 -2
  30. package/rules/bandit-b401-import-telnetlib.json +2 -2
  31. package/rules/bandit-b402-import-ftplib.json +2 -2
  32. package/rules/bandit-b405-import-xml-etree.json +1 -1
  33. package/rules/bandit-b407-import-xml-expat.json +1 -1
  34. package/rules/bandit-b408-import-xml-minidom.json +1 -1
  35. package/rules/bandit-b409-import-xml-pulldom.json +1 -1
  36. package/rules/bandit-b411-import-xmlrpclib.json +1 -1
  37. package/rules/bandit-b413-import-pycrypto.json +1 -1
  38. package/rules/bandit-b415-import-pyghmi.json +2 -2
  39. package/rules/bandit-b502-ssl-with-bad-version.json +2 -2
  40. package/rules/bandit-b505-weak-cryptographic-key.json +2 -2
  41. package/rules/bandit-b507-ssh-no-host-key-verification.json +2 -2
  42. package/rules/bandit-b606-start-process-with-no-shell.json +2 -2
  43. package/rules/bandit-b615-huggingface-unsafe-download.json +2 -2
  44. package/rules/ruff-async100-cancel-scope-no-checkpoint.json +2 -2
  45. package/rules/ruff-async105-trio-sync-call.json +1 -1
  46. package/rules/ruff-async115-async-zero-sleep.json +1 -1
  47. package/rules/ruff-async116-long-sleep-not-forever.json +1 -1
  48. package/rules/ruff-async210-blocking-http-call-in-async-function.json +2 -2
  49. package/rules/ruff-async221-run-process-in-async-function.json +1 -1
  50. package/rules/ruff-async222-wait-for-process-in-async-function.json +2 -2
  51. package/rules/ruff-async230-blocking-open-call-in-async-function.json +2 -2
  52. package/rules/ruff-async250-blocking-input-in-async-function.json +2 -2
  53. package/rules/ruff-async251-blocking-sleep-in-async-function.json +1 -1
  54. package/rules/ruff-b002-unary-prefix-increment-decrement.json +3 -3
  55. package/rules/ruff-b003-assignment-to-os-environ.json +2 -2
  56. package/rules/ruff-b004-unreliable-callable-check.json +1 -1
  57. package/rules/ruff-b005-strip-with-multi-characters.json +2 -2
  58. package/rules/ruff-b007-unused-loop-control-variable.json +1 -1
  59. package/rules/ruff-b009-get-attr-with-constant.json +1 -1
  60. package/rules/ruff-b010-set-attr-with-constant.json +2 -2
  61. package/rules/ruff-b011-assert-false.json +1 -1
  62. package/rules/ruff-b013-redundant-tuple-in-exception-handler.json +1 -1
  63. package/rules/ruff-b014-duplicate-handler-exception.json +1 -1
  64. package/rules/ruff-b016-raise-literal.json +1 -1
  65. package/rules/ruff-b020-loop-variable-overrides-iterator.json +1 -1
  66. package/rules/ruff-b021-f-string-docstring.json +1 -1
  67. package/rules/ruff-b022-useless-contextlib-suppress.json +1 -1
  68. package/rules/ruff-b023-function-uses-loop-variable.json +2 -2
  69. package/rules/ruff-b025-duplicate-try-block-exception.json +1 -1
  70. package/rules/ruff-b026-star-arg-unpacking-after-keyword-arg.json +1 -1
  71. package/rules/ruff-b028-no-explicit-stacklevel.json +2 -2
  72. package/rules/ruff-b029-except-with-empty-tuple.json +1 -1
  73. package/rules/ruff-b030-except-with-non-exception-classes.json +406 -0
  74. package/rules/ruff-b032-unintentional-type-annotation.json +1 -1
  75. package/rules/ruff-b033-duplicate-value.json +1 -1
  76. package/rules/ruff-b034-re-sub-positional-args.json +1 -1
  77. package/rules/ruff-b039-mutable-contextvar-default.json +2 -2
  78. package/rules/ruff-b904-raise-without-from-inside-except.json +2 -2
  79. package/rules/ruff-b905-zip-without-explicit-strict.json +1 -1
  80. package/rules/ruff-e711-none-comparison.json +1 -1
  81. package/rules/ruff-e721-type-comparison.json +1 -1
  82. package/rules/ruff-e722-bare-except.json +2 -2
  83. package/rules/ruff-e742-ambiguous-class-name.json +2 -2
  84. package/rules/ruff-e743-ambiguous-function-name.json +2 -2
  85. package/rules/ruff-f403-undefined-local-with-import-star.json +1 -1
  86. package/rules/ruff-f405-undefined-local-with-import-star-usage.json +2 -2
  87. package/rules/ruff-f406-undefined-local-with-nested-import-star-usage.json +2 -2
  88. package/rules/ruff-f407-future-feature-not-defined.json +1 -1
  89. package/rules/ruff-f501-percent-format-invalid-format.json +2 -2
  90. package/rules/ruff-f502-percent-format-expected-mapping.json +1 -1
  91. package/rules/ruff-f503-percent-format-expected-sequence.json +1 -1
  92. package/rules/ruff-f504-percent-format-extra-named-arguments.json +1 -1
  93. package/rules/ruff-f505-percent-format-missing-argument.json +1 -1
  94. package/rules/ruff-f506-percent-format-mixed-positional-and-named.json +2 -2
  95. package/rules/ruff-f507-percent-format-positional-count-mismatch.json +2 -2
  96. package/rules/ruff-f508-percent-format-star-requires-sequence.json +2 -2
  97. package/rules/ruff-f509-percent-format-unsupported-format-character.json +2 -2
  98. package/rules/ruff-f521-string-dot-format-invalid-format.json +1 -1
  99. package/rules/ruff-f522-string-dot-format-extra-named-arguments.json +2 -2
  100. package/rules/ruff-f523-string-dot-format-extra-positional-arguments.json +1 -1
  101. package/rules/ruff-f524-string-dot-format-missing-arguments.json +1 -1
  102. package/rules/ruff-f525-string-dot-format-mixing-automatic.json +1 -1
  103. package/rules/ruff-f541-f-string-missing-placeholders.json +2 -2
  104. package/rules/ruff-f601-multi-value-repeated-key-literal.json +1 -1
  105. package/rules/ruff-f602-multi-value-repeated-key-variable.json +2 -2
  106. package/rules/ruff-f622-multiple-starred-expressions.json +1 -1
  107. package/rules/ruff-f632-is-literal.json +1 -1
  108. package/rules/ruff-f633-invalid-print-syntax.json +2 -2
  109. package/rules/ruff-f701-break-outside-loop.json +1 -1
  110. package/rules/ruff-f702-continue-outside-loop.json +1 -1
  111. package/rules/ruff-f706-return-outside-function.json +1 -1
  112. package/rules/ruff-f707-default-except-not-last.json +1 -1
  113. package/rules/ruff-f822-undefined-export.json +1 -1
  114. package/rules/ruff-f823-undefined-local.json +2 -2
  115. package/rules/ruff-f842-unused-annotation.json +1 -1
  116. package/rules/ruff-f901-raise-not-implemented.json +1 -1
  117. package/rules/ruff-pie794-duplicate-class-field-definition.json +1 -1
  118. package/rules/ruff-pie796-non-unique-enums.json +1 -1
  119. package/rules/ruff-pie800-unnecessary-spread.json +1 -1
  120. package/rules/ruff-pie804-unnecessary-dict-kwargs.json +1 -1
  121. package/rules/ruff-pie807-reimplemented-container-builtin.json +1 -1
  122. package/rules/ruff-pie810-multiple-starts-ends-with.json +2 -2
  123. package/rules/ruff-ret501-unnecessary-return-none.json +1 -1
  124. package/rules/ruff-ret502-implicit-return-value.json +2 -2
  125. package/rules/ruff-ret505-superfluous-else-return.json +1 -1
  126. package/rules/ruff-ret506-superfluous-else-raise.json +1 -1
  127. package/rules/ruff-ret507-superfluous-else-continue.json +1 -1
  128. package/rules/ruff-ret508-superfluous-else-break.json +1 -1
  129. package/rules/ruff-sim101-duplicate-isinstance-call.json +1 -1
  130. package/rules/ruff-sim107-return-in-try-except-finally.json +2 -2
  131. package/rules/ruff-sim109-compare-with-tuple.json +1 -1
  132. package/rules/ruff-sim112-uncapitalized-environment-variables.json +2 -2
  133. package/rules/ruff-sim113-enumerate-for-loop.json +1 -1
  134. package/rules/ruff-sim208-double-negation.json +1 -1
  135. package/rules/ruff-sim210-if-expr-with-true-false.json +1 -1
  136. package/rules/ruff-sim211-if-expr-with-false-true.json +1 -1
  137. package/rules/ruff-sim212-if-expr-with-twisted-arms.json +2 -2
  138. package/rules/ruff-sim300-yoda-conditions.json +2 -2
  139. package/rules/ruff-sim905-split-static-string.json +1 -1
  140. package/rules/ruff-sim910-dict-get-with-none-default.json +1 -1
  141. package/rules/ruff-t100-debugger.json +3 -3
  142. package/rules/bandit-b406-import-xml-sax.json +0 -73
  143. package/rules/bandit-b610-django-extra-used.json +0 -268
  144. package/rules/ruff-f722-forward-annotation-syntax-error.json +0 -654
@@ -14,6 +14,7 @@ Paths are relative to the pack directory, `packs/python/`.
14
14
 
15
15
  | File | Upstream path | Copy |
16
16
  |---|---|---|
17
+ | `upstream/bandit/fixtures/__init__.py` | `examples/__init__.py` | verbatim |
17
18
  | `upstream/bandit/fixtures/assert.py` | `examples/assert.py` | verbatim |
18
19
  | `upstream/bandit/fixtures/binding.py` | `examples/binding.py` | verbatim |
19
20
  | `upstream/bandit/fixtures/cipher-modes.py` | `examples/cipher-modes.py` | verbatim |
@@ -38,9 +39,12 @@ Paths are relative to the pack directory, `packs/python/`.
38
39
  | `upstream/bandit/fixtures/imports-function.py` | `examples/imports-function.py` | verbatim |
39
40
  | `upstream/bandit/fixtures/imports-with-importlib.py` | `examples/imports-with-importlib.py` | verbatim |
40
41
  | `upstream/bandit/fixtures/imports.py` | `examples/imports.py` | verbatim |
42
+ | `upstream/bandit/fixtures/init-py-test/__init__.py` | `examples/init-py-test/__init__.py` | verbatim |
43
+ | `upstream/bandit/fixtures/init-py-test/subdirectory-okay.py` | `examples/init-py-test/subdirectory-okay.py` | verbatim |
41
44
  | `upstream/bandit/fixtures/jinja2_templating.py` | `examples/jinja2_templating.py` | verbatim |
42
45
  | `upstream/bandit/fixtures/jsonpickle.py` | `examples/jsonpickle.py` | verbatim |
43
46
  | `upstream/bandit/fixtures/logging_config_insecure_listen.py` | `examples/logging_config_insecure_listen.py` | verbatim |
47
+ | `upstream/bandit/fixtures/long_set.py` | `examples/long_set.py` | verbatim |
44
48
  | `upstream/bandit/fixtures/mako_templating.py` | `examples/mako_templating.py` | verbatim |
45
49
  | `upstream/bandit/fixtures/mark_safe.py` | `examples/mark_safe.py` | verbatim |
46
50
  | `upstream/bandit/fixtures/mark_safe_insecure.py` | `examples/mark_safe_insecure.py` | verbatim |
@@ -52,10 +56,14 @@ Paths are relative to the pack directory, `packs/python/`.
52
56
  | `upstream/bandit/fixtures/mktemp.py` | `examples/mktemp.py` | verbatim |
53
57
  | `upstream/bandit/fixtures/multiline_statement.py` | `examples/multiline_statement.py` | verbatim |
54
58
  | `upstream/bandit/fixtures/new_candidates-all.py` | `examples/new_candidates-all.py` | verbatim |
59
+ | `upstream/bandit/fixtures/new_candidates-none.py` | `examples/new_candidates-none.py` | verbatim |
55
60
  | `upstream/bandit/fixtures/new_candidates-nosec.py` | `examples/new_candidates-nosec.py` | verbatim |
56
61
  | `upstream/bandit/fixtures/new_candidates-some.py` | `examples/new_candidates-some.py` | verbatim |
57
62
  | `upstream/bandit/fixtures/no_host_key_verification.py` | `examples/no_host_key_verification.py` | verbatim |
63
+ | `upstream/bandit/fixtures/nonsense.py` | `examples/nonsense.py` | verbatim |
64
+ | `upstream/bandit/fixtures/nonsense2.py` | `examples/nonsense2.py` | verbatim |
58
65
  | `upstream/bandit/fixtures/nosec.py` | `examples/nosec.py` | verbatim |
66
+ | `upstream/bandit/fixtures/okay.py` | `examples/okay.py` | verbatim |
59
67
  | `upstream/bandit/fixtures/os-chmod.py` | `examples/os-chmod.py` | verbatim |
60
68
  | `upstream/bandit/fixtures/os-exec.py` | `examples/os-exec.py` | verbatim |
61
69
  | `upstream/bandit/fixtures/os-popen.py` | `examples/os-popen.py` | verbatim |
@@ -68,6 +76,7 @@ Paths are relative to the pack directory, `packs/python/`.
68
76
  | `upstream/bandit/fixtures/pickle_deserialize.py` | `examples/pickle_deserialize.py` | verbatim |
69
77
  | `upstream/bandit/fixtures/popen_wrappers.py` | `examples/popen_wrappers.py` | verbatim |
70
78
  | `upstream/bandit/fixtures/pycrypto.py` | `examples/pycrypto.py` | verbatim |
79
+ | `upstream/bandit/fixtures/pycryptodome.py` | `examples/pycryptodome.py` | verbatim |
71
80
  | `upstream/bandit/fixtures/pyghmi.py` | `examples/pyghmi.py` | verbatim |
72
81
  | `upstream/bandit/fixtures/pytorch_load.py` | `examples/pytorch_load.py` | verbatim |
73
82
  | `upstream/bandit/fixtures/random_module.py` | `examples/random_module.py` | verbatim |
@@ -83,6 +92,7 @@ Paths are relative to the pack directory, `packs/python/`.
83
92
  | `upstream/bandit/fixtures/tarfile_extractall.py` | `examples/tarfile_extractall.py` | verbatim |
84
93
  | `upstream/bandit/fixtures/telnetlib.py` | `examples/telnetlib.py` | verbatim |
85
94
  | `upstream/bandit/fixtures/trojansource.py` | `examples/trojansource.py` | verbatim |
95
+ | `upstream/bandit/fixtures/trojansource_latin1.py` | `examples/trojansource_latin1.py` | verbatim |
86
96
  | `upstream/bandit/fixtures/try_except_continue.py` | `examples/try_except_continue.py` | verbatim |
87
97
  | `upstream/bandit/fixtures/try_except_pass.py` | `examples/try_except_pass.py` | verbatim |
88
98
  | `upstream/bandit/fixtures/unverified_context.py` | `examples/unverified_context.py` | verbatim |
@@ -10,6 +10,16 @@ rest is under the Apache License 2.0 (the pack's `LICENSE`): the recorders `upst
10
10
 
11
11
  Ruff's `LICENSE` also carries the notices of the projects Ruff derives from, Pyflakes among them. Ruff's pyflakes fixtures come with that notice.
12
12
 
13
+ Some of Ruff's rules are ports of plugins under copyleft licences, and Ruff's fixtures for them carry those plugins' test
14
+ code. Nothing under these upstream paths is copied, so their rules are not recorded, and no port readiness recording
15
+ holds their text (`upstream/ruff/generate.py`, the port readiness recorder and the pack check all read this list):
16
+
17
+ - Not copied: `crates/ruff_linter/resources/test/fixtures/flake8_builtins/` — flake8-builtins, GPL-2.0
18
+ - Not copied: `crates/ruff_linter/resources/test/fixtures/flake8_django/` — flake8-django, GPL-3.0-or-later
19
+ - Not copied: `crates/ruff_linter/resources/test/fixtures/flake8_executable/` — flake8-executable, LGPL-3.0-or-later
20
+ - Not copied: `crates/ruff_linter/resources/test/fixtures/pylint/` — pylint, GPL-2.0-or-later
21
+ - Not copied: `crates/ruff_linter/resources/test/fixtures/refurb/` — refurb, GPL-3.0-only
22
+
13
23
  Paths are relative to the pack directory, `packs/python/`.
14
24
 
15
25
  | File | Upstream path | Copy |
@@ -44,16 +54,20 @@ Paths are relative to the pack directory, `packs/python/`.
44
54
  | `upstream/ruff/fixtures/flake8_bugbear/B006_8.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B006_8.py` | verbatim |
45
55
  | `upstream/ruff/fixtures/flake8_bugbear/B006_9.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B006_9.py` | verbatim |
46
56
  | `upstream/ruff/fixtures/flake8_bugbear/B006_B008.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B006_B008.py` | verbatim |
57
+ | `upstream/ruff/fixtures/flake8_bugbear/B006_extended.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B006_extended.py` | verbatim |
47
58
  | `upstream/ruff/fixtures/flake8_bugbear/B007.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B007.py` | verbatim |
59
+ | `upstream/ruff/fixtures/flake8_bugbear/B008_extended.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B008_extended.py` | verbatim |
48
60
  | `upstream/ruff/fixtures/flake8_bugbear/B009_B010.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B009_B010.py` | verbatim |
49
61
  | `upstream/ruff/fixtures/flake8_bugbear/B011.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B011.py` | verbatim |
50
62
  | `upstream/ruff/fixtures/flake8_bugbear/B012.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B012.py` | verbatim |
51
63
  | `upstream/ruff/fixtures/flake8_bugbear/B013.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B013.py` | verbatim |
52
64
  | `upstream/ruff/fixtures/flake8_bugbear/B014.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B014.py` | verbatim |
65
+ | `upstream/ruff/fixtures/flake8_bugbear/B015.ipynb` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B015.ipynb` | verbatim |
53
66
  | `upstream/ruff/fixtures/flake8_bugbear/B015.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B015.py` | verbatim |
54
67
  | `upstream/ruff/fixtures/flake8_bugbear/B016.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B016.py` | verbatim |
55
68
  | `upstream/ruff/fixtures/flake8_bugbear/B017_0.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B017_0.py` | verbatim |
56
69
  | `upstream/ruff/fixtures/flake8_bugbear/B017_1.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B017_1.py` | verbatim |
70
+ | `upstream/ruff/fixtures/flake8_bugbear/B018.ipynb` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B018.ipynb` | verbatim |
57
71
  | `upstream/ruff/fixtures/flake8_bugbear/B018.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B018.py` | verbatim |
58
72
  | `upstream/ruff/fixtures/flake8_bugbear/B019.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B019.py` | verbatim |
59
73
  | `upstream/ruff/fixtures/flake8_bugbear/B020.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B020.py` | verbatim |
@@ -73,7 +87,9 @@ Paths are relative to the pack directory, `packs/python/`.
73
87
  | `upstream/ruff/fixtures/flake8_bugbear/B033.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B033.py` | verbatim |
74
88
  | `upstream/ruff/fixtures/flake8_bugbear/B034.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B034.py` | verbatim |
75
89
  | `upstream/ruff/fixtures/flake8_bugbear/B035.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B035.py` | verbatim |
90
+ | `upstream/ruff/fixtures/flake8_bugbear/B035_py315.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B035_py315.py` | verbatim |
76
91
  | `upstream/ruff/fixtures/flake8_bugbear/B039.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B039.py` | verbatim |
92
+ | `upstream/ruff/fixtures/flake8_bugbear/B039_extended.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B039_extended.py` | verbatim |
77
93
  | `upstream/ruff/fixtures/flake8_bugbear/B904.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B904.py` | verbatim |
78
94
  | `upstream/ruff/fixtures/flake8_bugbear/B905.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B905.py` | verbatim |
79
95
  | `upstream/ruff/fixtures/flake8_bugbear/B911.py` | `crates/ruff_linter/resources/test/fixtures/flake8_bugbear/B911.py` | verbatim |
@@ -105,6 +121,7 @@ Paths are relative to the pack directory, `packs/python/`.
105
121
  | `upstream/ruff/fixtures/flake8_simplify/SIM105_2.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM105_2.py` | verbatim |
106
122
  | `upstream/ruff/fixtures/flake8_simplify/SIM105_3.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM105_3.py` | verbatim |
107
123
  | `upstream/ruff/fixtures/flake8_simplify/SIM105_4.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM105_4.py` | verbatim |
124
+ | `upstream/ruff/fixtures/flake8_simplify/SIM105_5.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM105_5.py` | verbatim |
108
125
  | `upstream/ruff/fixtures/flake8_simplify/SIM107.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM107.py` | verbatim |
109
126
  | `upstream/ruff/fixtures/flake8_simplify/SIM108.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM108.py` | verbatim |
110
127
  | `upstream/ruff/fixtures/flake8_simplify/SIM109.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM109.py` | verbatim |
@@ -132,6 +149,7 @@ Paths are relative to the pack directory, `packs/python/`.
132
149
  | `upstream/ruff/fixtures/flake8_simplify/SIM905.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM905.py` | verbatim |
133
150
  | `upstream/ruff/fixtures/flake8_simplify/SIM910.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM910.py` | verbatim |
134
151
  | `upstream/ruff/fixtures/flake8_simplify/SIM911.py` | `crates/ruff_linter/resources/test/fixtures/flake8_simplify/SIM911.py` | verbatim |
152
+ | `upstream/ruff/fixtures/isort/required_imports/unused.py` | `crates/ruff_linter/resources/test/fixtures/isort/required_imports/unused.py` | verbatim |
135
153
  | `upstream/ruff/fixtures/pep8_naming/N999/module/MODULE/__init__.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/MODULE/__init__.py` | verbatim |
136
154
  | `upstream/ruff/fixtures/pep8_naming/N999/module/MODULE/file.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/MODULE/file.py` | verbatim |
137
155
  | `upstream/ruff/fixtures/pep8_naming/N999/module/flake9/__init__.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/flake9/__init__.py` | verbatim |
@@ -140,17 +158,26 @@ Paths are relative to the pack directory, `packs/python/`.
140
158
  | `upstream/ruff/fixtures/pep8_naming/N999/module/mod with spaces/__init__.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/mod with spaces/__init__.py` | verbatim |
141
159
  | `upstream/ruff/fixtures/pep8_naming/N999/module/mod with spaces/file.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/mod with spaces/file.py` | verbatim |
142
160
  | `upstream/ruff/fixtures/pep8_naming/N999/module/mod-with-dashes/__init__.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/mod-with-dashes/__init__.py` | verbatim |
161
+ | `upstream/ruff/fixtures/pep8_naming/N999/module/no_module/test.txt` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/no_module/test.txt` | verbatim |
143
162
  | `upstream/ruff/fixtures/pep8_naming/N999/module/valid_name/__init__.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/valid_name/__init__.py` | verbatim |
144
163
  | `upstream/ruff/fixtures/pep8_naming/N999/module/valid_name/__main__.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/valid_name/__main__.py` | verbatim |
145
164
  | `upstream/ruff/fixtures/pep8_naming/N999/module/valid_name/__setup__.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/valid_name/__setup__.py` | verbatim |
146
165
  | `upstream/ruff/fixtures/pep8_naming/N999/module/valid_name/file-with-dashes.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/valid_name/file-with-dashes.py` | verbatim |
166
+ | `upstream/ruff/fixtures/pep8_naming/N999/module/valid_name/file-with-dashes` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/N999/module/valid_name/file-with-dashes` | verbatim |
167
+ | `upstream/ruff/fixtures/pep8_naming/ignore_names/N999/badAllowed/__init__.py` | `crates/ruff_linter/resources/test/fixtures/pep8_naming/ignore_names/N999/badAllowed/__init__.py` | verbatim |
147
168
  | `upstream/ruff/fixtures/pycodestyle/E40.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E40.py` | verbatim |
169
+ | `upstream/ruff/fixtures/pycodestyle/E402.ipynb` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402.ipynb` | verbatim |
148
170
  | `upstream/ruff/fixtures/pycodestyle/E402_0.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_0.py` | verbatim |
149
171
  | `upstream/ruff/fixtures/pycodestyle/E402_1.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_1.py` | verbatim |
150
172
  | `upstream/ruff/fixtures/pycodestyle/E402_2.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_2.py` | verbatim |
151
173
  | `upstream/ruff/fixtures/pycodestyle/E402_3.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_3.py` | verbatim |
152
174
  | `upstream/ruff/fixtures/pycodestyle/E402_4.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_4.py` | verbatim |
153
175
  | `upstream/ruff/fixtures/pycodestyle/E402_5.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_5.py` | verbatim |
176
+ | `upstream/ruff/fixtures/pycodestyle/E402_comments.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_comments.py` | verbatim |
177
+ | `upstream/ruff/fixtures/pycodestyle/E402_docstring.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_docstring.py` | verbatim |
178
+ | `upstream/ruff/fixtures/pycodestyle/E402_future.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_future.py` | verbatim |
179
+ | `upstream/ruff/fixtures/pycodestyle/E402_shebang.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_shebang.py` | verbatim |
180
+ | `upstream/ruff/fixtures/pycodestyle/E402_shebang_docstring_and_future.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E402_shebang_docstring_and_future.py` | verbatim |
154
181
  | `upstream/ruff/fixtures/pycodestyle/E711.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E711.py` | verbatim |
155
182
  | `upstream/ruff/fixtures/pycodestyle/E712.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E712.py` | verbatim |
156
183
  | `upstream/ruff/fixtures/pycodestyle/E713.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E713.py` | verbatim |
@@ -162,6 +189,7 @@ Paths are relative to the pack directory, `packs/python/`.
162
189
  | `upstream/ruff/fixtures/pycodestyle/E741.pyi` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E741.pyi` | verbatim |
163
190
  | `upstream/ruff/fixtures/pycodestyle/E742.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E742.py` | verbatim |
164
191
  | `upstream/ruff/fixtures/pycodestyle/E743.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/E743.py` | verbatim |
192
+ | `upstream/ruff/fixtures/pycodestyle/W391_after_empty_cell_fix.ipynb` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/W391_after_empty_cell_fix.ipynb` | verbatim |
165
193
  | `upstream/ruff/fixtures/pycodestyle/W605_0.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/W605_0.py` | verbatim |
166
194
  | `upstream/ruff/fixtures/pycodestyle/W605_1.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/W605_1.py` | verbatim |
167
195
  | `upstream/ruff/fixtures/pycodestyle/constant_literals.py` | `crates/ruff_linter/resources/test/fixtures/pycodestyle/constant_literals.py` | verbatim |
@@ -189,7 +217,10 @@ Paths are relative to the pack directory, `packs/python/`.
189
217
  | `upstream/ruff/fixtures/pyflakes/F401_28__all_multiple/__init__.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_28__all_multiple/__init__.py` | verbatim |
190
218
  | `upstream/ruff/fixtures/pyflakes/F401_29__all_conditional/__init__.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_29__all_conditional/__init__.py` | verbatim |
191
219
  | `upstream/ruff/fixtures/pyflakes/F401_3.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_3.py` | verbatim |
220
+ | `upstream/ruff/fixtures/pyflakes/F401_30.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_30.py` | verbatim |
221
+ | `upstream/ruff/fixtures/pyflakes/F401_31.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_31.py` | verbatim |
192
222
  | `upstream/ruff/fixtures/pyflakes/F401_32.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_32.py` | verbatim |
223
+ | `upstream/ruff/fixtures/pyflakes/F401_33/__init__.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_33/__init__.py` | verbatim |
193
224
  | `upstream/ruff/fixtures/pyflakes/F401_34.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_34.py` | verbatim |
194
225
  | `upstream/ruff/fixtures/pyflakes/F401_35.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_35.py` | verbatim |
195
226
  | `upstream/ruff/fixtures/pyflakes/F401_4.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_4.py` | verbatim |
@@ -198,6 +229,7 @@ Paths are relative to the pack directory, `packs/python/`.
198
229
  | `upstream/ruff/fixtures/pyflakes/F401_7.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_7.py` | verbatim |
199
230
  | `upstream/ruff/fixtures/pyflakes/F401_8.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_8.py` | verbatim |
200
231
  | `upstream/ruff/fixtures/pyflakes/F401_9.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F401_9.py` | verbatim |
232
+ | `upstream/ruff/fixtures/pyflakes/F402.ipynb` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F402.ipynb` | verbatim |
201
233
  | `upstream/ruff/fixtures/pyflakes/F402.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F402.py` | verbatim |
202
234
  | `upstream/ruff/fixtures/pyflakes/F403.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F403.py` | verbatim |
203
235
  | `upstream/ruff/fixtures/pyflakes/F404_0.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F404_0.py` | verbatim |
@@ -256,7 +288,9 @@ Paths are relative to the pack directory, `packs/python/`.
256
288
  | `upstream/ruff/fixtures/pyflakes/F811_30.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F811_30.py` | verbatim |
257
289
  | `upstream/ruff/fixtures/pyflakes/F811_31.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F811_31.py` | verbatim |
258
290
  | `upstream/ruff/fixtures/pyflakes/F811_32.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F811_32.py` | verbatim |
291
+ | `upstream/ruff/fixtures/pyflakes/F811_33.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F811_33.py` | verbatim |
259
292
  | `upstream/ruff/fixtures/pyflakes/F811_33.pyi` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F811_33.pyi` | verbatim |
293
+ | `upstream/ruff/fixtures/pyflakes/F811_34.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F811_34.py` | verbatim |
260
294
  | `upstream/ruff/fixtures/pyflakes/F811_35.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F811_35.py` | verbatim |
261
295
  | `upstream/ruff/fixtures/pyflakes/F811_36.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F811_36.py` | verbatim |
262
296
  | `upstream/ruff/fixtures/pyflakes/F811_4.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F811_4.py` | verbatim |
@@ -281,6 +315,7 @@ Paths are relative to the pack directory, `packs/python/`.
281
315
  | `upstream/ruff/fixtures/pyflakes/F821_2.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_2.py` | verbatim |
282
316
  | `upstream/ruff/fixtures/pyflakes/F821_20.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_20.py` | verbatim |
283
317
  | `upstream/ruff/fixtures/pyflakes/F821_21.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_21.py` | verbatim |
318
+ | `upstream/ruff/fixtures/pyflakes/F821_22.ipynb` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_22.ipynb` | verbatim |
284
319
  | `upstream/ruff/fixtures/pyflakes/F821_23.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_23.py` | verbatim |
285
320
  | `upstream/ruff/fixtures/pyflakes/F821_24.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_24.py` | verbatim |
286
321
  | `upstream/ruff/fixtures/pyflakes/F821_25.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_25.py` | verbatim |
@@ -288,6 +323,7 @@ Paths are relative to the pack directory, `packs/python/`.
288
323
  | `upstream/ruff/fixtures/pyflakes/F821_26.pyi` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_26.pyi` | verbatim |
289
324
  | `upstream/ruff/fixtures/pyflakes/F821_27.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_27.py` | verbatim |
290
325
  | `upstream/ruff/fixtures/pyflakes/F821_28.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_28.py` | verbatim |
326
+ | `upstream/ruff/fixtures/pyflakes/F821_29.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_29.py` | verbatim |
291
327
  | `upstream/ruff/fixtures/pyflakes/F821_3.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_3.py` | verbatim |
292
328
  | `upstream/ruff/fixtures/pyflakes/F821_30.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_30.py` | verbatim |
293
329
  | `upstream/ruff/fixtures/pyflakes/F821_31.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/F821_31.py` | verbatim |
@@ -319,10 +355,13 @@ Paths are relative to the pack directory, `packs/python/`.
319
355
  | `upstream/ruff/fixtures/pyflakes/builtins.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/builtins.py` | verbatim |
320
356
  | `upstream/ruff/fixtures/pyflakes/future_annotations.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/future_annotations.py` | verbatim |
321
357
  | `upstream/ruff/fixtures/pyflakes/multi_statement_lines.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/multi_statement_lines.py` | verbatim |
358
+ | `upstream/ruff/fixtures/pyflakes/project/foo/bar.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/project/foo/bar.py` | verbatim |
359
+ | `upstream/ruff/fixtures/pyflakes/project/foo/bop/baz.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/project/foo/bop/baz.py` | verbatim |
322
360
  | `upstream/ruff/fixtures/pyflakes/typing_modules.py` | `crates/ruff_linter/resources/test/fixtures/pyflakes/typing_modules.py` | verbatim |
323
361
  | `upstream/ruff/fixtures/ruff/RUF050_F401.py` | `crates/ruff_linter/resources/test/fixtures/ruff/RUF050_F401.py` | verbatim |
324
362
  | `upstream/ruff/fixtures/ruff/RUF072_RUF047_SIM105.py` | `crates/ruff_linter/resources/test/fixtures/ruff/RUF072_RUF047_SIM105.py` | verbatim |
325
363
  | `upstream/ruff/fixtures/ruff/RUF072_SIM105.py` | `crates/ruff_linter/resources/test/fixtures/ruff/RUF072_SIM105.py` | verbatim |
364
+ | `upstream/ruff/fixtures/ruff/RUF100_0.py` | `crates/ruff_linter/resources/test/fixtures/ruff/RUF100_0.py` | verbatim |
326
365
  | `upstream/ruff/fixtures/ruff/RUF100_1.py` | `crates/ruff_linter/resources/test/fixtures/ruff/RUF100_1.py` | verbatim |
327
366
  | `upstream/ruff/fixtures/ruff/RUF100_2.py` | `crates/ruff_linter/resources/test/fixtures/ruff/RUF100_2.py` | verbatim |
328
367
  | `upstream/ruff/fixtures/ruff/RUF100_3.py` | `crates/ruff_linter/resources/test/fixtures/ruff/RUF100_3.py` | verbatim |
@@ -333,6 +372,23 @@ Paths are relative to the pack directory, `packs/python/`.
333
372
  | `upstream/ruff/fixtures/ruff/ruff_noqa_all.py` | `crates/ruff_linter/resources/test/fixtures/ruff/ruff_noqa_all.py` | verbatim |
334
373
  | `upstream/ruff/fixtures/ruff/ruff_noqa_codes.py` | `crates/ruff_linter/resources/test/fixtures/ruff/ruff_noqa_codes.py` | verbatim |
335
374
  | `upstream/ruff/fixtures/ruff/ruff_noqa_invalid.py` | `crates/ruff_linter/resources/test/fixtures/ruff/ruff_noqa_invalid.py` | verbatim |
375
+ | `upstream/ruff/fixtures/ruff/ruff_per_file_ignores.py` | `crates/ruff_linter/resources/test/fixtures/ruff/ruff_per_file_ignores.py` | verbatim |
376
+ | `upstream/ruff/fixtures/ruff/suppressions.py` | `crates/ruff_linter/resources/test/fixtures/ruff/suppressions.py` | verbatim |
377
+ | `upstream/ruff/fixtures/ruff_notebook/jupyter/add_missing_cell_id.ipynb` | `crates/ruff_notebook/resources/test/fixtures/jupyter/add_missing_cell_id.ipynb` | verbatim |
378
+ | `upstream/ruff/fixtures/ruff_notebook/jupyter/before_fix.ipynb` | `crates/ruff_notebook/resources/test/fixtures/jupyter/before_fix.ipynb` | verbatim |
379
+ | `upstream/ruff/fixtures/ruff_notebook/jupyter/ipy_escape_command.ipynb` | `crates/ruff_notebook/resources/test/fixtures/jupyter/ipy_escape_command.ipynb` | verbatim |
380
+ | `upstream/ruff/fixtures/ruff_notebook/jupyter/no_cell_id.ipynb` | `crates/ruff_notebook/resources/test/fixtures/jupyter/no_cell_id.ipynb` | verbatim |
381
+ | `upstream/ruff/fixtures/ruff_notebook/jupyter/undefined_name.ipynb` | `crates/ruff_notebook/resources/test/fixtures/jupyter/undefined_name.ipynb` | verbatim |
382
+ | `upstream/ruff/fixtures/ruff_notebook/jupyter/unused_variable.ipynb` | `crates/ruff_notebook/resources/test/fixtures/jupyter/unused_variable.ipynb` | verbatim |
383
+ | `upstream/ruff/fixtures/ruff_notebook/jupyter/vscode_language_id.ipynb` | `crates/ruff_notebook/resources/test/fixtures/jupyter/vscode_language_id.ipynb` | verbatim |
384
+ | `upstream/ruff/fixtures/syntax_errors/await_scope.ipynb` | `crates/ruff_linter/resources/test/fixtures/syntax_errors/await_scope.ipynb` | verbatim |
336
385
  | `upstream/ruff/fixtures/syntax_errors/late_future_import.py` | `crates/ruff_linter/resources/test/fixtures/syntax_errors/late_future_import.py` | verbatim |
337
386
  | `upstream/ruff/fixtures/syntax_errors/return_outside_function.py` | `crates/ruff_linter/resources/test/fixtures/syntax_errors/return_outside_function.py` | verbatim |
338
387
  | `upstream/ruff/fixtures/syntax_errors/yield_scope.py` | `crates/ruff_linter/resources/test/fixtures/syntax_errors/yield_scope.py` | verbatim |
388
+
389
+ > `recording.json` is a port readiness recording, and no file of this pack, so it is recorded here rather than in the
390
+ > table above: the tool-pack's `recording.lock` names it and a GitHub release holds the bytes (docs/port-readiness.md).
391
+ > It carries excerpts of this upstream's tests (`crates/ruff_linter/src/rules/*/mod.rs`,
392
+ > `crates/ruff_linter/src/linter.rs`: their test modules' string literals), redistributed under the licence above,
393
+ > together with Rerail's Apache-2.0; the LICENSE beside this file is this upstream's own, at the pinned commit.
394
+
package/pack.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "id": "python",
4
4
  "name": "Python",
5
5
  "category": "language",
6
- "covers": "138 Ruff and Bandit rules ported to Rerail, each scored against the tool's own recorded findings on its test fixtures.",
6
+ "covers": "136 Ruff and Bandit rules ported to Rerail, each scored against the tool's own recorded findings on its test fixtures.",
7
7
  "reason": "matches Python",
8
8
  "match": {
9
9
  "any": [
@@ -213,6 +213,12 @@
213
213
  "title": "Ruff B029: Except with empty tuple",
214
214
  "group": "Ruff"
215
215
  },
216
+ {
217
+ "id": "ruff-b030-except-with-non-exception-classes",
218
+ "document": "rules/ruff-b030-except-with-non-exception-classes.json",
219
+ "title": "Ruff B030: Except with non exception classes",
220
+ "group": "Ruff"
221
+ },
216
222
  {
217
223
  "id": "ruff-b032-unintentional-type-annotation",
218
224
  "document": "rules/ruff-b032-unintentional-type-annotation.json",
@@ -467,13 +473,6 @@
467
473
  "title": "Ruff F707: Default except not last",
468
474
  "group": "Ruff"
469
475
  },
470
- {
471
- "id": "ruff-f722-forward-annotation-syntax-error",
472
- "document": "rules/ruff-f722-forward-annotation-syntax-error.json",
473
- "title": "Ruff F722: Forward annotation syntax error",
474
- "group": "Ruff",
475
- "on": false
476
- },
477
476
  {
478
477
  "id": "ruff-f822-undefined-export",
479
478
  "document": "rules/ruff-f822-undefined-export.json",
@@ -830,12 +829,6 @@
830
829
  "title": "Bandit B405: Import xml etree",
831
830
  "group": "Bandit"
832
831
  },
833
- {
834
- "id": "bandit-b406-import-xml-sax",
835
- "document": "rules/bandit-b406-import-xml-sax.json",
836
- "title": "Bandit B406: Import xml sax",
837
- "group": "Bandit"
838
- },
839
832
  {
840
833
  "id": "bandit-b407-import-xml-expat",
841
834
  "document": "rules/bandit-b407-import-xml-expat.json",
@@ -896,12 +889,6 @@
896
889
  "title": "Bandit B606: Start process with no shell",
897
890
  "group": "Bandit"
898
891
  },
899
- {
900
- "id": "bandit-b610-django-extra-used",
901
- "document": "rules/bandit-b610-django-extra-used.json",
902
- "title": "Bandit B610: Django extra used",
903
- "group": "Bandit"
904
- },
905
892
  {
906
893
  "id": "bandit-b615-huggingface-unsafe-download",
907
894
  "document": "rules/bandit-b615-huggingface-unsafe-download.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neralabs/rerail-pack-python",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Rerail rule pack: Ruff and Bandit rules ported to Rerail code rules.",
5
5
  "license": "Apache-2.0 AND MIT",
6
6
  "repository": {
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b101-assert-used",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Bandit 1.9.4's B101 assert_used: every `assert` statement (Bandit's B101 with its default configuration, which skips no file). Bandit's `# nosec` is honoured (`suppress.nosec`), as its recordings honour it.",
6
+ "description": "Avoid assert statements in Python code; they are stripped when Python runs with optimization, so any check they perform silently disappears.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -24,7 +24,7 @@
24
24
  "violation": {
25
25
  "anchor": "witness.span",
26
26
  "code": "B101",
27
- "message": "Bandit B101 (assert-used)",
27
+ "message": "Replace this assert with an if check that raises an exception; asserts are stripped when Python runs with -O.",
28
28
  "suppress": {
29
29
  "nosec": {
30
30
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b102-exec-used",
4
4
  "revision": 2,
5
5
  "mode": "steer",
6
- "description": "Detect calls to Python's exec function, which executes supplied text as Python code and is risky when that code is not fully trusted. As in Bandit, the callee is a bare name whose qualified name through the file's import aliases is exec: exec itself unless an import aliases it to another name, or a name imported as the module exec. Remove the exec call and implement the intended operation explicitly.",
6
+ "description": "Avoid exec() calls in Python, including through import aliases; running text as code is dangerous unless that text is fully trusted.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -111,7 +111,7 @@
111
111
  "violation": {
112
112
  "code": "B102",
113
113
  "anchor": "witness.span",
114
- "message": "This exec call executes supplied text as Python code and is risky when that code is not fully trusted. Remove exec and implement the intended operation explicitly.",
114
+ "message": "Replace this exec call with code that performs the intended operation directly, unless the executed text is fully trusted.",
115
115
  "suppress": {
116
116
  "nosec": {
117
117
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b110-try-except-pass",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect exception handlers whose only action is pass, silently discarding errors that can hide failures or attempted disruption. Handle or log the exception, or catch a specific expected exception when suppression is intentional.",
6
+ "description": "Don't write a bare or catch-all Exception handler whose only statement is pass; log or handle the error, or catch the specific exception you expect.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b112-try-except-continue",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect exception handlers whose only action is continue, silently discarding errors while retrying a loop. Handle or log the exception, or catch a specific expected exception before continuing.",
6
+ "description": "Don't write a bare or catch-all Exception handler in a loop whose only statement is continue; log or handle the error, or catch the specific exception you expect.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b113-request-without-timeout",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Port of Bandit 1.9.4's B113 request_without_timeout: a `requests` call without `timeout`, or a `requests`/`httpx` call whose `timeout` keyword is `None` (Bandit reads `timeout` as a keyword only). Port of the kernel test b113_requests_without_a_timeout_or_with_none (rerail/native/src/code_rule_dsl/value/rules.rs). Bandit's `# nosec` is honoured (`suppress.nosec`), as its recordings honour it.",
6
+ "description": "Pass a timeout to requests calls, and never set it to None on requests or httpx calls; without one, a slow server can hang the program indefinitely.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*"
@@ -124,7 +124,7 @@
124
124
  "violation": {
125
125
  "anchor": "witness.span",
126
126
  "code": "B113",
127
- "message": "Bandit B113 (request-without-timeout)",
127
+ "message": "Pass a finite timeout to this HTTP call; without one a slow server can hang the program.",
128
128
  "suppress": {
129
129
  "nosec": {
130
130
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b301-pickle",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect calls to pickle and related unsafe deserialization APIs.",
6
+ "description": "Avoid deserializing with pickle, dill, shelve, jsonpickle, or pandas.read_pickle; loading untrusted data this way can execute arbitrary code.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -44,7 +44,7 @@
44
44
  "violation": {
45
45
  "code": "B301",
46
46
  "anchor": "witness.span",
47
- "message": "Pickle or a related deserialization API can be unsafe when used with untrusted data.",
47
+ "message": "Load this data with json or another data-only format instead; unpickling untrusted input can run arbitrary code.",
48
48
  "suppress": {
49
49
  "nosec": {
50
50
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b302-marshal",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect dangerous marshal deserialization calls",
6
+ "description": "Avoid marshal.load() and marshal.loads(); marshal is not safe against malicious or malformed data, so never use it on untrusted input.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -34,7 +34,7 @@
34
34
  "violation": {
35
35
  "code": "B302",
36
36
  "anchor": "witness.span",
37
- "message": "Deserialization with the marshal module is possibly dangerous.",
37
+ "message": "Load this data with json or another data-only format instead of marshal, which is unsafe on untrusted input.",
38
38
  "suppress": {
39
39
  "nosec": {
40
40
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b303-md5",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "An MD2, MD4, MD5 or SHA1 hash from PyCrypto, PyCryptodome or cryptography. `hashlib` is Bandit's B324, which this pack does not include.",
6
+ "description": "Avoid MD2, MD4, MD5, and SHA1 hashes from PyCrypto, PyCryptodome, or cryptography; they are broken for security, so use SHA-256 or a password hash.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py",
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b305-cipher-modes",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect use of the insecure ECB cipher mode",
6
+ "description": "Avoid the ECB cipher mode; it encrypts identical blocks to identical output and leaks patterns in the data, so use an authenticated mode such as GCM.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -33,7 +33,7 @@
33
33
  "violation": {
34
34
  "code": "B305",
35
35
  "anchor": "witness.span",
36
- "message": "Use of the insecure ECB cipher mode.",
36
+ "message": "Replace ECB with an authenticated mode such as GCM; ECB leaks patterns in the data.",
37
37
  "suppress": {
38
38
  "nosec": {
39
39
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b306-mktemp-q",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect use of insecure tempfile.mktemp",
6
+ "description": "Use tempfile.mkstemp() or NamedTemporaryFile instead of tempfile.mktemp(); mktemp returns a name another process can claim before you create the file.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -40,7 +40,7 @@
40
40
  "violation": {
41
41
  "code": "B306",
42
42
  "anchor": "witness.span",
43
- "message": "Use of insecure and deprecated function mktemp.",
43
+ "message": "Replace tempfile.mktemp with mkstemp or NamedTemporaryFile, which create the file atomically.",
44
44
  "suppress": {
45
45
  "nosec": {
46
46
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b307-eval",
4
4
  "revision": 2,
5
5
  "mode": "steer",
6
- "description": "Detect calls to Python's eval function, which evaluates supplied text as code and may be unsafe. Use ast.literal_eval when only Python literals need to be parsed.",
6
+ "description": "Avoid eval() calls in Python, including through import aliases; use ast.literal_eval() when you only need to parse literal values.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b308-mark-safe",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect potentially unsafe django mark_safe calls",
6
+ "description": "Avoid Django's mark_safe(); it turns off autoescaping and can expose cross-site scripting when the content isn't fully trusted.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -33,7 +33,7 @@
33
33
  "violation": {
34
34
  "code": "B308",
35
35
  "anchor": "witness.span",
36
- "message": "Use of mark_safe may expose cross-site scripting vulnerabilities and should be reviewed.",
36
+ "message": "Build this HTML with format_html() instead of mark_safe so any untrusted parts get escaped.",
37
37
  "suppress": {
38
38
  "nosec": {
39
39
  "codes": [
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b310-urllib-urlopen",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect URL-opening calls that require permitted-scheme review",
6
+ "description": "Restrict URLs passed to urllib's urlopen, urlretrieve, and URLopener to expected schemes; file: and custom schemes can expose local files.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b311-random",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect insecure uses of Python pseudo-random generators",
6
+ "description": "Avoid the random module's generators for anything security-related; their output is predictable, so use the secrets module for tokens, passwords, and keys.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b312-telnetlib",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect insecure telnetlib.Telnet calls",
6
+ "description": "Avoid opening telnetlib.Telnet connections; Telnet sends credentials and data unencrypted, so use SSH or another encrypted protocol.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b313-xml-bad-celementtree",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect vulnerable xml.etree.cElementTree parsing calls",
6
+ "description": "Use defusedxml instead of xml.etree.cElementTree to parse XML; the standard parser is open to entity-expansion and other XML attacks on untrusted input.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b314-xml-bad-elementtree",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect vulnerable xml.etree.ElementTree parsing calls",
6
+ "description": "Use defusedxml instead of xml.etree.ElementTree to parse XML; the standard parser is open to entity-expansion and other XML attacks on untrusted input.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b315-xml-bad-expatreader",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect vulnerable xml.sax.expatreader parser creation",
6
+ "description": "Use defusedxml instead of creating parsers with xml.sax.expatreader; the standard parser is open to entity-expansion and other XML attacks on untrusted input.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b316-xml-bad-expatbuilder",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect vulnerable xml.dom.expatbuilder parsing calls",
6
+ "description": "Use defusedxml instead of xml.dom.expatbuilder to parse XML; the standard parser is open to entity-expansion and other XML attacks on untrusted input.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"
@@ -3,7 +3,7 @@
3
3
  "id": "bandit-b317-xml-bad-sax",
4
4
  "revision": 1,
5
5
  "mode": "steer",
6
- "description": "Detect vulnerable xml.sax parsing calls",
6
+ "description": "Use defusedxml instead of xml.sax to parse XML; the standard parser is open to entity-expansion and other XML attacks on untrusted input.",
7
7
  "scope": {
8
8
  "include": [
9
9
  "**/*.py"