Skip to content

Commit 3f896c5

Browse files
committed
Correctly handle annotated assignments.
1 parent ca111af commit 3f896c5

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

flake8_slots/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ def visit_Assign(self, node: ast.Assign): # noqa: D102
6363
if isinstance(target, ast.Name) and target.id == "__slots__":
6464
self.has_slots = True
6565

66+
def visit_AnnAssign(self, node: ast.AnnAssign): # noqa: D102
67+
if isinstance(node.target, ast.Name) and node.target.id == "__slots__":
68+
self.has_slots = True
69+
6670

6771
def resolve_dotted_name(name: Union[str, ast.Name, ast.Attribute, ast.Call, ast.Subscript]) -> Iterator[str]:
6872
if isinstance(name, str):

tests/test_good_code.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
namedtuple_a = "import collections\nclass Person(collections.namedtuple('foo', 'name, age')): __slots__ = ()"
1818
namedtuple_b = "from collections import namedtuple\nclass Person(namedtuple('foo', 'name, age')): __slots__ = ()"
1919

20+
namedtuple_c = """\
21+
from collections import namedtuple
22+
class Person(namedtuple('foo', 'name, age')):
23+
__slots__: Tuple[str] = ()
24+
"""
25+
2026
typing_namedtuple_a = """\
2127
import typing
2228
class Person(typing.NamedTuple):
@@ -33,6 +39,28 @@ class Person(NamedTuple):
3339
age: int
3440
"""
3541

42+
typing_namedtuple_c = """\
43+
from typing import NamedTuple
44+
class Person(NamedTuple):
45+
__slots__: Tuple[str] = ()
46+
name: str
47+
age: int
48+
"""
49+
50+
typing_namedtuple_d = """\
51+
from typing import NamedTuple
52+
class Person(NamedTuple):
53+
__slots__: List[str] = []
54+
name: str
55+
age: int
56+
"""
57+
58+
mutable = """\
59+
from collections import Counter
60+
class Compound(Counter):
61+
pass
62+
"""
63+
3664
sources = pytest.mark.parametrize(
3765
"source",
3866
[
@@ -45,8 +73,12 @@ class Person(NamedTuple):
4573
typing_tuple_c,
4674
namedtuple_a,
4775
namedtuple_b,
76+
namedtuple_c,
4877
typing_namedtuple_a,
4978
typing_namedtuple_b,
79+
typing_namedtuple_c,
80+
typing_namedtuple_d,
81+
mutable,
5082
]
5183
)
5284

0 commit comments

Comments
 (0)