From 7209c727cb725da795b7997a63b60d00f0178f18 Mon Sep 17 00:00:00 2001 From: Kound Date: Thu, 10 Mar 2022 15:31:45 +0100 Subject: [PATCH 1/4] Change to covariant typing list is not working as it is invairant, see https://mypy.readthedocs.io/en/stable/common_issues.html#variance --- prompt_toolkit/formatted_text/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/prompt_toolkit/formatted_text/base.py b/prompt_toolkit/formatted_text/base.py index e88c5935a..fc332105a 100644 --- a/prompt_toolkit/formatted_text/base.py +++ b/prompt_toolkit/formatted_text/base.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Any, Callable, Iterable, List, Tuple, Union, cast +from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence, Tuple, Union, cast from prompt_toolkit.mouse_events import MouseEvent @@ -21,8 +21,8 @@ Tuple[str, str], Tuple[str, str, Callable[[MouseEvent], None]] ] -# List of (style, text) tuples. -StyleAndTextTuples = List[OneStyleAndTextTuple] +# Sequence (covariant version of list) of (style, text) tuples. +StyleAndTextTuples = Sequence[OneStyleAndTextTuple] if TYPE_CHECKING: From bb055b673448fedcef99427c808153832e24967e Mon Sep 17 00:00:00 2001 From: Kound Date: Thu, 10 Mar 2022 15:35:47 +0100 Subject: [PATCH 2/4] Accept any Iterable of words Given be the usage of words, it does not need to be List nor Sequence only an Iterable --- prompt_toolkit/completion/word_completer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prompt_toolkit/completion/word_completer.py b/prompt_toolkit/completion/word_completer.py index 28c133e92..caab51e2e 100644 --- a/prompt_toolkit/completion/word_completer.py +++ b/prompt_toolkit/completion/word_completer.py @@ -1,4 +1,4 @@ -from typing import Callable, Iterable, List, Mapping, Optional, Pattern, Union +from typing import Callable, Iterable, Mapping, Optional, Pattern, Union from prompt_toolkit.completion import CompleteEvent, Completer, Completion from prompt_toolkit.document import Document @@ -31,7 +31,7 @@ class WordCompleter(Completer): def __init__( self, - words: Union[List[str], Callable[[], List[str]]], + words: Union[Iterable[str], Callable[[], Iterable[str]]], ignore_case: bool = False, display_dict: Optional[Mapping[str, AnyFormattedText]] = None, meta_dict: Optional[Mapping[str, AnyFormattedText]] = None, From 862875ac9ff27d85ac7e6eeedf6764c9356ee318 Mon Sep 17 00:00:00 2001 From: Kound Date: Thu, 10 Mar 2022 15:45:34 +0100 Subject: [PATCH 3/4] Use Iterable only for typing --- prompt_toolkit/formatted_text/base.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/prompt_toolkit/formatted_text/base.py b/prompt_toolkit/formatted_text/base.py index fc332105a..cd7c621b4 100644 --- a/prompt_toolkit/formatted_text/base.py +++ b/prompt_toolkit/formatted_text/base.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Any, Callable, Iterable, Sequence, Tuple, Union, cast +from typing import TYPE_CHECKING, Any, Callable, List, Iterable, Sequence, Tuple, Union, cast from prompt_toolkit.mouse_events import MouseEvent @@ -8,6 +8,7 @@ __all__ = [ "OneStyleAndTextTuple", "StyleAndTextTuples", + "StyleAndTextTuplesType", "MagicFormattedText", "AnyFormattedText", "to_formatted_text", @@ -21,9 +22,11 @@ Tuple[str, str], Tuple[str, str, Callable[[MouseEvent], None]] ] -# Sequence (covariant version of list) of (style, text) tuples. -StyleAndTextTuples = Sequence[OneStyleAndTextTuple] - +# List (covariant version of list) of (style, text) tuples +# Not there is a subclass of this +StyleAndTextTuples = List[OneStyleAndTextTuple] +# For typing stuff, we prefer an Iterable as it is more flexible +StyleAndTextTuplesType = Iterable[OneStyleAndTextTuple] if TYPE_CHECKING: from typing_extensions import TypeGuard From 8bdaf3556c8ff9aea8ac02c74e5141cb8d9147f1 Mon Sep 17 00:00:00 2001 From: Kound Date: Thu, 10 Mar 2022 15:47:43 +0100 Subject: [PATCH 4/4] Update base.py --- prompt_toolkit/formatted_text/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prompt_toolkit/formatted_text/base.py b/prompt_toolkit/formatted_text/base.py index cd7c621b4..3a05b091a 100644 --- a/prompt_toolkit/formatted_text/base.py +++ b/prompt_toolkit/formatted_text/base.py @@ -44,7 +44,7 @@ def __pt_formatted_text__(self) -> StyleAndTextTuples: AnyFormattedText = Union[ str, "MagicFormattedText", - StyleAndTextTuples, + StyleAndTextTuplesTypes, # Callable[[], 'AnyFormattedText'] # Recursive definition not supported by mypy. Callable[[], Any], None,