Upgrade ruff to 0.6, and redo configuration and rule selection
Marco Ricci

Marco Ricci commited on 2024-09-01 10:22:13
Zeige 2 geänderte Dateien mit 98 Einfügungen und 698 Löschungen.


hatch currently still defaults to ruff 0.4.5, which includes some
now-deprecated rules and lacks some others.  Furthermore, hatch's
default configuration for ruff is very opinionated and not explained
anywhere.  Upgrading the ruleset to 0.6 still incurs the overhead of
having to look at every single new ruff rule, determining whether it
fits the hatch configuration, and allowing it.  This is a similar amount
of effort to enabling all of ruffs rules and deciding, based on the
flagged violations, whether a rule or rule category is worth keeping.

This has now been implemented: almost all rules are now selected, and
the exceptions are documented in the project settings.  (ruff actually
includes documentation on linting rules that tend to get violated if
ruff is also used for reformatting.)  hatch is configured to use ruff
0.6 and this user configuration, ignoring its own default ruff
configuration.  Some further ruff settings are necessary, e.g. adapting
the default copyright text template to match hatch's copyright text
template, as is one new mypy setting (the "ignore-without-code" error).

Note: the new ruleset has not actually been applied to the codebase yet,
because the effect would be spread out across the codebase, and we
expect multiple topic branches to be merged soon.
... ...
@@ -112,9 +112,9 @@ extra-dependencies = [
112 112
 detached = false
113 113
 
114 114
 [tool.hatch.envs.hatch-static-analysis]
115
-config-path = "ruff_defaults_v0.5.0.toml"
115
+config-path = "/dev/null"
116 116
 dependencies = [
117
-  "ruff ~= 0.5.0"
117
+  "ruff ~= 0.6.0",
118 118
 ]
119 119
 
120 120
 [tool.hatch.envs.hatch-test]
... ...
@@ -148,6 +148,7 @@ mypy_path = '$MYPY_CONFIG_FILE_DIR/src'
148 148
 explicit_package_bases = true
149 149
 implicit_reexport = false
150 150
 sqlite_cache = true
151
+enable_error_code = ['ignore-without-code']
151 152
 
152 153
 [tool.pytest.ini_options]
153 154
 addopts = '--doctest-modules'
... ...
@@ -158,45 +159,130 @@ xfail_strict = true
158 159
 [tool.ruff]
159 160
 line-length = 79
160 161
 src = ["src"]
161
-extend = "ruff_defaults_v0.5.0.toml"
162 162
 
163 163
 [tool.ruff.format]
164
-quote-style = 'single'
164
+docstring-code-format = true
165 165
 docstring-code-line-length = "dynamic"
166 166
 preview = true
167
+quote-style = 'single'
167 168
 
168 169
 [tool.ruff.lint]
169
-preview = true
170
-extend-ignore = [
170
+ignore = [
171
+    # Suggested ignore by ruff when also using ruff to format.  We *do*
172
+    # check for E501, because this usually only happens when there is a text
173
+    # string that should be manually broken.
174
+    'W191', 'E111', 'E114', 'E117', 'D206', 'D300', 'Q000', 'Q001', 'Q002',
175
+    'Q003', 'COM812', 'COM819', 'ISC001', 'ISC002',
171 176
     # We use `assert` regularly to appease the type checker, and because
172 177
     # it is the right language tool for this job.
173 178
     'S101',
179
+    # The formatter takes care of trailing commas and docstring code
180
+    # automatically.
181
+    'COM812', 'W505',
182
+    # We document transitive exceptions as well (if we feel they would be
183
+    # surprising to the user otherwise).
184
+    'DOC502',
185
+    # We currently don't have issues for every TODO.  Forcing an issue also
186
+    # goes against the philosophy of TODOs as low-overhead markers for
187
+    # future work; see
188
+    # https://gist.github.com/dmnd/ed5d8ef8de2e4cfea174bd5dafcda382 .
189
+    'TD003',
190
+    # We somewhat regularly use loops where each iteration needs a separate
191
+    # try-except block.
192
+    'PERF203',
193
+    # We catch type-ignore comments without specific code via the mypy
194
+    # configuration, not via ruff.
195
+    'PGH003',
174 196
 ]
175
-extend-select = [
176
-    # Unlike hatch's standard configuration, we care about line length.
177
-    'E501',
197
+preview = true
198
+# We select here in the order of presentation on the ruff documentation
199
+# website.  ruff default selection (v0.6.2) is merely E4, E7, E9 and F.
200
+select = [
201
+    'F', 'E', 'W', 'C90', 'I', 'N', 'D', 'UP', 'YTT',
202
+    'ANN', 'ASYNC', 'S', 'BLE', 'FBT', 'B', 'A', 'COM',
203
+    'CPY', 'C4', 'DTZ', 'T10', 'DJ', 'EM', 'EXE', 'FA',
204
+    'ISC', 'ICN', 'LOG', 'G', 'INP', 'PIE', 'T20', 'PYI',
205
+    'PT', 'Q', 'RET', 'SLF', 'SLOT', 'SIM', 'TID', 'TCH',
206
+    'INT', 'ARG',
207
+    # We currently do not use pathlib. Disable 'PTH'.
208
+    'TD',
209
+    # We use TODOs and FIXMEs as notes for later, and don't want the linter
210
+    # to nag about every occurrence.  Disable 'FIX'.
211
+    #
212
+    # The "eradicate" rule is prone to a lot of false positives, and it is
213
+    # unclear to me, and probably confusing to read, where to apply a noqa
214
+    # marker.  Instead, disable 'ERA', and if necessary, specify it on the
215
+    # command-line.
216
+    'PD', 'PGH', 'PL', 'TRY', 'FLY', 'NPY', 'FAST',
217
+    'AIR', 'PERF', 'FURB', 'DOC', 'RUF',
178 218
 ]
179 219
 
180
-[tool.ruff.lint.extend-per-file-ignores]
220
+[tool.ruff.lint.per-file-ignores]
221
+"**/scripts/*" = [
222
+  # Suggested by hatch.
223
+  'INP',
224
+  # Suggested by hatch.
225
+  'T20',
226
+]
181 227
 "**/tests/**/*" = [
182
-  # Our tests are pytest-style tests, which use `assert` liberally.
228
+  # Suggested by hatch, assumingly because it may be important to verify
229
+  # that the value is exactly the empty string, and not just any falsy
230
+  # value.
231
+  'PLC1901',
232
+  # Suggested by hatch, assumingly because tests may use "magic values".
233
+  'PLR2004',
234
+  # Suggested by hatch, because tests are typically organized as classes and
235
+  # instance methods but may not really be using the `self` argument.
236
+  'PLR6301',
237
+  # Suggested by hatch, because these warnings may be precisely what the
238
+  # tests are supposed to test.
239
+  'S',
240
+  # Suggested by hatch, because pytest-style tests conventionally import
241
+  # code from each other via relative imports.
242
+  'TID252',
243
+  # Our tests regularly use arguments named `input` to store an input
244
+  # (text-/byte-)string.
183 245
   'A002',
246
+  # We regularly annotate pytest fixtures like monkeypatch as `Any`.
247
+  'ANN401',
248
+  # Our tests generally don't contain docstrings.
249
+  'D', 'DOC',
184 250
   # Our tests are regularly parametrized with booleans, for benign
185 251
   # purposes.
186
-  'FBT001',
252
+  'FBT',
187 253
   # One of our standard modules is called `derivepassphrase._types`.
188 254
   # Importing this from the tests directory would then automatically
189 255
   # trigger `PLC2701`.
190 256
   'PLC2701',
257
+  # Too many public methods/arguments/returns/branches/locals doesn't really
258
+  # apply here.
259
+  'PLR0904', 'PLR0911', 'PLR0912', 'PLR0913', 'PLR0914', 'PLR0915',
260
+  'PLR0916', 'PLR0917',
191 261
   # To fully test the `derivepassphrase.cli` module (and a couple other
192 262
   # things), we need to call and to mock several internal functions,
193 263
   # which would automatically trigger `SLF001`.
194 264
   'SLF001',
195 265
 ]
196 266
 
267
+[tool.ruff.lint.flake8-copyright]
268
+# Include hatch-enforced SPDX-FileCopyrightText in check.
269
+notice-rgx = '(?i)(?:Copyright\s+((?:\(C\)|©)\s+)?|SPDX-FileCopyrightText:\s+)\d{4}((-|,\s)\d{4})*'
270
+
197 271
 [tool.ruff.lint.flake8-pytest-style]
272
+fixture-parentheses = false
273
+mark-parentheses = false
198 274
 parametrize-names-type = 'list'
199 275
 
276
+[tool.ruff.lint.flake8-tidy-imports]
277
+ban-relative-imports = "all"
278
+
279
+[tool.ruff.lint.isort]
280
+known-first-party = ["derivepassphrase"]
281
+
282
+[tool.ruff.lint.pycodestyle]
283
+ignore-overlong-task-comments = true  # for E501
284
+max-doc-length = 72  # for W505
285
+
200 286
 [tool.ruff.lint.pydocstyle]
201 287
 convention = 'google'
202 288
 
... ...
@@ -1,686 +0,0 @@
1
-line-length = 120
2
-
3
-[format]
4
-docstring-code-format = true
5
-docstring-code-line-length = 80
6
-
7
-[lint]
8
-select = [
9
-  "A001",
10
-  "A002",
11
-  "A003",
12
-  "ARG001",
13
-  "ARG002",
14
-  "ARG003",
15
-  "ARG004",
16
-  "ARG005",
17
-  "ASYNC100",
18
-  "ASYNC105",
19
-  "ASYNC109",
20
-  "ASYNC110",
21
-  "ASYNC115",
22
-  "ASYNC210",
23
-  "ASYNC220",
24
-  "ASYNC221",
25
-  "ASYNC230",
26
-  "ASYNC251",
27
-  "B002",
28
-  "B003",
29
-  "B004",
30
-  "B005",
31
-  "B006",
32
-  "B007",
33
-  "B008",
34
-  "B009",
35
-  "B010",
36
-  "B011",
37
-  "B012",
38
-  "B013",
39
-  "B014",
40
-  "B015",
41
-  "B016",
42
-  "B017",
43
-  "B018",
44
-  "B019",
45
-  "B020",
46
-  "B021",
47
-  "B022",
48
-  "B023",
49
-  "B024",
50
-  "B025",
51
-  "B026",
52
-  "B028",
53
-  "B029",
54
-  "B030",
55
-  "B031",
56
-  "B032",
57
-  "B033",
58
-  "B034",
59
-  "B035",
60
-  "B904",
61
-  "B905",
62
-  "B909",
63
-  "BLE001",
64
-  "C400",
65
-  "C401",
66
-  "C402",
67
-  "C403",
68
-  "C404",
69
-  "C405",
70
-  "C406",
71
-  "C408",
72
-  "C409",
73
-  "C410",
74
-  "C411",
75
-  "C413",
76
-  "C414",
77
-  "C415",
78
-  "C416",
79
-  "C417",
80
-  "C418",
81
-  "C419",
82
-  "COM818",
83
-  "DTZ001",
84
-  "DTZ002",
85
-  "DTZ003",
86
-  "DTZ004",
87
-  "DTZ005",
88
-  "DTZ006",
89
-  "DTZ007",
90
-  "DTZ011",
91
-  "DTZ012",
92
-  "E101",
93
-  "E112",
94
-  "E113",
95
-  "E115",
96
-  "E116",
97
-  "E201",
98
-  "E202",
99
-  "E203",
100
-  "E211",
101
-  "E221",
102
-  "E222",
103
-  "E223",
104
-  "E224",
105
-  "E225",
106
-  "E226",
107
-  "E227",
108
-  "E228",
109
-  "E231",
110
-  "E241",
111
-  "E242",
112
-  "E251",
113
-  "E252",
114
-  "E261",
115
-  "E262",
116
-  "E265",
117
-  "E266",
118
-  "E271",
119
-  "E272",
120
-  "E273",
121
-  "E274",
122
-  "E275",
123
-  "E401",
124
-  "E402",
125
-  "E502",
126
-  "E701",
127
-  "E702",
128
-  "E703",
129
-  "E711",
130
-  "E712",
131
-  "E713",
132
-  "E714",
133
-  "E721",
134
-  "E722",
135
-  "E731",
136
-  "E741",
137
-  "E742",
138
-  "E743",
139
-  "E902",
140
-  "EM101",
141
-  "EM102",
142
-  "EM103",
143
-  "EXE001",
144
-  "EXE002",
145
-  "EXE003",
146
-  "EXE004",
147
-  "EXE005",
148
-  "F401",
149
-  "F402",
150
-  "F403",
151
-  "F404",
152
-  "F405",
153
-  "F406",
154
-  "F407",
155
-  "F501",
156
-  "F502",
157
-  "F503",
158
-  "F504",
159
-  "F505",
160
-  "F506",
161
-  "F507",
162
-  "F508",
163
-  "F509",
164
-  "F521",
165
-  "F522",
166
-  "F523",
167
-  "F524",
168
-  "F525",
169
-  "F541",
170
-  "F601",
171
-  "F602",
172
-  "F621",
173
-  "F622",
174
-  "F631",
175
-  "F632",
176
-  "F633",
177
-  "F634",
178
-  "F701",
179
-  "F702",
180
-  "F704",
181
-  "F706",
182
-  "F707",
183
-  "F722",
184
-  "F811",
185
-  "F821",
186
-  "F822",
187
-  "F823",
188
-  "F841",
189
-  "F842",
190
-  "F901",
191
-  "FA100",
192
-  "FA102",
193
-  "FBT001",
194
-  "FBT002",
195
-  "FLY002",
196
-  "FURB105",
197
-  "FURB110",
198
-  "FURB113",
199
-  "FURB116",
200
-  "FURB118",
201
-  "FURB129",
202
-  "FURB131",
203
-  "FURB132",
204
-  "FURB136",
205
-  "FURB142",
206
-  "FURB145",
207
-  "FURB148",
208
-  "FURB152",
209
-  "FURB157",
210
-  "FURB161",
211
-  "FURB163",
212
-  "FURB164",
213
-  "FURB166",
214
-  "FURB167",
215
-  "FURB168",
216
-  "FURB169",
217
-  "FURB171",
218
-  "FURB177",
219
-  "FURB180",
220
-  "FURB181",
221
-  "FURB187",
222
-  "FURB192",
223
-  "G001",
224
-  "G002",
225
-  "G003",
226
-  "G004",
227
-  "G010",
228
-  "G101",
229
-  "G201",
230
-  "G202",
231
-  "I001",
232
-  "I002",
233
-  "ICN001",
234
-  "ICN002",
235
-  "ICN003",
236
-  "INP001",
237
-  "INT001",
238
-  "INT002",
239
-  "INT003",
240
-  "ISC003",
241
-  "LOG001",
242
-  "LOG002",
243
-  "LOG007",
244
-  "LOG009",
245
-  "N801",
246
-  "N802",
247
-  "N803",
248
-  "N804",
249
-  "N805",
250
-  "N806",
251
-  "N807",
252
-  "N811",
253
-  "N812",
254
-  "N813",
255
-  "N814",
256
-  "N815",
257
-  "N816",
258
-  "N817",
259
-  "N818",
260
-  "N999",
261
-  "PERF101",
262
-  "PERF102",
263
-  "PERF401",
264
-  "PERF402",
265
-  "PERF403",
266
-  "PGH005",
267
-  "PIE790",
268
-  "PIE794",
269
-  "PIE796",
270
-  "PIE800",
271
-  "PIE804",
272
-  "PIE807",
273
-  "PIE808",
274
-  "PIE810",
275
-  "PLC0105",
276
-  "PLC0131",
277
-  "PLC0132",
278
-  "PLC0205",
279
-  "PLC0208",
280
-  "PLC0414",
281
-  "PLC0415",
282
-  "PLC1901",
283
-  "PLC2401",
284
-  "PLC2403",
285
-  "PLC2701",
286
-  "PLC2801",
287
-  "PLC3002",
288
-  "PLE0100",
289
-  "PLE0101",
290
-  "PLE0115",
291
-  "PLE0116",
292
-  "PLE0117",
293
-  "PLE0118",
294
-  "PLE0237",
295
-  "PLE0241",
296
-  "PLE0302",
297
-  "PLE0303",
298
-  "PLE0304",
299
-  "PLE0305",
300
-  "PLE0307",
301
-  "PLE0308",
302
-  "PLE0309",
303
-  "PLE0604",
304
-  "PLE0605",
305
-  "PLE0643",
306
-  "PLE0704",
307
-  "PLE1132",
308
-  "PLE1141",
309
-  "PLE1142",
310
-  "PLE1205",
311
-  "PLE1206",
312
-  "PLE1300",
313
-  "PLE1307",
314
-  "PLE1310",
315
-  "PLE1507",
316
-  "PLE1519",
317
-  "PLE1520",
318
-  "PLE1700",
319
-  "PLE2502",
320
-  "PLE2510",
321
-  "PLE2512",
322
-  "PLE2513",
323
-  "PLE2514",
324
-  "PLE2515",
325
-  "PLE4703",
326
-  "PLR0124",
327
-  "PLR0133",
328
-  "PLR0202",
329
-  "PLR0203",
330
-  "PLR0206",
331
-  "PLR0402",
332
-  "PLR1704",
333
-  "PLR1711",
334
-  "PLR1714",
335
-  "PLR1722",
336
-  "PLR1730",
337
-  "PLR1733",
338
-  "PLR1736",
339
-  "PLR2004",
340
-  "PLR2044",
341
-  "PLR5501",
342
-  "PLR6104",
343
-  "PLR6201",
344
-  "PLR6301",
345
-  "PLW0108",
346
-  "PLW0120",
347
-  "PLW0127",
348
-  "PLW0128",
349
-  "PLW0129",
350
-  "PLW0131",
351
-  "PLW0133",
352
-  "PLW0177",
353
-  "PLW0211",
354
-  "PLW0245",
355
-  "PLW0406",
356
-  "PLW0602",
357
-  "PLW0603",
358
-  "PLW0604",
359
-  "PLW0642",
360
-  "PLW0711",
361
-  "PLW1501",
362
-  "PLW1508",
363
-  "PLW1509",
364
-  "PLW1510",
365
-  "PLW1514",
366
-  "PLW1641",
367
-  "PLW2101",
368
-  "PLW2901",
369
-  "PLW3201",
370
-  "PLW3301",
371
-  "PT001",
372
-  "PT002",
373
-  "PT003",
374
-  "PT006",
375
-  "PT007",
376
-  "PT008",
377
-  "PT009",
378
-  "PT010",
379
-  "PT011",
380
-  "PT012",
381
-  "PT013",
382
-  "PT014",
383
-  "PT015",
384
-  "PT016",
385
-  "PT017",
386
-  "PT018",
387
-  "PT019",
388
-  "PT020",
389
-  "PT021",
390
-  "PT022",
391
-  "PT023",
392
-  "PT024",
393
-  "PT025",
394
-  "PT026",
395
-  "PT027",
396
-  "PYI001",
397
-  "PYI002",
398
-  "PYI003",
399
-  "PYI004",
400
-  "PYI005",
401
-  "PYI006",
402
-  "PYI007",
403
-  "PYI008",
404
-  "PYI009",
405
-  "PYI010",
406
-  "PYI011",
407
-  "PYI012",
408
-  "PYI013",
409
-  "PYI014",
410
-  "PYI015",
411
-  "PYI016",
412
-  "PYI017",
413
-  "PYI018",
414
-  "PYI019",
415
-  "PYI020",
416
-  "PYI021",
417
-  "PYI024",
418
-  "PYI025",
419
-  "PYI026",
420
-  "PYI029",
421
-  "PYI030",
422
-  "PYI032",
423
-  "PYI033",
424
-  "PYI034",
425
-  "PYI035",
426
-  "PYI036",
427
-  "PYI041",
428
-  "PYI042",
429
-  "PYI043",
430
-  "PYI044",
431
-  "PYI045",
432
-  "PYI046",
433
-  "PYI047",
434
-  "PYI048",
435
-  "PYI049",
436
-  "PYI050",
437
-  "PYI051",
438
-  "PYI052",
439
-  "PYI053",
440
-  "PYI054",
441
-  "PYI055",
442
-  "PYI056",
443
-  "PYI058",
444
-  "PYI059",
445
-  "PYI062",
446
-  "RET503",
447
-  "RET504",
448
-  "RET505",
449
-  "RET506",
450
-  "RET507",
451
-  "RET508",
452
-  "RSE102",
453
-  "RUF001",
454
-  "RUF002",
455
-  "RUF003",
456
-  "RUF005",
457
-  "RUF006",
458
-  "RUF007",
459
-  "RUF008",
460
-  "RUF009",
461
-  "RUF010",
462
-  "RUF012",
463
-  "RUF013",
464
-  "RUF015",
465
-  "RUF016",
466
-  "RUF017",
467
-  "RUF018",
468
-  "RUF019",
469
-  "RUF020",
470
-  "RUF021",
471
-  "RUF022",
472
-  "RUF023",
473
-  "RUF024",
474
-  "RUF025",
475
-  "RUF026",
476
-  "RUF027",
477
-  "RUF028",
478
-  "RUF029",
479
-  "RUF100",
480
-  "RUF101",
481
-  "S101",
482
-  "S102",
483
-  "S103",
484
-  "S104",
485
-  "S105",
486
-  "S106",
487
-  "S107",
488
-  "S108",
489
-  "S110",
490
-  "S112",
491
-  "S113",
492
-  "S201",
493
-  "S202",
494
-  "S301",
495
-  "S302",
496
-  "S303",
497
-  "S304",
498
-  "S305",
499
-  "S306",
500
-  "S307",
501
-  "S308",
502
-  "S310",
503
-  "S311",
504
-  "S312",
505
-  "S313",
506
-  "S314",
507
-  "S315",
508
-  "S316",
509
-  "S317",
510
-  "S318",
511
-  "S319",
512
-  "S320",
513
-  "S321",
514
-  "S323",
515
-  "S324",
516
-  "S401",
517
-  "S402",
518
-  "S403",
519
-  "S405",
520
-  "S406",
521
-  "S407",
522
-  "S408",
523
-  "S409",
524
-  "S411",
525
-  "S412",
526
-  "S413",
527
-  "S415",
528
-  "S501",
529
-  "S502",
530
-  "S503",
531
-  "S504",
532
-  "S505",
533
-  "S506",
534
-  "S507",
535
-  "S508",
536
-  "S509",
537
-  "S601",
538
-  "S602",
539
-  "S604",
540
-  "S605",
541
-  "S606",
542
-  "S607",
543
-  "S608",
544
-  "S609",
545
-  "S610",
546
-  "S611",
547
-  "S612",
548
-  "S701",
549
-  "S702",
550
-  "SIM101",
551
-  "SIM102",
552
-  "SIM103",
553
-  "SIM105",
554
-  "SIM107",
555
-  "SIM108",
556
-  "SIM109",
557
-  "SIM110",
558
-  "SIM112",
559
-  "SIM113",
560
-  "SIM114",
561
-  "SIM115",
562
-  "SIM116",
563
-  "SIM117",
564
-  "SIM118",
565
-  "SIM201",
566
-  "SIM202",
567
-  "SIM208",
568
-  "SIM210",
569
-  "SIM211",
570
-  "SIM212",
571
-  "SIM220",
572
-  "SIM221",
573
-  "SIM222",
574
-  "SIM223",
575
-  "SIM300",
576
-  "SIM910",
577
-  "SIM911",
578
-  "SLF001",
579
-  "SLOT000",
580
-  "SLOT001",
581
-  "SLOT002",
582
-  "T100",
583
-  "T201",
584
-  "T203",
585
-  "TCH001",
586
-  "TCH002",
587
-  "TCH003",
588
-  "TCH004",
589
-  "TCH005",
590
-  "TCH010",
591
-  "TD004",
592
-  "TD005",
593
-  "TD006",
594
-  "TD007",
595
-  "TID251",
596
-  "TID252",
597
-  "TID253",
598
-  "TRY002",
599
-  "TRY003",
600
-  "TRY004",
601
-  "TRY201",
602
-  "TRY300",
603
-  "TRY301",
604
-  "TRY302",
605
-  "TRY400",
606
-  "TRY401",
607
-  "UP001",
608
-  "UP003",
609
-  "UP004",
610
-  "UP005",
611
-  "UP006",
612
-  "UP007",
613
-  "UP008",
614
-  "UP009",
615
-  "UP010",
616
-  "UP011",
617
-  "UP012",
618
-  "UP013",
619
-  "UP014",
620
-  "UP015",
621
-  "UP017",
622
-  "UP018",
623
-  "UP019",
624
-  "UP020",
625
-  "UP021",
626
-  "UP022",
627
-  "UP023",
628
-  "UP024",
629
-  "UP025",
630
-  "UP026",
631
-  "UP027",
632
-  "UP028",
633
-  "UP029",
634
-  "UP030",
635
-  "UP031",
636
-  "UP032",
637
-  "UP033",
638
-  "UP034",
639
-  "UP035",
640
-  "UP036",
641
-  "UP037",
642
-  "UP038",
643
-  "UP039",
644
-  "UP040",
645
-  "UP041",
646
-  "UP042",
647
-  "W291",
648
-  "W292",
649
-  "W293",
650
-  "W391",
651
-  "W505",
652
-  "W605",
653
-  "YTT101",
654
-  "YTT102",
655
-  "YTT103",
656
-  "YTT201",
657
-  "YTT202",
658
-  "YTT203",
659
-  "YTT204",
660
-  "YTT301",
661
-  "YTT302",
662
-  "YTT303",
663
-]
664
-
665
-[lint.per-file-ignores]
666
-"**/scripts/*" = [
667
-  "INP001",
668
-  "T201",
669
-]
670
-"**/tests/**/*" = [
671
-  "PLC1901",
672
-  "PLR2004",
673
-  "PLR6301",
674
-  "S",
675
-  "TID252",
676
-]
677
-
678
-[lint.flake8-tidy-imports]
679
-ban-relative-imports = "all"
680
-
681
-[lint.isort]
682
-known-first-party = ["derivepassphrase"]
683
-
684
-[lint.flake8-pytest-style]
685
-fixture-parentheses = false
686
-mark-parentheses = false
687 0