diff --git a/.github/workflows/workflow-ci.yml b/.github/workflows/workflow-ci.yml index 7840cfa..c81eb8f 100644 --- a/.github/workflows/workflow-ci.yml +++ b/.github/workflows/workflow-ci.yml @@ -35,7 +35,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.10', '3.11'] + python-version: ['3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v4 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c40354e..cf08491 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,6 +13,11 @@ repos: hooks: - id: check-github-workflows - id: check-dependabot + - repo: https://github.com/asottile/pyupgrade + rev: v3.15.0 + hooks: + - id: pyupgrade + args: [--py310-plus] - repo: https://github.com/psf/black rev: 23.7.0 hooks: @@ -27,23 +32,23 @@ repos: hooks: - id: flake8 additional_dependencies: [ - # "flake8-assertive~=2.1.0" - # "flake8-future-annotations~=1.1.0", "dlint~=0.14.1", "flake8-async~=22.11.14", "flake8-bandit~=4.1.1", - "flake8-bugbear~=23.7.10", + "flake8-bugbear~=23.9.16", "flake8-comprehensions~=3.14.0", "flake8-eradicate~=1.5.0", - "flake8-mock==0.4", + # disabled because on 3.12 gets confused by E902 errors + # https://github.com/zupo/flake8-mock/issues/16 +# "flake8-mock==0.4", "flake8-noqa~=1.3.2", "flake8-pie~=0.16.0", "flake8-pytest-style~=1.7.2", "flake8-self~=0.2.2", - "flake8-simplify~=0.20.0", - "flake8-type-checking~=2.4.1", - "flake8-typing-imports~=1.14.0", + "flake8-simplify~=0.21.0", + "flake8-type-checking~=2.5.1", + "flake8-typing-imports~=1.15.0", "flake8-unused-arguments~=0.0.13", - "flake8-warnings~=0.4.0", + "flake8-warnings~=0.4.1", "pep8-naming~=0.13.3", ] diff --git a/difflume/diffapp/differ.py b/difflume/diffapp/differ.py index 4206f86..e6a1f07 100644 --- a/difflume/diffapp/differ.py +++ b/difflume/diffapp/differ.py @@ -1,8 +1,13 @@ +from __future__ import annotations + import difflib from collections import deque from dataclasses import dataclass from enum import Enum -from typing import Generator, Iterable +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from collections.abc import Generator, Iterable class DiffType(Enum): diff --git a/difflume/diffapp/modules.py b/difflume/diffapp/modules.py index a7a8879..1382c4f 100644 --- a/difflume/diffapp/modules.py +++ b/difflume/diffapp/modules.py @@ -123,7 +123,7 @@ def __init__(self, path: str) -> None: async def _read_text(self) -> str: try: - with open(self._path, "r") as f: + with open(self._path) as f: return f.read() except (OSError, UnicodeDecodeError) as e: raise ReadError(f"Could not read file {self._path}") from e diff --git a/difflume/tui/modals.py b/difflume/tui/modals.py index 9fee2b5..38d9e42 100644 --- a/difflume/tui/modals.py +++ b/difflume/tui/modals.py @@ -2,7 +2,7 @@ from __future__ import annotations import os -from typing import TYPE_CHECKING, Generator +from typing import TYPE_CHECKING from textual.binding import Binding from textual.containers import Center, ScrollableContainer @@ -21,6 +21,8 @@ from difflume.diffapp.modules import CouchDBModule, FSModule, URLModule if TYPE_CHECKING: + from collections.abc import Generator + from textual import events from textual.app import ComposeResult diff --git a/difflume/tui/screens.py b/difflume/tui/screens.py index 484853d..1638187 100644 --- a/difflume/tui/screens.py +++ b/difflume/tui/screens.py @@ -4,7 +4,7 @@ import contextlib import os from pathlib import Path -from typing import TYPE_CHECKING, Generator, Literal +from typing import TYPE_CHECKING, Literal from rich.highlighter import Highlighter, JSONHighlighter, ReprHighlighter from rich.style import Style @@ -21,6 +21,8 @@ from difflume.tui.widgets import LeftPanel, MiddlePanel, Panel, PanelType, RightPanel if TYPE_CHECKING: + from collections.abc import Generator + from textual.app import ComposeResult diff --git a/difflume/tui/widgets.py b/difflume/tui/widgets.py index c51e954..020ff67 100644 --- a/difflume/tui/widgets.py +++ b/difflume/tui/widgets.py @@ -2,7 +2,7 @@ from __future__ import annotations from enum import Enum -from typing import TYPE_CHECKING, Generator +from typing import TYPE_CHECKING from textual.binding import Binding from textual.containers import VerticalScroll @@ -13,6 +13,8 @@ from difflume.tui import modals if TYPE_CHECKING: + from collections.abc import Generator + from rich.console import RenderableType from textual.app import ComposeResult