@neralabs/rerail-pack-python 0.1.1

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 (147) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +7 -0
  3. package/README.md +36 -0
  4. package/licenses/bandit/LICENSE +175 -0
  5. package/licenses/bandit/UPSTREAM.md +100 -0
  6. package/licenses/ruff/LICENSE +430 -0
  7. package/licenses/ruff/UPSTREAM.md +338 -0
  8. package/pack.json +912 -0
  9. package/package.json +30 -0
  10. package/rules/bandit-b101-assert-used.json +38 -0
  11. package/rules/bandit-b102-exec-used.json +125 -0
  12. package/rules/bandit-b110-try-except-pass.json +109 -0
  13. package/rules/bandit-b112-try-except-continue.json +109 -0
  14. package/rules/bandit-b113-request-without-timeout.json +138 -0
  15. package/rules/bandit-b301-pickle.json +58 -0
  16. package/rules/bandit-b302-marshal.json +48 -0
  17. package/rules/bandit-b303-md5.json +79 -0
  18. package/rules/bandit-b305-cipher-modes.json +47 -0
  19. package/rules/bandit-b306-mktemp-q.json +54 -0
  20. package/rules/bandit-b307-eval.json +125 -0
  21. package/rules/bandit-b308-mark-safe.json +47 -0
  22. package/rules/bandit-b310-urllib-urlopen.json +54 -0
  23. package/rules/bandit-b311-random.json +57 -0
  24. package/rules/bandit-b312-telnetlib.json +47 -0
  25. package/rules/bandit-b313-xml-bad-celementtree.json +50 -0
  26. package/rules/bandit-b314-xml-bad-elementtree.json +50 -0
  27. package/rules/bandit-b315-xml-bad-expatreader.json +47 -0
  28. package/rules/bandit-b316-xml-bad-expatbuilder.json +48 -0
  29. package/rules/bandit-b317-xml-bad-sax.json +58 -0
  30. package/rules/bandit-b318-xml-bad-minidom.json +48 -0
  31. package/rules/bandit-b319-xml-bad-pulldom.json +48 -0
  32. package/rules/bandit-b321-ftplib.json +47 -0
  33. package/rules/bandit-b323-unverified-context.json +47 -0
  34. package/rules/bandit-b401-import-telnetlib.json +48 -0
  35. package/rules/bandit-b402-import-ftplib.json +48 -0
  36. package/rules/bandit-b405-import-xml-etree.json +69 -0
  37. package/rules/bandit-b406-import-xml-sax.json +73 -0
  38. package/rules/bandit-b407-import-xml-expat.json +54 -0
  39. package/rules/bandit-b408-import-xml-minidom.json +54 -0
  40. package/rules/bandit-b409-import-xml-pulldom.json +54 -0
  41. package/rules/bandit-b411-import-xmlrpclib.json +48 -0
  42. package/rules/bandit-b413-import-pycrypto.json +159 -0
  43. package/rules/bandit-b415-import-pyghmi.json +48 -0
  44. package/rules/bandit-b502-ssl-with-bad-version.json +90 -0
  45. package/rules/bandit-b505-weak-cryptographic-key.json +166 -0
  46. package/rules/bandit-b507-ssh-no-host-key-verification.json +210 -0
  47. package/rules/bandit-b606-start-process-with-no-shell.json +63 -0
  48. package/rules/bandit-b610-django-extra-used.json +268 -0
  49. package/rules/bandit-b615-huggingface-unsafe-download.json +1152 -0
  50. package/rules/ruff-async100-cancel-scope-no-checkpoint.json +357 -0
  51. package/rules/ruff-async105-trio-sync-call.json +199 -0
  52. package/rules/ruff-async115-async-zero-sleep.json +264 -0
  53. package/rules/ruff-async116-long-sleep-not-forever.json +267 -0
  54. package/rules/ruff-async210-blocking-http-call-in-async-function.json +161 -0
  55. package/rules/ruff-async221-run-process-in-async-function.json +342 -0
  56. package/rules/ruff-async222-wait-for-process-in-async-function.json +144 -0
  57. package/rules/ruff-async230-blocking-open-call-in-async-function.json +339 -0
  58. package/rules/ruff-async250-blocking-input-in-async-function.json +143 -0
  59. package/rules/ruff-async251-blocking-sleep-in-async-function.json +140 -0
  60. package/rules/ruff-b002-unary-prefix-increment-decrement.json +54 -0
  61. package/rules/ruff-b003-assignment-to-os-environ.json +54 -0
  62. package/rules/ruff-b004-unreliable-callable-check.json +171 -0
  63. package/rules/ruff-b005-strip-with-multi-characters.json +131 -0
  64. package/rules/ruff-b007-unused-loop-control-variable.json +368 -0
  65. package/rules/ruff-b009-get-attr-with-constant.json +190 -0
  66. package/rules/ruff-b010-set-attr-with-constant.json +219 -0
  67. package/rules/ruff-b011-assert-false.json +62 -0
  68. package/rules/ruff-b013-redundant-tuple-in-exception-handler.json +94 -0
  69. package/rules/ruff-b014-duplicate-handler-exception.json +126 -0
  70. package/rules/ruff-b016-raise-literal.json +47 -0
  71. package/rules/ruff-b020-loop-variable-overrides-iterator.json +341 -0
  72. package/rules/ruff-b021-f-string-docstring.json +48 -0
  73. package/rules/ruff-b022-useless-contextlib-suppress.json +95 -0
  74. package/rules/ruff-b023-function-uses-loop-variable.json +560 -0
  75. package/rules/ruff-b025-duplicate-try-block-exception.json +182 -0
  76. package/rules/ruff-b026-star-arg-unpacking-after-keyword-arg.json +57 -0
  77. package/rules/ruff-b028-no-explicit-stacklevel.json +177 -0
  78. package/rules/ruff-b029-except-with-empty-tuple.json +102 -0
  79. package/rules/ruff-b032-unintentional-type-annotation.json +157 -0
  80. package/rules/ruff-b033-duplicate-value.json +129 -0
  81. package/rules/ruff-b034-re-sub-positional-args.json +159 -0
  82. package/rules/ruff-b039-mutable-contextvar-default.json +281 -0
  83. package/rules/ruff-b904-raise-without-from-inside-except.json +194 -0
  84. package/rules/ruff-b905-zip-without-explicit-strict.json +429 -0
  85. package/rules/ruff-e711-none-comparison.json +199 -0
  86. package/rules/ruff-e721-type-comparison.json +293 -0
  87. package/rules/ruff-e722-bare-except.json +57 -0
  88. package/rules/ruff-e742-ambiguous-class-name.json +47 -0
  89. package/rules/ruff-e743-ambiguous-function-name.json +47 -0
  90. package/rules/ruff-f403-undefined-local-with-import-star.json +73 -0
  91. package/rules/ruff-f405-undefined-local-with-import-star-usage.json +87 -0
  92. package/rules/ruff-f406-undefined-local-with-nested-import-star-usage.json +39 -0
  93. package/rules/ruff-f407-future-feature-not-defined.json +56 -0
  94. package/rules/ruff-f501-percent-format-invalid-format.json +88 -0
  95. package/rules/ruff-f502-percent-format-expected-mapping.json +127 -0
  96. package/rules/ruff-f503-percent-format-expected-sequence.json +127 -0
  97. package/rules/ruff-f504-percent-format-extra-named-arguments.json +46 -0
  98. package/rules/ruff-f505-percent-format-missing-argument.json +49 -0
  99. package/rules/ruff-f506-percent-format-mixed-positional-and-named.json +114 -0
  100. package/rules/ruff-f507-percent-format-positional-count-mismatch.json +78 -0
  101. package/rules/ruff-f508-percent-format-star-requires-sequence.json +112 -0
  102. package/rules/ruff-f509-percent-format-unsupported-format-character.json +86 -0
  103. package/rules/ruff-f521-string-dot-format-invalid-format.json +83 -0
  104. package/rules/ruff-f522-string-dot-format-extra-named-arguments.json +46 -0
  105. package/rules/ruff-f523-string-dot-format-extra-positional-arguments.json +48 -0
  106. package/rules/ruff-f524-string-dot-format-missing-arguments.json +46 -0
  107. package/rules/ruff-f525-string-dot-format-mixing-automatic.json +99 -0
  108. package/rules/ruff-f541-f-string-missing-placeholders.json +52 -0
  109. package/rules/ruff-f601-multi-value-repeated-key-literal.json +215 -0
  110. package/rules/ruff-f602-multi-value-repeated-key-variable.json +123 -0
  111. package/rules/ruff-f622-multiple-starred-expressions.json +57 -0
  112. package/rules/ruff-f632-is-literal.json +232 -0
  113. package/rules/ruff-f633-invalid-print-syntax.json +299 -0
  114. package/rules/ruff-f701-break-outside-loop.json +64 -0
  115. package/rules/ruff-f702-continue-outside-loop.json +64 -0
  116. package/rules/ruff-f706-return-outside-function.json +61 -0
  117. package/rules/ruff-f707-default-except-not-last.json +50 -0
  118. package/rules/ruff-f722-forward-annotation-syntax-error.json +654 -0
  119. package/rules/ruff-f822-undefined-export.json +55 -0
  120. package/rules/ruff-f823-undefined-local.json +42 -0
  121. package/rules/ruff-f842-unused-annotation.json +51 -0
  122. package/rules/ruff-f901-raise-not-implemented.json +97 -0
  123. package/rules/ruff-pie794-duplicate-class-field-definition.json +157 -0
  124. package/rules/ruff-pie796-non-unique-enums.json +460 -0
  125. package/rules/ruff-pie800-unnecessary-spread.json +62 -0
  126. package/rules/ruff-pie804-unnecessary-dict-kwargs.json +179 -0
  127. package/rules/ruff-pie807-reimplemented-container-builtin.json +100 -0
  128. package/rules/ruff-pie810-multiple-starts-ends-with.json +585 -0
  129. package/rules/ruff-ret501-unnecessary-return-none.json +256 -0
  130. package/rules/ruff-ret502-implicit-return-value.json +163 -0
  131. package/rules/ruff-ret505-superfluous-else-return.json +211 -0
  132. package/rules/ruff-ret506-superfluous-else-raise.json +211 -0
  133. package/rules/ruff-ret507-superfluous-else-continue.json +211 -0
  134. package/rules/ruff-ret508-superfluous-else-break.json +211 -0
  135. package/rules/ruff-sim101-duplicate-isinstance-call.json +384 -0
  136. package/rules/ruff-sim107-return-in-try-except-finally.json +82 -0
  137. package/rules/ruff-sim109-compare-with-tuple.json +205 -0
  138. package/rules/ruff-sim112-uncapitalized-environment-variables.json +168 -0
  139. package/rules/ruff-sim113-enumerate-for-loop.json +562 -0
  140. package/rules/ruff-sim208-double-negation.json +58 -0
  141. package/rules/ruff-sim210-if-expr-with-true-false.json +90 -0
  142. package/rules/ruff-sim211-if-expr-with-false-true.json +90 -0
  143. package/rules/ruff-sim212-if-expr-with-twisted-arms.json +95 -0
  144. package/rules/ruff-sim300-yoda-conditions.json +487 -0
  145. package/rules/ruff-sim905-split-static-string.json +579 -0
  146. package/rules/ruff-sim910-dict-get-with-none-default.json +518 -0
  147. package/rules/ruff-t100-debugger.json +197 -0
package/pack.json ADDED
@@ -0,0 +1,912 @@
1
+ {
2
+ "format": "rerail.rule-pack/v1",
3
+ "id": "python",
4
+ "name": "Python",
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.",
7
+ "reason": "matches Python",
8
+ "match": {
9
+ "any": [
10
+ {
11
+ "files": [
12
+ "**/*.py",
13
+ "**/*.pyi"
14
+ ],
15
+ "exclude": [
16
+ "**/test/**",
17
+ "**/tests/**",
18
+ "**/testing/**",
19
+ "**/test_*.py",
20
+ "**/*_test.py",
21
+ "**/conftest.py",
22
+ "**/scripts/**",
23
+ "**/script/**",
24
+ "**/tools/**",
25
+ "**/ci/**",
26
+ "**/.github/**",
27
+ "**/setup.py",
28
+ "**/noxfile.py",
29
+ "**/fabfile.py",
30
+ "**/docs/**",
31
+ "**/doc/**"
32
+ ],
33
+ "label": "Python source files"
34
+ }
35
+ ]
36
+ },
37
+ "rules": [
38
+ {
39
+ "id": "ruff-async100-cancel-scope-no-checkpoint",
40
+ "document": "rules/ruff-async100-cancel-scope-no-checkpoint.json",
41
+ "title": "Ruff ASYNC100: Cancel scope no checkpoint",
42
+ "group": "Ruff"
43
+ },
44
+ {
45
+ "id": "ruff-async105-trio-sync-call",
46
+ "document": "rules/ruff-async105-trio-sync-call.json",
47
+ "title": "Ruff ASYNC105: Trio sync call",
48
+ "group": "Ruff"
49
+ },
50
+ {
51
+ "id": "ruff-async115-async-zero-sleep",
52
+ "document": "rules/ruff-async115-async-zero-sleep.json",
53
+ "title": "Ruff ASYNC115: Async zero sleep",
54
+ "group": "Ruff"
55
+ },
56
+ {
57
+ "id": "ruff-async116-long-sleep-not-forever",
58
+ "document": "rules/ruff-async116-long-sleep-not-forever.json",
59
+ "title": "Ruff ASYNC116: Long sleep not forever",
60
+ "group": "Ruff"
61
+ },
62
+ {
63
+ "id": "ruff-async210-blocking-http-call-in-async-function",
64
+ "document": "rules/ruff-async210-blocking-http-call-in-async-function.json",
65
+ "title": "Ruff ASYNC210: Blocking http call in async function",
66
+ "group": "Ruff"
67
+ },
68
+ {
69
+ "id": "ruff-async221-run-process-in-async-function",
70
+ "document": "rules/ruff-async221-run-process-in-async-function.json",
71
+ "title": "Ruff ASYNC221: Run process in async function",
72
+ "group": "Ruff"
73
+ },
74
+ {
75
+ "id": "ruff-async222-wait-for-process-in-async-function",
76
+ "document": "rules/ruff-async222-wait-for-process-in-async-function.json",
77
+ "title": "Ruff ASYNC222: Wait for process in async function",
78
+ "group": "Ruff"
79
+ },
80
+ {
81
+ "id": "ruff-async230-blocking-open-call-in-async-function",
82
+ "document": "rules/ruff-async230-blocking-open-call-in-async-function.json",
83
+ "title": "Ruff ASYNC230: Blocking open call in async function",
84
+ "group": "Ruff"
85
+ },
86
+ {
87
+ "id": "ruff-async250-blocking-input-in-async-function",
88
+ "document": "rules/ruff-async250-blocking-input-in-async-function.json",
89
+ "title": "Ruff ASYNC250: Blocking input in async function",
90
+ "group": "Ruff",
91
+ "on": false
92
+ },
93
+ {
94
+ "id": "ruff-async251-blocking-sleep-in-async-function",
95
+ "document": "rules/ruff-async251-blocking-sleep-in-async-function.json",
96
+ "title": "Ruff ASYNC251: Blocking sleep in async function",
97
+ "group": "Ruff"
98
+ },
99
+ {
100
+ "id": "ruff-b002-unary-prefix-increment-decrement",
101
+ "document": "rules/ruff-b002-unary-prefix-increment-decrement.json",
102
+ "title": "Ruff B002: Unary prefix increment decrement",
103
+ "group": "Ruff"
104
+ },
105
+ {
106
+ "id": "ruff-b003-assignment-to-os-environ",
107
+ "document": "rules/ruff-b003-assignment-to-os-environ.json",
108
+ "title": "Ruff B003: Assignment to os environ",
109
+ "group": "Ruff"
110
+ },
111
+ {
112
+ "id": "ruff-b004-unreliable-callable-check",
113
+ "document": "rules/ruff-b004-unreliable-callable-check.json",
114
+ "title": "Ruff B004: Unreliable callable check",
115
+ "group": "Ruff"
116
+ },
117
+ {
118
+ "id": "ruff-b005-strip-with-multi-characters",
119
+ "document": "rules/ruff-b005-strip-with-multi-characters.json",
120
+ "title": "Ruff B005: Strip with multi characters",
121
+ "group": "Ruff"
122
+ },
123
+ {
124
+ "id": "ruff-b007-unused-loop-control-variable",
125
+ "document": "rules/ruff-b007-unused-loop-control-variable.json",
126
+ "title": "Ruff B007: Unused loop control variable",
127
+ "group": "Ruff",
128
+ "on": false
129
+ },
130
+ {
131
+ "id": "ruff-b009-get-attr-with-constant",
132
+ "document": "rules/ruff-b009-get-attr-with-constant.json",
133
+ "title": "Ruff B009: Get attr with constant",
134
+ "group": "Ruff"
135
+ },
136
+ {
137
+ "id": "ruff-b010-set-attr-with-constant",
138
+ "document": "rules/ruff-b010-set-attr-with-constant.json",
139
+ "title": "Ruff B010: Set attr with constant",
140
+ "group": "Ruff"
141
+ },
142
+ {
143
+ "id": "ruff-b011-assert-false",
144
+ "document": "rules/ruff-b011-assert-false.json",
145
+ "title": "Ruff B011: Assert false",
146
+ "group": "Ruff",
147
+ "on": false
148
+ },
149
+ {
150
+ "id": "ruff-b013-redundant-tuple-in-exception-handler",
151
+ "document": "rules/ruff-b013-redundant-tuple-in-exception-handler.json",
152
+ "title": "Ruff B013: Redundant tuple in exception handler",
153
+ "group": "Ruff"
154
+ },
155
+ {
156
+ "id": "ruff-b014-duplicate-handler-exception",
157
+ "document": "rules/ruff-b014-duplicate-handler-exception.json",
158
+ "title": "Ruff B014: Duplicate handler exception",
159
+ "group": "Ruff"
160
+ },
161
+ {
162
+ "id": "ruff-b016-raise-literal",
163
+ "document": "rules/ruff-b016-raise-literal.json",
164
+ "title": "Ruff B016: Raise literal",
165
+ "group": "Ruff"
166
+ },
167
+ {
168
+ "id": "ruff-b020-loop-variable-overrides-iterator",
169
+ "document": "rules/ruff-b020-loop-variable-overrides-iterator.json",
170
+ "title": "Ruff B020: Loop variable overrides iterator",
171
+ "group": "Ruff"
172
+ },
173
+ {
174
+ "id": "ruff-b021-f-string-docstring",
175
+ "document": "rules/ruff-b021-f-string-docstring.json",
176
+ "title": "Ruff B021: F string docstring",
177
+ "group": "Ruff"
178
+ },
179
+ {
180
+ "id": "ruff-b022-useless-contextlib-suppress",
181
+ "document": "rules/ruff-b022-useless-contextlib-suppress.json",
182
+ "title": "Ruff B022: Useless contextlib suppress",
183
+ "group": "Ruff"
184
+ },
185
+ {
186
+ "id": "ruff-b023-function-uses-loop-variable",
187
+ "document": "rules/ruff-b023-function-uses-loop-variable.json",
188
+ "title": "Ruff B023: Function uses loop variable",
189
+ "group": "Ruff"
190
+ },
191
+ {
192
+ "id": "ruff-b025-duplicate-try-block-exception",
193
+ "document": "rules/ruff-b025-duplicate-try-block-exception.json",
194
+ "title": "Ruff B025: Duplicate try block exception",
195
+ "group": "Ruff"
196
+ },
197
+ {
198
+ "id": "ruff-b026-star-arg-unpacking-after-keyword-arg",
199
+ "document": "rules/ruff-b026-star-arg-unpacking-after-keyword-arg.json",
200
+ "title": "Ruff B026: Star arg unpacking after keyword arg",
201
+ "group": "Ruff"
202
+ },
203
+ {
204
+ "id": "ruff-b028-no-explicit-stacklevel",
205
+ "document": "rules/ruff-b028-no-explicit-stacklevel.json",
206
+ "title": "Ruff B028: No explicit stacklevel",
207
+ "group": "Ruff",
208
+ "on": false
209
+ },
210
+ {
211
+ "id": "ruff-b029-except-with-empty-tuple",
212
+ "document": "rules/ruff-b029-except-with-empty-tuple.json",
213
+ "title": "Ruff B029: Except with empty tuple",
214
+ "group": "Ruff"
215
+ },
216
+ {
217
+ "id": "ruff-b032-unintentional-type-annotation",
218
+ "document": "rules/ruff-b032-unintentional-type-annotation.json",
219
+ "title": "Ruff B032: Unintentional type annotation",
220
+ "group": "Ruff"
221
+ },
222
+ {
223
+ "id": "ruff-b033-duplicate-value",
224
+ "document": "rules/ruff-b033-duplicate-value.json",
225
+ "title": "Ruff B033: Duplicate value",
226
+ "group": "Ruff"
227
+ },
228
+ {
229
+ "id": "ruff-b034-re-sub-positional-args",
230
+ "document": "rules/ruff-b034-re-sub-positional-args.json",
231
+ "title": "Ruff B034: Re sub positional args",
232
+ "group": "Ruff",
233
+ "on": false
234
+ },
235
+ {
236
+ "id": "ruff-b039-mutable-contextvar-default",
237
+ "document": "rules/ruff-b039-mutable-contextvar-default.json",
238
+ "title": "Ruff B039: Mutable contextvar default",
239
+ "group": "Ruff"
240
+ },
241
+ {
242
+ "id": "ruff-b904-raise-without-from-inside-except",
243
+ "document": "rules/ruff-b904-raise-without-from-inside-except.json",
244
+ "title": "Ruff B904: Raise without from inside except",
245
+ "group": "Ruff",
246
+ "on": false
247
+ },
248
+ {
249
+ "id": "ruff-b905-zip-without-explicit-strict",
250
+ "document": "rules/ruff-b905-zip-without-explicit-strict.json",
251
+ "title": "Ruff B905: Zip without explicit strict",
252
+ "group": "Ruff",
253
+ "on": false
254
+ },
255
+ {
256
+ "id": "ruff-e711-none-comparison",
257
+ "document": "rules/ruff-e711-none-comparison.json",
258
+ "title": "Ruff E711: None comparison",
259
+ "group": "Ruff",
260
+ "on": false
261
+ },
262
+ {
263
+ "id": "ruff-e721-type-comparison",
264
+ "document": "rules/ruff-e721-type-comparison.json",
265
+ "title": "Ruff E721: Type comparison",
266
+ "group": "Ruff",
267
+ "on": false
268
+ },
269
+ {
270
+ "id": "ruff-e722-bare-except",
271
+ "document": "rules/ruff-e722-bare-except.json",
272
+ "title": "Ruff E722: Bare except",
273
+ "group": "Ruff",
274
+ "examples": {
275
+ "caught": {
276
+ "path": "app/jobs.py",
277
+ "text": "try:\n run()\nexcept:\n log()\n"
278
+ },
279
+ "passes": {
280
+ "path": "app/jobs.py",
281
+ "text": "try:\n run()\nexcept ValueError:\n log()\n"
282
+ }
283
+ }
284
+ },
285
+ {
286
+ "id": "ruff-e742-ambiguous-class-name",
287
+ "document": "rules/ruff-e742-ambiguous-class-name.json",
288
+ "title": "Ruff E742: Ambiguous class name",
289
+ "group": "Ruff",
290
+ "on": false
291
+ },
292
+ {
293
+ "id": "ruff-e743-ambiguous-function-name",
294
+ "document": "rules/ruff-e743-ambiguous-function-name.json",
295
+ "title": "Ruff E743: Ambiguous function name",
296
+ "group": "Ruff",
297
+ "on": false
298
+ },
299
+ {
300
+ "id": "ruff-f403-undefined-local-with-import-star",
301
+ "document": "rules/ruff-f403-undefined-local-with-import-star.json",
302
+ "title": "Ruff F403: Undefined local with import star",
303
+ "group": "Ruff",
304
+ "on": false
305
+ },
306
+ {
307
+ "id": "ruff-f405-undefined-local-with-import-star-usage",
308
+ "document": "rules/ruff-f405-undefined-local-with-import-star-usage.json",
309
+ "title": "Ruff F405: Undefined local with import star usage",
310
+ "group": "Ruff",
311
+ "on": false
312
+ },
313
+ {
314
+ "id": "ruff-f406-undefined-local-with-nested-import-star-usage",
315
+ "document": "rules/ruff-f406-undefined-local-with-nested-import-star-usage.json",
316
+ "title": "Ruff F406: Undefined local with nested import star usage",
317
+ "group": "Ruff",
318
+ "on": false
319
+ },
320
+ {
321
+ "id": "ruff-f407-future-feature-not-defined",
322
+ "document": "rules/ruff-f407-future-feature-not-defined.json",
323
+ "title": "Ruff F407: Future feature not defined",
324
+ "group": "Ruff"
325
+ },
326
+ {
327
+ "id": "ruff-f501-percent-format-invalid-format",
328
+ "document": "rules/ruff-f501-percent-format-invalid-format.json",
329
+ "title": "Ruff F501: Percent format invalid format",
330
+ "group": "Ruff"
331
+ },
332
+ {
333
+ "id": "ruff-f502-percent-format-expected-mapping",
334
+ "document": "rules/ruff-f502-percent-format-expected-mapping.json",
335
+ "title": "Ruff F502: Percent format expected mapping",
336
+ "group": "Ruff"
337
+ },
338
+ {
339
+ "id": "ruff-f503-percent-format-expected-sequence",
340
+ "document": "rules/ruff-f503-percent-format-expected-sequence.json",
341
+ "title": "Ruff F503: Percent format expected sequence",
342
+ "group": "Ruff"
343
+ },
344
+ {
345
+ "id": "ruff-f504-percent-format-extra-named-arguments",
346
+ "document": "rules/ruff-f504-percent-format-extra-named-arguments.json",
347
+ "title": "Ruff F504: Percent format extra named arguments",
348
+ "group": "Ruff"
349
+ },
350
+ {
351
+ "id": "ruff-f505-percent-format-missing-argument",
352
+ "document": "rules/ruff-f505-percent-format-missing-argument.json",
353
+ "title": "Ruff F505: Percent format missing argument",
354
+ "group": "Ruff"
355
+ },
356
+ {
357
+ "id": "ruff-f506-percent-format-mixed-positional-and-named",
358
+ "document": "rules/ruff-f506-percent-format-mixed-positional-and-named.json",
359
+ "title": "Ruff F506: Percent format mixed positional and named",
360
+ "group": "Ruff"
361
+ },
362
+ {
363
+ "id": "ruff-f507-percent-format-positional-count-mismatch",
364
+ "document": "rules/ruff-f507-percent-format-positional-count-mismatch.json",
365
+ "title": "Ruff F507: Percent format positional count mismatch",
366
+ "group": "Ruff"
367
+ },
368
+ {
369
+ "id": "ruff-f508-percent-format-star-requires-sequence",
370
+ "document": "rules/ruff-f508-percent-format-star-requires-sequence.json",
371
+ "title": "Ruff F508: Percent format star requires sequence",
372
+ "group": "Ruff"
373
+ },
374
+ {
375
+ "id": "ruff-f509-percent-format-unsupported-format-character",
376
+ "document": "rules/ruff-f509-percent-format-unsupported-format-character.json",
377
+ "title": "Ruff F509: Percent format unsupported format character",
378
+ "group": "Ruff"
379
+ },
380
+ {
381
+ "id": "ruff-f521-string-dot-format-invalid-format",
382
+ "document": "rules/ruff-f521-string-dot-format-invalid-format.json",
383
+ "title": "Ruff F521: String dot format invalid format",
384
+ "group": "Ruff"
385
+ },
386
+ {
387
+ "id": "ruff-f522-string-dot-format-extra-named-arguments",
388
+ "document": "rules/ruff-f522-string-dot-format-extra-named-arguments.json",
389
+ "title": "Ruff F522: String dot format extra named arguments",
390
+ "group": "Ruff"
391
+ },
392
+ {
393
+ "id": "ruff-f523-string-dot-format-extra-positional-arguments",
394
+ "document": "rules/ruff-f523-string-dot-format-extra-positional-arguments.json",
395
+ "title": "Ruff F523: String dot format extra positional arguments",
396
+ "group": "Ruff"
397
+ },
398
+ {
399
+ "id": "ruff-f524-string-dot-format-missing-arguments",
400
+ "document": "rules/ruff-f524-string-dot-format-missing-arguments.json",
401
+ "title": "Ruff F524: String dot format missing arguments",
402
+ "group": "Ruff"
403
+ },
404
+ {
405
+ "id": "ruff-f525-string-dot-format-mixing-automatic",
406
+ "document": "rules/ruff-f525-string-dot-format-mixing-automatic.json",
407
+ "title": "Ruff F525: String dot format mixing automatic",
408
+ "group": "Ruff"
409
+ },
410
+ {
411
+ "id": "ruff-f541-f-string-missing-placeholders",
412
+ "document": "rules/ruff-f541-f-string-missing-placeholders.json",
413
+ "title": "Ruff F541: F string missing placeholders",
414
+ "group": "Ruff"
415
+ },
416
+ {
417
+ "id": "ruff-f601-multi-value-repeated-key-literal",
418
+ "document": "rules/ruff-f601-multi-value-repeated-key-literal.json",
419
+ "title": "Ruff F601: Multi value repeated key literal",
420
+ "group": "Ruff"
421
+ },
422
+ {
423
+ "id": "ruff-f602-multi-value-repeated-key-variable",
424
+ "document": "rules/ruff-f602-multi-value-repeated-key-variable.json",
425
+ "title": "Ruff F602: Multi value repeated key variable",
426
+ "group": "Ruff"
427
+ },
428
+ {
429
+ "id": "ruff-f622-multiple-starred-expressions",
430
+ "document": "rules/ruff-f622-multiple-starred-expressions.json",
431
+ "title": "Ruff F622: Multiple starred expressions",
432
+ "group": "Ruff"
433
+ },
434
+ {
435
+ "id": "ruff-f632-is-literal",
436
+ "document": "rules/ruff-f632-is-literal.json",
437
+ "title": "Ruff F632: Is literal",
438
+ "group": "Ruff"
439
+ },
440
+ {
441
+ "id": "ruff-f633-invalid-print-syntax",
442
+ "document": "rules/ruff-f633-invalid-print-syntax.json",
443
+ "title": "Ruff F633: Invalid print syntax",
444
+ "group": "Ruff"
445
+ },
446
+ {
447
+ "id": "ruff-f701-break-outside-loop",
448
+ "document": "rules/ruff-f701-break-outside-loop.json",
449
+ "title": "Ruff F701: Break outside loop",
450
+ "group": "Ruff"
451
+ },
452
+ {
453
+ "id": "ruff-f702-continue-outside-loop",
454
+ "document": "rules/ruff-f702-continue-outside-loop.json",
455
+ "title": "Ruff F702: Continue outside loop",
456
+ "group": "Ruff"
457
+ },
458
+ {
459
+ "id": "ruff-f706-return-outside-function",
460
+ "document": "rules/ruff-f706-return-outside-function.json",
461
+ "title": "Ruff F706: Return outside function",
462
+ "group": "Ruff"
463
+ },
464
+ {
465
+ "id": "ruff-f707-default-except-not-last",
466
+ "document": "rules/ruff-f707-default-except-not-last.json",
467
+ "title": "Ruff F707: Default except not last",
468
+ "group": "Ruff"
469
+ },
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
+ {
478
+ "id": "ruff-f822-undefined-export",
479
+ "document": "rules/ruff-f822-undefined-export.json",
480
+ "title": "Ruff F822: Undefined export",
481
+ "group": "Ruff"
482
+ },
483
+ {
484
+ "id": "ruff-f823-undefined-local",
485
+ "document": "rules/ruff-f823-undefined-local.json",
486
+ "title": "Ruff F823: Undefined local",
487
+ "group": "Ruff"
488
+ },
489
+ {
490
+ "id": "ruff-f842-unused-annotation",
491
+ "document": "rules/ruff-f842-unused-annotation.json",
492
+ "title": "Ruff F842: Unused annotation",
493
+ "group": "Ruff"
494
+ },
495
+ {
496
+ "id": "ruff-f901-raise-not-implemented",
497
+ "document": "rules/ruff-f901-raise-not-implemented.json",
498
+ "title": "Ruff F901: Raise not implemented",
499
+ "group": "Ruff"
500
+ },
501
+ {
502
+ "id": "ruff-pie794-duplicate-class-field-definition",
503
+ "document": "rules/ruff-pie794-duplicate-class-field-definition.json",
504
+ "title": "Ruff PIE794: Duplicate class field definition",
505
+ "group": "Ruff"
506
+ },
507
+ {
508
+ "id": "ruff-pie796-non-unique-enums",
509
+ "document": "rules/ruff-pie796-non-unique-enums.json",
510
+ "title": "Ruff PIE796: Non unique enums",
511
+ "group": "Ruff"
512
+ },
513
+ {
514
+ "id": "ruff-pie800-unnecessary-spread",
515
+ "document": "rules/ruff-pie800-unnecessary-spread.json",
516
+ "title": "Ruff PIE800: Unnecessary spread",
517
+ "group": "Ruff"
518
+ },
519
+ {
520
+ "id": "ruff-pie804-unnecessary-dict-kwargs",
521
+ "document": "rules/ruff-pie804-unnecessary-dict-kwargs.json",
522
+ "title": "Ruff PIE804: Unnecessary dict kwargs",
523
+ "group": "Ruff"
524
+ },
525
+ {
526
+ "id": "ruff-pie807-reimplemented-container-builtin",
527
+ "document": "rules/ruff-pie807-reimplemented-container-builtin.json",
528
+ "title": "Ruff PIE807: Reimplemented container builtin",
529
+ "group": "Ruff"
530
+ },
531
+ {
532
+ "id": "ruff-pie810-multiple-starts-ends-with",
533
+ "document": "rules/ruff-pie810-multiple-starts-ends-with.json",
534
+ "title": "Ruff PIE810: Multiple starts ends with",
535
+ "group": "Ruff"
536
+ },
537
+ {
538
+ "id": "ruff-ret501-unnecessary-return-none",
539
+ "document": "rules/ruff-ret501-unnecessary-return-none.json",
540
+ "title": "Ruff RET501: Unnecessary return none",
541
+ "group": "Ruff"
542
+ },
543
+ {
544
+ "id": "ruff-ret502-implicit-return-value",
545
+ "document": "rules/ruff-ret502-implicit-return-value.json",
546
+ "title": "Ruff RET502: Implicit return value",
547
+ "group": "Ruff",
548
+ "on": false
549
+ },
550
+ {
551
+ "id": "ruff-ret505-superfluous-else-return",
552
+ "document": "rules/ruff-ret505-superfluous-else-return.json",
553
+ "title": "Ruff RET505: Superfluous else return",
554
+ "group": "Ruff",
555
+ "on": false
556
+ },
557
+ {
558
+ "id": "ruff-ret506-superfluous-else-raise",
559
+ "document": "rules/ruff-ret506-superfluous-else-raise.json",
560
+ "title": "Ruff RET506: Superfluous else raise",
561
+ "group": "Ruff",
562
+ "on": false
563
+ },
564
+ {
565
+ "id": "ruff-ret507-superfluous-else-continue",
566
+ "document": "rules/ruff-ret507-superfluous-else-continue.json",
567
+ "title": "Ruff RET507: Superfluous else continue",
568
+ "group": "Ruff",
569
+ "on": false
570
+ },
571
+ {
572
+ "id": "ruff-ret508-superfluous-else-break",
573
+ "document": "rules/ruff-ret508-superfluous-else-break.json",
574
+ "title": "Ruff RET508: Superfluous else break",
575
+ "group": "Ruff",
576
+ "on": false
577
+ },
578
+ {
579
+ "id": "ruff-sim101-duplicate-isinstance-call",
580
+ "document": "rules/ruff-sim101-duplicate-isinstance-call.json",
581
+ "title": "Ruff SIM101: Duplicate isinstance call",
582
+ "group": "Ruff"
583
+ },
584
+ {
585
+ "id": "ruff-sim107-return-in-try-except-finally",
586
+ "document": "rules/ruff-sim107-return-in-try-except-finally.json",
587
+ "title": "Ruff SIM107: Return in try except finally",
588
+ "group": "Ruff"
589
+ },
590
+ {
591
+ "id": "ruff-sim109-compare-with-tuple",
592
+ "document": "rules/ruff-sim109-compare-with-tuple.json",
593
+ "title": "Ruff SIM109: Compare with tuple",
594
+ "group": "Ruff",
595
+ "on": false
596
+ },
597
+ {
598
+ "id": "ruff-sim112-uncapitalized-environment-variables",
599
+ "document": "rules/ruff-sim112-uncapitalized-environment-variables.json",
600
+ "title": "Ruff SIM112: Uncapitalized environment variables",
601
+ "group": "Ruff",
602
+ "on": false
603
+ },
604
+ {
605
+ "id": "ruff-sim113-enumerate-for-loop",
606
+ "document": "rules/ruff-sim113-enumerate-for-loop.json",
607
+ "title": "Ruff SIM113: Enumerate for loop",
608
+ "group": "Ruff"
609
+ },
610
+ {
611
+ "id": "ruff-sim208-double-negation",
612
+ "document": "rules/ruff-sim208-double-negation.json",
613
+ "title": "Ruff SIM208: Double negation",
614
+ "group": "Ruff"
615
+ },
616
+ {
617
+ "id": "ruff-sim210-if-expr-with-true-false",
618
+ "document": "rules/ruff-sim210-if-expr-with-true-false.json",
619
+ "title": "Ruff SIM210: If expr with true false",
620
+ "group": "Ruff"
621
+ },
622
+ {
623
+ "id": "ruff-sim211-if-expr-with-false-true",
624
+ "document": "rules/ruff-sim211-if-expr-with-false-true.json",
625
+ "title": "Ruff SIM211: If expr with false true",
626
+ "group": "Ruff"
627
+ },
628
+ {
629
+ "id": "ruff-sim212-if-expr-with-twisted-arms",
630
+ "document": "rules/ruff-sim212-if-expr-with-twisted-arms.json",
631
+ "title": "Ruff SIM212: If expr with twisted arms",
632
+ "group": "Ruff",
633
+ "on": false
634
+ },
635
+ {
636
+ "id": "ruff-sim300-yoda-conditions",
637
+ "document": "rules/ruff-sim300-yoda-conditions.json",
638
+ "title": "Ruff SIM300: Yoda conditions",
639
+ "group": "Ruff",
640
+ "on": false
641
+ },
642
+ {
643
+ "id": "ruff-sim905-split-static-string",
644
+ "document": "rules/ruff-sim905-split-static-string.json",
645
+ "title": "Ruff SIM905: Split static string",
646
+ "group": "Ruff"
647
+ },
648
+ {
649
+ "id": "ruff-sim910-dict-get-with-none-default",
650
+ "document": "rules/ruff-sim910-dict-get-with-none-default.json",
651
+ "title": "Ruff SIM910: Dict get with none default",
652
+ "group": "Ruff",
653
+ "on": false
654
+ },
655
+ {
656
+ "id": "ruff-t100-debugger",
657
+ "document": "rules/ruff-t100-debugger.json",
658
+ "title": "Ruff T100: Debugger",
659
+ "group": "Ruff"
660
+ },
661
+ {
662
+ "id": "bandit-b101-assert-used",
663
+ "document": "rules/bandit-b101-assert-used.json",
664
+ "title": "Bandit B101: Assert used",
665
+ "group": "Bandit",
666
+ "examples": {
667
+ "caught": {
668
+ "path": "app/checks.py",
669
+ "text": "def check(user):\n assert user.is_admin\n"
670
+ },
671
+ "passes": {
672
+ "path": "app/checks.py",
673
+ "text": "def check(user):\n if not user.is_admin:\n raise PermissionError(user)\n"
674
+ }
675
+ }
676
+ },
677
+ {
678
+ "id": "bandit-b102-exec-used",
679
+ "document": "rules/bandit-b102-exec-used.json",
680
+ "title": "Bandit B102: Exec used",
681
+ "group": "Bandit"
682
+ },
683
+ {
684
+ "id": "bandit-b110-try-except-pass",
685
+ "document": "rules/bandit-b110-try-except-pass.json",
686
+ "title": "Bandit B110: Try except pass",
687
+ "group": "Bandit"
688
+ },
689
+ {
690
+ "id": "bandit-b112-try-except-continue",
691
+ "document": "rules/bandit-b112-try-except-continue.json",
692
+ "title": "Bandit B112: Try except continue",
693
+ "group": "Bandit"
694
+ },
695
+ {
696
+ "id": "bandit-b113-request-without-timeout",
697
+ "document": "rules/bandit-b113-request-without-timeout.json",
698
+ "title": "Bandit B113: Request without timeout",
699
+ "group": "Bandit"
700
+ },
701
+ {
702
+ "id": "bandit-b301-pickle",
703
+ "document": "rules/bandit-b301-pickle.json",
704
+ "title": "Bandit B301: Pickle",
705
+ "group": "Bandit"
706
+ },
707
+ {
708
+ "id": "bandit-b302-marshal",
709
+ "document": "rules/bandit-b302-marshal.json",
710
+ "title": "Bandit B302: Marshal",
711
+ "group": "Bandit"
712
+ },
713
+ {
714
+ "id": "bandit-b303-md5",
715
+ "document": "rules/bandit-b303-md5.json",
716
+ "title": "Bandit B303: Md5",
717
+ "group": "Bandit"
718
+ },
719
+ {
720
+ "id": "bandit-b305-cipher-modes",
721
+ "document": "rules/bandit-b305-cipher-modes.json",
722
+ "title": "Bandit B305: Cipher modes",
723
+ "group": "Bandit"
724
+ },
725
+ {
726
+ "id": "bandit-b306-mktemp-q",
727
+ "document": "rules/bandit-b306-mktemp-q.json",
728
+ "title": "Bandit B306: Mktemp q",
729
+ "group": "Bandit"
730
+ },
731
+ {
732
+ "id": "bandit-b307-eval",
733
+ "document": "rules/bandit-b307-eval.json",
734
+ "title": "Bandit B307: Eval",
735
+ "group": "Bandit"
736
+ },
737
+ {
738
+ "id": "bandit-b308-mark-safe",
739
+ "document": "rules/bandit-b308-mark-safe.json",
740
+ "title": "Bandit B308: Mark safe",
741
+ "group": "Bandit"
742
+ },
743
+ {
744
+ "id": "bandit-b310-urllib-urlopen",
745
+ "document": "rules/bandit-b310-urllib-urlopen.json",
746
+ "title": "Bandit B310: Urllib urlopen",
747
+ "group": "Bandit"
748
+ },
749
+ {
750
+ "id": "bandit-b311-random",
751
+ "document": "rules/bandit-b311-random.json",
752
+ "title": "Bandit B311: Random",
753
+ "group": "Bandit"
754
+ },
755
+ {
756
+ "id": "bandit-b312-telnetlib",
757
+ "document": "rules/bandit-b312-telnetlib.json",
758
+ "title": "Bandit B312: Telnetlib",
759
+ "group": "Bandit"
760
+ },
761
+ {
762
+ "id": "bandit-b313-xml-bad-celementtree",
763
+ "document": "rules/bandit-b313-xml-bad-celementtree.json",
764
+ "title": "Bandit B313: Xml bad cElementTree",
765
+ "group": "Bandit"
766
+ },
767
+ {
768
+ "id": "bandit-b314-xml-bad-elementtree",
769
+ "document": "rules/bandit-b314-xml-bad-elementtree.json",
770
+ "title": "Bandit B314: Xml bad ElementTree",
771
+ "group": "Bandit"
772
+ },
773
+ {
774
+ "id": "bandit-b315-xml-bad-expatreader",
775
+ "document": "rules/bandit-b315-xml-bad-expatreader.json",
776
+ "title": "Bandit B315: Xml bad expatreader",
777
+ "group": "Bandit"
778
+ },
779
+ {
780
+ "id": "bandit-b316-xml-bad-expatbuilder",
781
+ "document": "rules/bandit-b316-xml-bad-expatbuilder.json",
782
+ "title": "Bandit B316: Xml bad expatbuilder",
783
+ "group": "Bandit"
784
+ },
785
+ {
786
+ "id": "bandit-b317-xml-bad-sax",
787
+ "document": "rules/bandit-b317-xml-bad-sax.json",
788
+ "title": "Bandit B317: Xml bad sax",
789
+ "group": "Bandit"
790
+ },
791
+ {
792
+ "id": "bandit-b318-xml-bad-minidom",
793
+ "document": "rules/bandit-b318-xml-bad-minidom.json",
794
+ "title": "Bandit B318: Xml bad minidom",
795
+ "group": "Bandit"
796
+ },
797
+ {
798
+ "id": "bandit-b319-xml-bad-pulldom",
799
+ "document": "rules/bandit-b319-xml-bad-pulldom.json",
800
+ "title": "Bandit B319: Xml bad pulldom",
801
+ "group": "Bandit"
802
+ },
803
+ {
804
+ "id": "bandit-b321-ftplib",
805
+ "document": "rules/bandit-b321-ftplib.json",
806
+ "title": "Bandit B321: Ftplib",
807
+ "group": "Bandit"
808
+ },
809
+ {
810
+ "id": "bandit-b323-unverified-context",
811
+ "document": "rules/bandit-b323-unverified-context.json",
812
+ "title": "Bandit B323: Unverified context",
813
+ "group": "Bandit"
814
+ },
815
+ {
816
+ "id": "bandit-b401-import-telnetlib",
817
+ "document": "rules/bandit-b401-import-telnetlib.json",
818
+ "title": "Bandit B401: Import telnetlib",
819
+ "group": "Bandit"
820
+ },
821
+ {
822
+ "id": "bandit-b402-import-ftplib",
823
+ "document": "rules/bandit-b402-import-ftplib.json",
824
+ "title": "Bandit B402: Import ftplib",
825
+ "group": "Bandit"
826
+ },
827
+ {
828
+ "id": "bandit-b405-import-xml-etree",
829
+ "document": "rules/bandit-b405-import-xml-etree.json",
830
+ "title": "Bandit B405: Import xml etree",
831
+ "group": "Bandit"
832
+ },
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
+ {
840
+ "id": "bandit-b407-import-xml-expat",
841
+ "document": "rules/bandit-b407-import-xml-expat.json",
842
+ "title": "Bandit B407: Import xml expat",
843
+ "group": "Bandit"
844
+ },
845
+ {
846
+ "id": "bandit-b408-import-xml-minidom",
847
+ "document": "rules/bandit-b408-import-xml-minidom.json",
848
+ "title": "Bandit B408: Import xml minidom",
849
+ "group": "Bandit"
850
+ },
851
+ {
852
+ "id": "bandit-b409-import-xml-pulldom",
853
+ "document": "rules/bandit-b409-import-xml-pulldom.json",
854
+ "title": "Bandit B409: Import xml pulldom",
855
+ "group": "Bandit"
856
+ },
857
+ {
858
+ "id": "bandit-b411-import-xmlrpclib",
859
+ "document": "rules/bandit-b411-import-xmlrpclib.json",
860
+ "title": "Bandit B411: Import xmlrpclib",
861
+ "group": "Bandit"
862
+ },
863
+ {
864
+ "id": "bandit-b413-import-pycrypto",
865
+ "document": "rules/bandit-b413-import-pycrypto.json",
866
+ "title": "Bandit B413: Import pycrypto",
867
+ "group": "Bandit"
868
+ },
869
+ {
870
+ "id": "bandit-b415-import-pyghmi",
871
+ "document": "rules/bandit-b415-import-pyghmi.json",
872
+ "title": "Bandit B415: Import pyghmi",
873
+ "group": "Bandit"
874
+ },
875
+ {
876
+ "id": "bandit-b502-ssl-with-bad-version",
877
+ "document": "rules/bandit-b502-ssl-with-bad-version.json",
878
+ "title": "Bandit B502: Ssl with bad version",
879
+ "group": "Bandit"
880
+ },
881
+ {
882
+ "id": "bandit-b505-weak-cryptographic-key",
883
+ "document": "rules/bandit-b505-weak-cryptographic-key.json",
884
+ "title": "Bandit B505: Weak cryptographic key",
885
+ "group": "Bandit"
886
+ },
887
+ {
888
+ "id": "bandit-b507-ssh-no-host-key-verification",
889
+ "document": "rules/bandit-b507-ssh-no-host-key-verification.json",
890
+ "title": "Bandit B507: Ssh no host key verification",
891
+ "group": "Bandit"
892
+ },
893
+ {
894
+ "id": "bandit-b606-start-process-with-no-shell",
895
+ "document": "rules/bandit-b606-start-process-with-no-shell.json",
896
+ "title": "Bandit B606: Start process with no shell",
897
+ "group": "Bandit"
898
+ },
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
+ {
906
+ "id": "bandit-b615-huggingface-unsafe-download",
907
+ "document": "rules/bandit-b615-huggingface-unsafe-download.json",
908
+ "title": "Bandit B615: Huggingface unsafe download",
909
+ "group": "Bandit"
910
+ }
911
+ ]
912
+ }