diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7c55224..74fedc5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,7 +9,7 @@ ci: repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.11.4 + rev: v0.11.5 hooks: - id: ruff args: [--fix] @@ -45,7 +45,7 @@ repos: exclude: tests/(eval|autofix)_files/.*_py(310|311).py - repo: https://github.com/RobertCraigie/pyright-python - rev: v1.1.398 + rev: v1.1.399 hooks: - id: pyright # ignore warnings about new version being available, no other warnings diff --git a/flake8_async/runner.py b/flake8_async/runner.py index 3d9a136..4562892 100644 --- a/flake8_async/runner.py +++ b/flake8_async/runner.py @@ -12,6 +12,7 @@ import libcst as cst +from .base import Error, Options from .visitors import ( ERROR_CLASSES, ERROR_CLASSES_CST, @@ -25,18 +26,17 @@ from libcst import Module - from .base import Error, Options from .visitors.flake8asyncvisitor import Flake8AsyncVisitor, Flake8AsyncVisitor_cst @dataclass class SharedState: options: Options - problems: list[Error] = field(default_factory=list) - noqas: dict[int, set[str]] = field(default_factory=dict) + problems: list[Error] = field(default_factory=list[Error]) + noqas: dict[int, set[str]] = field(default_factory=dict[int, set[str]]) library: tuple[str, ...] = () - typed_calls: dict[str, str] = field(default_factory=dict) - variables: dict[str, str] = field(default_factory=dict) + typed_calls: dict[str, str] = field(default_factory=dict[str, str]) + variables: dict[str, str] = field(default_factory=dict[str, str]) class __CommonRunner: diff --git a/flake8_async/visitors/visitor91x.py b/flake8_async/visitors/visitor91x.py index 853e644..43cba5b 100644 --- a/flake8_async/visitors/visitor91x.py +++ b/flake8_async/visitors/visitor91x.py @@ -162,13 +162,21 @@ class LoopState: body_guaranteed_once: bool = False has_break: bool = False - uncheckpointed_before_continue: set[Statement] = field(default_factory=set) - uncheckpointed_before_break: set[Statement] = field(default_factory=set) - - artificial_errors: set[cst.Return | cst.Yield] = field(default_factory=set) - nodes_needing_checkpoints: list[cst.Return | cst.Yield | ArtificialStatement] = ( - field(default_factory=list) + uncheckpointed_before_continue: set[Statement] = field( + default_factory=set[Statement] ) + uncheckpointed_before_break: set[Statement] = field(default_factory=set[Statement]) + # pyright emits reportUnknownVariableType, requiring the generic to default_factory + # to be specified. + # But for these we require a union, and `|` doesn't work on py39, and uses of + # `Union` gets autofixed by ruff. + # So.... let's just ignore the error for now + artificial_errors: set[ # pyright: ignore[reportUnknownVariableType] + cst.Return | cst.Yield + ] = field(default_factory=set) + nodes_needing_checkpoints: list[ # pyright: ignore[reportUnknownVariableType] + cst.Return | cst.Yield | ArtificialStatement + ] = field(default_factory=list) def copy(self): return LoopState( @@ -184,10 +192,14 @@ def copy(self): @dataclass class TryState: - body_uncheckpointed_statements: set[Statement] = field(default_factory=set) - try_checkpoint: set[Statement] = field(default_factory=set) - except_uncheckpointed_statements: set[Statement] = field(default_factory=set) - added: set[Statement] = field(default_factory=set) + body_uncheckpointed_statements: set[Statement] = field( + default_factory=set[Statement] + ) + try_checkpoint: set[Statement] = field(default_factory=set[Statement]) + except_uncheckpointed_statements: set[Statement] = field( + default_factory=set[Statement] + ) + added: set[Statement] = field(default_factory=set[Statement]) def copy(self): return TryState( @@ -202,8 +214,12 @@ def copy(self): class MatchState: # TryState, LoopState, and MatchState all do fairly similar things. It would be nice # to harmonize them and share logic. - base_uncheckpointed_statements: set[Statement] = field(default_factory=set) - case_uncheckpointed_statements: set[Statement] = field(default_factory=set) + base_uncheckpointed_statements: set[Statement] = field( + default_factory=set[Statement] + ) + case_uncheckpointed_statements: set[Statement] = field( + default_factory=set[Statement] + ) has_fallback: bool = False def copy(self):