@@ -14,26 +14,55 @@ a = 4 + test # knot: ignore
1414a = 4 + test # knot: ignore[unresolved-reference]
1515```
1616
17- ## Useless suppression
18-
19- TODO: Red Knot should emit an ` unused-suppression ` diagnostic for the
20- ` possibly-unresolved-reference ` suppression.
17+ ## Unused suppression
2118
2219``` py
2320test = 10
21+ # error: [unused-ignore-comment] "Unused `knot: ignore` directive: 'possibly-unresolved-reference'"
2422a = test + 3 # knot: ignore[possibly-unresolved-reference]
2523```
2624
27- ## Useless suppression if the error codes don't match
28-
29- TODO: Red Knot should emit a ` unused-suppression ` diagnostic for the ` possibly-unresolved-reference `
30- suppression because it doesn't match the actual ` unresolved-reference ` diagnostic.
25+ ## Unused suppression if the error codes don't match
3126
3227``` py
3328# error: [unresolved-reference]
29+ # error: [unused-ignore-comment] "Unused `knot: ignore` directive: 'possibly-unresolved-reference'"
3430a = test + 3 # knot: ignore[possibly-unresolved-reference]
3531```
3632
33+ ## Suppressed unused comment
34+
35+ ``` py
36+ # error: [unused-ignore-comment]
37+ a = 10 / 2 # knot: ignore[division-by-zero]
38+ a = 10 / 2 # knot: ignore[division-by-zero, unused-ignore-comment]
39+ a = 10 / 2 # knot: ignore[unused-ignore-comment, division-by-zero]
40+ a = 10 / 2 # knot: ignore[unused-ignore-comment] # type: ignore
41+ a = 10 / 2 # type: ignore # knot: ignore[unused-ignore-comment]
42+ ```
43+
44+ ## Unused ignore comment
45+
46+ ``` py
47+ # error: [unused-ignore-comment] "Unused `knot: ignore` directive: 'unused-ignore-comment'"
48+ a = 10 / 0 # knot: ignore[division-by-zero, unused-ignore-comment]
49+ ```
50+
51+ ## Multiple unused comments
52+
53+ Today, Red Knot emits a diagnostic for every unused code.
54+ We might want to group the codes by comment at some point in the future.
55+
56+ ``` py
57+ # error: [unused-ignore-comment] "Unused `knot: ignore` directive: 'division-by-zero'"
58+ # error: [unused-ignore-comment] "Unused `knot: ignore` directive: 'unresolved-reference'"
59+ a = 10 / 2 # knot: ignore[division-by-zero, unresolved-reference]
60+
61+ # error: [unused-ignore-comment] "Unused `knot: ignore` directive: 'invalid-assignment'"
62+ # error: [unused-ignore-comment] "Unused `knot: ignore` directive: 'unresolved-reference'"
63+ a = 10 / 0 # knot: ignore[invalid-assignment, division-by-zero, unresolved-reference]
64+ ```
65+
3766## Multiple suppressions
3867
3968``` py
@@ -47,17 +76,20 @@ def test(a: f"f-string type annotation", b: b"byte-string-type-annotation"): ...
4776
4877``` py
4978# error: [invalid-syntax]
79+ # error: [unused-ignore-comment]
5080def test ( # knot: ignore
5181```
5282
5383<!-- blacken-docs :on -- >
5484
5585# # Can't suppress `revealed-type` diagnostics
5686
87+ TODO : Emit an error that the rule code is unknown: `unknown- rule`
88+
5789```py
5890a = 10
5991# revealed: Literal[10]
60- reveal_type(a) # knot: ignore
92+ reveal_type(a) # knot: ignore[revealed-type]
6193```
6294
6395# # Extra whitespace in type ignore comments is allowed
@@ -126,6 +158,7 @@ if they should use a different syntax that also supports enabling rules or chang
126158severity: `knot: possibly- undefined- reference=error`
127159
128160```py
161+ # error: [unused-ignore-comment]
129162# knot: ignore[division-by-zero]
130163
131164a = 4 / 0 # error: [division-by-zero]
0 commit comments