From 0762be0be1d34928713868d5908216dd90ec3721 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Sat, 25 Jan 2025 23:37:58 +0100 Subject: [PATCH 1/2] Re-enable UP007 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f31b824fea..80611ab1d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ extend-exclude = ["vendor", "data/playground/**/*.py"] [tool.ruff.lint] select = ["E", "F", "C4", "I001", "UP", "SIM"] -ignore = ["E501", "SIM105", "UP007", "UP035"] +ignore = ["E501", "SIM105", "UP035"] [tool.pyright] reportSelfClsParameterName = false From 64625423d6ae44dc105a668b38a009f8c4bd46d1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Sat, 25 Jan 2025 22:40:39 +0000 Subject: [PATCH 2/2] [pre-commit.ci lite] apply automatic fixes --- cursorless-talon-dev/src/spoken_form_test.py | 4 ++-- cursorless-talon/src/actions/actions.py | 4 ++-- cursorless-talon/src/actions/get_text.py | 6 ++---- cursorless-talon/src/actions/homophones.py | 4 +--- cursorless-talon/src/cheatsheet/get_list.py | 6 +++--- cursorless-talon/src/csv_overrides.py | 16 ++++++++-------- cursorless-talon/src/private_api/private_api.py | 10 +++++----- cursorless-talon/src/public_api.py | 8 ++++---- cursorless-talon/src/snippets.py | 12 ++++++------ cursorless-talon/src/targets/destination.py | 4 +--- cursorless-talon/src/targets/range_target.py | 3 +-- cursorless-talon/src/targets/target.py | 6 ++---- cursorless-talon/src/targets/target_types.py | 14 +++++++------- 13 files changed, 44 insertions(+), 53 deletions(-) diff --git a/cursorless-talon-dev/src/spoken_form_test.py b/cursorless-talon-dev/src/spoken_form_test.py index 275c8c3a7e..208425e169 100644 --- a/cursorless-talon-dev/src/spoken_form_test.py +++ b/cursorless-talon-dev/src/spoken_form_test.py @@ -1,5 +1,5 @@ import json -from typing import Any, Optional +from typing import Any from talon import Context, Module, actions, scope, settings @@ -115,7 +115,7 @@ def private_cursorless_use_community_snippets(enable: bool): # pyright: ignore def private_cursorless_spoken_form_test( phrase: str, # pyright: ignore [reportGeneralTypeIssues] - mockedGetValue_: Optional[str], + mockedGetValue_: str | None, ): """Run Cursorless spoken form test""" global commands_run, mockedGetValue diff --git a/cursorless-talon/src/actions/actions.py b/cursorless-talon/src/actions/actions.py index 01281df341..31fa69a5d3 100644 --- a/cursorless-talon/src/actions/actions.py +++ b/cursorless-talon/src/actions/actions.py @@ -1,4 +1,4 @@ -from typing import Callable, Union +from typing import Callable from talon import Module, actions @@ -123,7 +123,7 @@ def cursorless_ide_command(command_id: str, target: CursorlessTarget): # pyrigh def cursorless_insert( destination: CursorlessDestination, # pyright: ignore [reportGeneralTypeIssues] - text: Union[str, list[str]], + text: str | list[str], ): """Perform text insertion on Cursorless destination""" if isinstance(text, str): diff --git a/cursorless-talon/src/actions/get_text.py b/cursorless-talon/src/actions/get_text.py index 6f1770ad85..9e1bdc459a 100644 --- a/cursorless-talon/src/actions/get_text.py +++ b/cursorless-talon/src/actions/get_text.py @@ -1,5 +1,3 @@ -from typing import Optional - from talon import Module, actions from ..targets.target_types import CursorlessTarget @@ -35,8 +33,8 @@ def cursorless_get_text_list( def cursorless_get_text_action( target: CursorlessTarget, *, - show_decorations: Optional[bool] = None, - ensure_single_target: Optional[bool] = None, + show_decorations: bool | None = None, + ensure_single_target: bool | None = None, ) -> list[str]: """Get target texts""" options: dict[str, bool] = {} diff --git a/cursorless-talon/src/actions/homophones.py b/cursorless-talon/src/actions/homophones.py index 4b3b7f3280..6c9d2876b2 100644 --- a/cursorless-talon/src/actions/homophones.py +++ b/cursorless-talon/src/actions/homophones.py @@ -1,5 +1,3 @@ -from typing import Optional - from talon import actions, app from ..targets.target_types import ( @@ -23,7 +21,7 @@ def cursorless_homophones_action(target: CursorlessExplicitTarget): def get_next_homophone(word: str) -> str: - homophones: Optional[list[str]] = actions.user.homophones_get(word) + homophones: list[str] | None = actions.user.homophones_get(word) if not homophones: raise LookupError(f"Found no homophones for '{word}'") index = (homophones.index(word.lower()) + 1) % len(homophones) diff --git a/cursorless-talon/src/cheatsheet/get_list.py b/cursorless-talon/src/cheatsheet/get_list.py index 341873fd6a..d61d50a218 100644 --- a/cursorless-talon/src/cheatsheet/get_list.py +++ b/cursorless-talon/src/cheatsheet/get_list.py @@ -1,7 +1,7 @@ import re import typing from collections.abc import Mapping, Sequence -from typing import Optional, TypedDict +from typing import TypedDict from talon import registry @@ -20,7 +20,7 @@ class ListItemDescriptor(TypedDict): def get_list( - name: str, type: str, descriptions: Optional[Mapping[str, str]] = None + name: str, type: str, descriptions: Mapping[str, str] | None = None ) -> list[ListItemDescriptor]: if descriptions is None: descriptions = {} @@ -31,7 +31,7 @@ def get_list( def get_lists( - names: Sequence[str], type: str, descriptions: Optional[Mapping[str, str]] = None + names: Sequence[str], type: str, descriptions: Mapping[str, str] | None = None ) -> list[ListItemDescriptor]: return [item for name in names for item in get_list(name, type, descriptions)] diff --git a/cursorless-talon/src/csv_overrides.py b/cursorless-talon/src/csv_overrides.py index d87f1c4ed1..52f2e6b76e 100644 --- a/cursorless-talon/src/csv_overrides.py +++ b/cursorless-talon/src/csv_overrides.py @@ -5,7 +5,7 @@ from dataclasses import dataclass from datetime import datetime from pathlib import Path -from typing import Callable, Iterable, Optional, TypedDict +from typing import Callable, Iterable, TypedDict from talon import Context, Module, actions, app, fs, settings @@ -60,15 +60,15 @@ def csv_get_normalized_ctx(): def init_csv_and_watch_changes( filename: str, default_values: ListToSpokenForms, - handle_new_values: Optional[Callable[[list[SpokenFormEntry]], None]] = None, + handle_new_values: Callable[[list[SpokenFormEntry]], None] | None = None, *, - extra_ignored_values: Optional[list[str]] = None, - extra_allowed_values: Optional[list[str]] = None, + extra_ignored_values: list[str] | None = None, + extra_allowed_values: list[str] | None = None, allow_unknown_values: bool = False, - default_list_name: Optional[str] = None, + default_list_name: str | None = None, headers: list[str] = [SPOKEN_FORM_HEADER, CURSORLESS_IDENTIFIER_HEADER], no_update_file: bool = False, - pluralize_lists: Optional[list[str]] = None, + pluralize_lists: list[str] | None = None, ): """ Initialize a cursorless settings csv, creating it if necessary, and watch @@ -229,9 +229,9 @@ def update_dicts( extra_ignored_values: list[str], extra_allowed_values: list[str], allow_unknown_values: bool, - default_list_name: Optional[str], + default_list_name: str | None, pluralize_lists: list[str], - handle_new_values: Optional[Callable[[list[SpokenFormEntry]], None]], + handle_new_values: Callable[[list[SpokenFormEntry]], None] | None, ): # Create map with all default values results_map: dict[str, ResultsListEntry] = {} diff --git a/cursorless-talon/src/private_api/private_api.py b/cursorless-talon/src/private_api/private_api.py index 16665942c2..cf4b6bd3b8 100644 --- a/cursorless-talon/src/private_api/private_api.py +++ b/cursorless-talon/src/private_api/private_api.py @@ -1,4 +1,4 @@ -from typing import Any, Optional, Union +from typing import Any from talon import Module, actions @@ -26,14 +26,14 @@ class TargetBuilderActions: def cursorless_private_build_primitive_target( modifiers: list[dict], # pyright: ignore [reportGeneralTypeIssues] - mark: Optional[dict], + mark: dict | None, ) -> PrimitiveTarget: """Cursorless private api low-level target builder: Create a primitive target""" return PrimitiveTarget(mark, modifiers) def cursorless_private_build_list_target( - elements: list[Union[PrimitiveTarget, RangeTarget]], # pyright: ignore [reportGeneralTypeIssues] - ) -> Union[PrimitiveTarget, RangeTarget, ListTarget]: + elements: list[PrimitiveTarget | RangeTarget], # pyright: ignore [reportGeneralTypeIssues] + ) -> PrimitiveTarget | RangeTarget | ListTarget: """Cursorless private api low-level target builder: Create a list target""" if len(elements) == 1: return elements[0] @@ -52,7 +52,7 @@ def cursorless_private_target_nothing() -> PrimitiveTarget: class ActionActions: def cursorless_private_action_highlight( target: CursorlessTarget, # pyright: ignore [reportGeneralTypeIssues] - highlightId: Optional[str] = None, + highlightId: str | None = None, ) -> None: """Cursorless private api: Highlights a target""" payload = { diff --git a/cursorless-talon/src/public_api.py b/cursorless-talon/src/public_api.py index c332ad1cf3..a90c2c8861 100644 --- a/cursorless-talon/src/public_api.py +++ b/cursorless-talon/src/public_api.py @@ -1,4 +1,4 @@ -from typing import Any, Optional +from typing import Any from talon import Module, actions @@ -28,9 +28,9 @@ def cursorless_create_destination( class CommandActions: def cursorless_custom_command( content: str, # pyright: ignore [reportGeneralTypeIssues] - arg1: Optional[Any] = None, - arg2: Optional[Any] = None, - arg3: Optional[Any] = None, + arg1: Any | None = None, + arg2: Any | None = None, + arg3: Any | None = None, ): """Cursorless: Run custom parsed command""" actions.user.private_cursorless_command_and_wait( diff --git a/cursorless-talon/src/snippets.py b/cursorless-talon/src/snippets.py index 1a28fb1df8..8ac90aa356 100644 --- a/cursorless-talon/src/snippets.py +++ b/cursorless-talon/src/snippets.py @@ -1,5 +1,5 @@ from dataclasses import dataclass -from typing import Any, Optional, Union +from typing import Any from talon import Module, actions @@ -97,7 +97,7 @@ def insert_snippet(snippet_description: dict, destination: CursorlessDestination def insert_named_snippet( name: str, destination: CursorlessDestination, - substitutions: Optional[dict] = None, + substitutions: dict | None = None, ): snippet: dict = { "type": "named", @@ -111,7 +111,7 @@ def insert_named_snippet( def insert_custom_snippet( body: str, destination: CursorlessDestination, - scope_types: Optional[list[dict]] = None, + scope_types: list[dict] | None = None, ): snippet: dict = { "type": "custom", @@ -155,7 +155,7 @@ def cursorless_insert_snippet_by_name(name: str): # pyright: ignore [reportGene def cursorless_insert_snippet( body: str, # pyright: ignore [reportGeneralTypeIssues] destination: CursorlessDestination = ImplicitDestination(), - scope_type: Optional[Union[str, list[str]]] = None, + scope_type: str | list[str] | None = None, ): """Cursorless: Insert custom snippet """ if isinstance(scope_type, str): @@ -186,8 +186,8 @@ def cursorless_wrap_with_snippet_by_name( def cursorless_wrap_with_snippet( body: str, # pyright: ignore [reportGeneralTypeIssues] target: CursorlessTarget, - variable_name: Optional[str] = None, - scope: Optional[str] = None, + variable_name: str | None = None, + scope: str | None = None, ): """Cursorless: Wrap target with custom snippet """ snippet_arg: dict[str, Any] = { diff --git a/cursorless-talon/src/targets/destination.py b/cursorless-talon/src/targets/destination.py index 0c01864942..07ac84196c 100644 --- a/cursorless-talon/src/targets/destination.py +++ b/cursorless-talon/src/targets/destination.py @@ -1,5 +1,3 @@ -from typing import Union - from talon import Module from .target_types import ListDestination, PrimitiveDestination @@ -29,7 +27,7 @@ def cursorless_insertion_mode(m) -> str: "({user.cursorless_list_connective} )*" ) ) -def cursorless_destination(m) -> Union[ListDestination, PrimitiveDestination]: +def cursorless_destination(m) -> ListDestination | PrimitiveDestination: destinations = [ PrimitiveDestination(insertion_mode, target) for insertion_mode, target in zip( diff --git a/cursorless-talon/src/targets/range_target.py b/cursorless-talon/src/targets/range_target.py index 37dbab69dc..8f86ad3af8 100644 --- a/cursorless-talon/src/targets/range_target.py +++ b/cursorless-talon/src/targets/range_target.py @@ -1,5 +1,4 @@ from dataclasses import dataclass -from typing import Optional from talon import Module @@ -22,7 +21,7 @@ class RangeConnective: @dataclass class RangeConnectiveWithType: connective: RangeConnective - type: Optional[RangeTargetType] + type: RangeTargetType | None @mod.capture(rule="{user.cursorless_range_connective}") diff --git a/cursorless-talon/src/targets/target.py b/cursorless-talon/src/targets/target.py index 417d8c1c4b..beb7ec4716 100644 --- a/cursorless-talon/src/targets/target.py +++ b/cursorless-talon/src/targets/target.py @@ -1,5 +1,3 @@ -from typing import Union - from talon import Module from .target_types import ListTarget, PrimitiveTarget, RangeTarget @@ -16,7 +14,7 @@ @mod.capture( rule=(" | ") ) -def cursorless_primitive_or_range_target(m) -> Union[RangeTarget, PrimitiveTarget]: +def cursorless_primitive_or_range_target(m) -> RangeTarget | PrimitiveTarget: return m[0] @@ -26,7 +24,7 @@ def cursorless_primitive_or_range_target(m) -> Union[RangeTarget, PrimitiveTarge "({user.cursorless_list_connective} )*" ) ) -def cursorless_target(m) -> Union[ListTarget, RangeTarget, PrimitiveTarget]: +def cursorless_target(m) -> ListTarget | RangeTarget | PrimitiveTarget: targets = m.cursorless_primitive_or_range_target_list if len(targets) == 1: diff --git a/cursorless-talon/src/targets/target_types.py b/cursorless-talon/src/targets/target_types.py index 110094f85c..538815e0aa 100644 --- a/cursorless-talon/src/targets/target_types.py +++ b/cursorless-talon/src/targets/target_types.py @@ -1,5 +1,5 @@ from dataclasses import dataclass -from typing import Any, Literal, Optional, Union +from typing import Any, Literal, Union from ..marks.mark_types import Mark @@ -9,8 +9,8 @@ @dataclass class PrimitiveTarget: type = "primitive" - mark: Optional[Mark] - modifiers: Optional[list[dict[str, Any]]] + mark: Mark | None + modifiers: list[dict[str, Any]] | None @dataclass @@ -21,17 +21,17 @@ class ImplicitTarget: @dataclass class RangeTarget: type = "range" - anchor: Union[PrimitiveTarget, ImplicitTarget] + anchor: PrimitiveTarget | ImplicitTarget active: PrimitiveTarget excludeAnchor: bool excludeActive: bool - rangeType: Optional[RangeTargetType] + rangeType: RangeTargetType | None @dataclass class ListTarget: type = "list" - elements: list[Union[PrimitiveTarget, RangeTarget]] + elements: list[PrimitiveTarget | RangeTarget] CursorlessTarget = Union[ @@ -53,7 +53,7 @@ class ListTarget: class PrimitiveDestination: type = "primitive" insertionMode: InsertionMode - target: Union[ListTarget, RangeTarget, PrimitiveTarget] + target: ListTarget | RangeTarget | PrimitiveTarget @dataclass