From a896b037ad856f60dcf149bc69f07d1948b532db Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:28:55 +0000 Subject: [PATCH 1/3] [pre-commit.ci] pre-commit autoupdate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.11.4 → v0.11.5](https://github.com/astral-sh/ruff-pre-commit/compare/v0.11.4...v0.11.5) - [github.com/RobertCraigie/pyright-python: v1.1.398 → v1.1.399](https://github.com/RobertCraigie/pyright-python/compare/v1.1.398...v1.1.399) --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 From 36ed8a6c0bfe1bc3c573b2eb065d93d5f5597edb Mon Sep 17 00:00:00 2001 From: jakkdl Date: Wed, 16 Apr 2025 16:19:07 +0200 Subject: [PATCH 2/3] fix new pyright errors --- flake8_async/runner.py | 10 ++++---- flake8_async/visitors/visitor91x.py | 40 ++++++++++++++++++++--------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/flake8_async/runner.py b/flake8_async/runner.py index 3d9a136..884be2c 100644 --- a/flake8_async/runner.py +++ b/flake8_async/runner.py @@ -25,18 +25,18 @@ from libcst import Module - from .base import Error, Options from .visitors.flake8asyncvisitor import Flake8AsyncVisitor, Flake8AsyncVisitor_cst +from .base import Error, Options @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): From 28a3cbe7b7fda03d5442e5a79ca453706f339159 Mon Sep 17 00:00:00 2001 From: jakkdl Date: Thu, 17 Apr 2025 13:47:39 +0200 Subject: [PATCH 3/3] sort imports --- flake8_async/runner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake8_async/runner.py b/flake8_async/runner.py index 884be2c..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, @@ -26,7 +27,6 @@ from libcst import Module from .visitors.flake8asyncvisitor import Flake8AsyncVisitor, Flake8AsyncVisitor_cst -from .base import Error, Options @dataclass