@@ -26,12 +26,21 @@ def visit_Subscript(self, node: ast.Subscript) -> None:
26
26
if node .value .id == "Optional" :
27
27
new_syntax = f"{ ast .unparse (node .slice )} | None"
28
28
errors .append (f"{ path } :{ node .lineno } : Use PEP 604 syntax for Optional, e.g. `{ new_syntax } `" )
29
- if node .value .id == "List" :
30
- new_syntax = f"list [{ ast .unparse (node .slice )} ]"
29
+ if node .value .id in { "List" , "FrozenSet" } :
30
+ new_syntax = f"{ node . value . id . lower () } [{ ast .unparse (node .slice )} ]"
31
31
errors .append (f"{ path } :{ node .lineno } : Use built-in generics, e.g. `{ new_syntax } `" )
32
+ if node .value .id == "Deque" :
33
+ new_syntax = f"collections.deque[{ ast .unparse (node .slice )} ]"
34
+ errors .append (f"{ path } :{ node .lineno } : Use `collections.deque` instead of `typing.Deque`, e.g. `{ new_syntax } `" )
32
35
if node .value .id == "Dict" :
33
36
new_syntax = f"dict[{ unparse_without_tuple_parens (node .slice )} ]"
34
37
errors .append (f"{ path } :{ node .lineno } : Use built-in generics, e.g. `{ new_syntax } `" )
38
+ if node .value .id == "DefaultDict" :
39
+ new_syntax = f"collections.defaultdict[{ unparse_without_tuple_parens (node .slice )} ]"
40
+ errors .append (
41
+ f"{ path } :{ node .lineno } : Use `collections.defaultdict` instead of `typing.DefaultDict`, "
42
+ f"e.g. `{ new_syntax } `"
43
+ )
35
44
# Tuple[Foo, ...] must be allowed because of mypy bugs
36
45
if node .value .id == "Tuple" and not (
37
46
isinstance (node .slice , ast .Tuple ) and len (node .slice .elts ) == 2 and is_dotdotdot (node .slice .elts [1 ])
0 commit comments