Skip to content

Commit 337e3eb

Browse files
authored
Combine suppression code diagnostics (#22613)
# Summary - Report a single combined UnusedNOQA diagnostic when any range suppression has one or more unused, disabled, or duplicate lint codes. - Report a single combined InvalidRuleCode diagnostic for any range suppression with one or more invalid lint codes. # Test Plan Updated fixtures and snapshots Fixes #22429, #21873
1 parent 5c97b6e commit 337e3eb

3 files changed

Lines changed: 173 additions & 133 deletions

File tree

crates/ruff_linter/resources/test/fixtures/ruff/suppressions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def f():
5757

5858

5959
def f():
60-
# TODO: Duplicate codes should be counted as duplicate, not unused
60+
# Duplicate codes that are actually used.
6161
# ruff: disable[F841, F841]
6262
foo = 0
6363

crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__range_suppressions.snap

Lines changed: 20 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ source: crates/ruff_linter/src/rules/ruff/mod.rs
77

88
--- Summary ---
99
Removed: 15
10-
Added: 20
10+
Added: 17
1111

1212
--- Removed ---
1313
E741 Ambiguous variable name: `I`
@@ -151,14 +151,14 @@ note: This is an unsafe fix and may change runtime behavior
151151
F841 [*] Local variable `foo` is assigned to but never used
152152
--> suppressions.py:62:5
153153
|
154-
60 | # TODO: Duplicate codes should be counted as duplicate, not unused
154+
60 | # Duplicate codes that are actually used.
155155
61 | # ruff: disable[F841, F841]
156156
62 | foo = 0
157157
| ^^^
158158
|
159159
help: Remove assignment to unused variable `foo`
160160
59 | def f():
161-
60 | # TODO: Duplicate codes should be counted as duplicate, not unused
161+
60 | # Duplicate codes that are actually used.
162162
61 | # ruff: disable[F841, F841]
163163
- foo = 0
164164
62 + pass
@@ -339,26 +339,26 @@ RUF104 Suppression comment without matching `#ruff:enable` comment
339339
--> suppressions.py:61:5
340340
|
341341
59 | def f():
342-
60 | # TODO: Duplicate codes should be counted as duplicate, not unused
342+
60 | # Duplicate codes that are actually used.
343343
61 | # ruff: disable[F841, F841]
344344
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
345345
62 | foo = 0
346346
|
347347

348348

349-
RUF100 [*] Unused suppression (unused: `F841`)
350-
--> suppressions.py:61:21
349+
RUF100 [*] Unused suppression (duplicated: `F841`)
350+
--> suppressions.py:61:5
351351
|
352352
59 | def f():
353-
60 | # TODO: Duplicate codes should be counted as duplicate, not unused
353+
60 | # Duplicate codes that are actually used.
354354
61 | # ruff: disable[F841, F841]
355-
| ^^^^
355+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
356356
62 | foo = 0
357357
|
358358
help: Remove unused suppression
359359
58 |
360360
59 | def f():
361-
60 | # TODO: Duplicate codes should be counted as duplicate, not unused
361+
60 | # Duplicate codes that are actually used.
362362
- # ruff: disable[F841, F841]
363363
61 + # ruff: disable[F841]
364364
62 | foo = 0
@@ -408,41 +408,21 @@ RUF104 Suppression comment without matching `#ruff:enable` comment
408408
|
409409

410410

411-
RUF100 [*] Unused suppression (unused: `E741`)
412-
--> suppressions.py:75:21
413-
|
414-
73 | def f():
415-
74 | # Multiple codes but only one is used
416-
75 | # ruff: disable[E741, F401, F841]
417-
| ^^^^
418-
76 | foo = 0
419-
|
420-
help: Remove unused suppression
421-
72 |
422-
73 | def f():
423-
74 | # Multiple codes but only one is used
424-
- # ruff: disable[E741, F401, F841]
425-
75 + # ruff: disable[F401, F841]
426-
76 | foo = 0
427-
77 |
428-
78 |
429-
430-
431-
RUF100 [*] Unused suppression (non-enabled: `F401`)
432-
--> suppressions.py:75:27
411+
RUF100 [*] Unused suppression (unused: `E741`; non-enabled: `F401`)
412+
--> suppressions.py:75:5
433413
|
434414
73 | def f():
435415
74 | # Multiple codes but only one is used
436416
75 | # ruff: disable[E741, F401, F841]
437-
| ^^^^
417+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
438418
76 | foo = 0
439419
|
440420
help: Remove unused suppression
441421
72 |
442422
73 | def f():
443423
74 | # Multiple codes but only one is used
444424
- # ruff: disable[E741, F401, F841]
445-
75 + # ruff: disable[E741, F841]
425+
75 + # ruff: disable[F841]
446426
76 | foo = 0
447427
77 |
448428
78 |
@@ -460,12 +440,12 @@ RUF104 Suppression comment without matching `#ruff:enable` comment
460440

461441

462442
RUF100 [*] Unused suppression (non-enabled: `F401`)
463-
--> suppressions.py:81:27
443+
--> suppressions.py:81:5
464444
|
465445
79 | def f():
466446
80 | # Multiple codes but only two are used
467447
81 | # ruff: disable[E741, F401, F841]
468-
| ^^^^
448+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
469449
82 | I = 0
470450
|
471451
help: Remove unused suppression
@@ -479,64 +459,23 @@ help: Remove unused suppression
479459
84 |
480460

481461

482-
RUF100 [*] Unused suppression (unused: `E741`)
483-
--> suppressions.py:87:21
462+
RUF100 [*] Unused suppression (unused: `E741`, `F841`; non-enabled: `F401`)
463+
--> suppressions.py:87:5
484464
|
485465
85 | def f():
486466
86 | # Multiple codes but none are used
487467
87 | # ruff: disable[E741, F401, F841]
488-
| ^^^^
489-
88 | print("hello")
490-
|
491-
help: Remove unused suppression
492-
84 |
493-
85 | def f():
494-
86 | # Multiple codes but none are used
495-
- # ruff: disable[E741, F401, F841]
496-
87 + # ruff: disable[F401, F841]
497-
88 | print("hello")
498-
89 |
499-
90 |
500-
501-
502-
RUF100 [*] Unused suppression (non-enabled: `F401`)
503-
--> suppressions.py:87:27
504-
|
505-
85 | def f():
506-
86 | # Multiple codes but none are used
507-
87 | # ruff: disable[E741, F401, F841]
508-
| ^^^^
509-
88 | print("hello")
510-
|
511-
help: Remove unused suppression
512-
84 |
513-
85 | def f():
514-
86 | # Multiple codes but none are used
515-
- # ruff: disable[E741, F401, F841]
516-
87 + # ruff: disable[E741, F841]
517-
88 | print("hello")
518-
89 |
519-
90 |
520-
521-
522-
RUF100 [*] Unused suppression (unused: `F841`)
523-
--> suppressions.py:87:33
524-
|
525-
85 | def f():
526-
86 | # Multiple codes but none are used
527-
87 | # ruff: disable[E741, F401, F841]
528-
| ^^^^
468+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
529469
88 | print("hello")
530470
|
531471
help: Remove unused suppression
532472
84 |
533473
85 | def f():
534474
86 | # Multiple codes but none are used
535475
- # ruff: disable[E741, F401, F841]
536-
87 + # ruff: disable[E741, F401]
537-
88 | print("hello")
476+
87 | print("hello")
477+
88 |
538478
89 |
539-
90 |
540479

541480

542481
RUF102 [*] Invalid rule code in suppression: YF829

0 commit comments

Comments
 (0)