From 366d52334a5e148d257bbf35fde50352f41f876e Mon Sep 17 00:00:00 2001 From: sobolevn Date: Tue, 16 Aug 2022 15:35:05 +0300 Subject: [PATCH] Use more `Final` and `TypeAlias` types --- misc/analyze_cache.py | 5 +++-- misc/incremental_checker.py | 11 ++++++----- mypy/dmypy_server.py | 8 ++++---- mypy/errors.py | 6 ++++-- mypy/literals.py | 4 ++-- mypy/plugins/singledispatch.py | 4 ++-- mypy/semanal_main.py | 4 +++- mypy/server/astdiff.py | 3 ++- mypy/server/aststrip.py | 3 ++- mypy/server/update.py | 4 ++-- mypy/stubdoc.py | 4 ++-- mypy/stubtest.py | 4 ++-- mypy/test/data.py | 4 ++-- 13 files changed, 36 insertions(+), 28 deletions(-) diff --git a/misc/analyze_cache.py b/misc/analyze_cache.py index 333a188971b6..e8468278b863 100644 --- a/misc/analyze_cache.py +++ b/misc/analyze_cache.py @@ -5,10 +5,11 @@ import os.path from collections import Counter from typing import Any, Dict, Iterable, List, Optional +from typing_extensions import Final, TypeAlias as _TypeAlias -ROOT = ".mypy_cache/3.5" +ROOT: Final = ".mypy_cache/3.5" -JsonDict = Dict[str, Any] +JsonDict: _TypeAlias = Dict[str, Any] class CacheData: diff --git a/misc/incremental_checker.py b/misc/incremental_checker.py index 8a441d6dc401..862b54bfe3a2 100755 --- a/misc/incremental_checker.py +++ b/misc/incremental_checker.py @@ -43,13 +43,14 @@ import time from argparse import ArgumentParser, Namespace, RawDescriptionHelpFormatter from typing import Any, Dict, List, Optional, Tuple +from typing_extensions import TypeAlias as _TypeAlias -CACHE_PATH = ".incremental_checker_cache.json" -MYPY_REPO_URL = "https://github.com/python/mypy.git" -MYPY_TARGET_FILE = "mypy" -DAEMON_CMD = ["python3", "-m", "mypy.dmypy"] +CACHE_PATH: Final = ".incremental_checker_cache.json" +MYPY_REPO_URL: Final = "https://github.com/python/mypy.git" +MYPY_TARGET_FILE: Final = "mypy" +DAEMON_CMD: Final = ["python3", "-m", "mypy.dmypy"] -JsonDict = Dict[str, Any] +JsonDict: _TypeAlias = Dict[str, Any] def print_offset(text: str, indent_length: int = 4) -> None: diff --git a/mypy/dmypy_server.py b/mypy/dmypy_server.py index d5909569dcd9..66b0f3a9bc76 100644 --- a/mypy/dmypy_server.py +++ b/mypy/dmypy_server.py @@ -16,7 +16,7 @@ import traceback from contextlib import redirect_stderr, redirect_stdout from typing import AbstractSet, Any, Callable, Dict, List, Optional, Sequence, Set, Tuple -from typing_extensions import Final +from typing_extensions import Final, TypeAlias as _TypeAlias import mypy.build import mypy.errors @@ -161,9 +161,9 @@ def ignore_suppressed_imports(module: str) -> bool: return module.startswith("encodings.") -ModulePathPair = Tuple[str, str] -ModulePathPairs = List[ModulePathPair] -ChangesAndRemovals = Tuple[ModulePathPairs, ModulePathPairs] +ModulePathPair: _TypeAlias = Tuple[str, str] +ModulePathPairs: _TypeAlias = List[ModulePathPair] +ChangesAndRemovals: _TypeAlias = Tuple[ModulePathPairs, ModulePathPairs] class Server: diff --git a/mypy/errors.py b/mypy/errors.py index 273cfbc834fc..46bb75ee47d8 100644 --- a/mypy/errors.py +++ b/mypy/errors.py @@ -3,7 +3,7 @@ import traceback from collections import defaultdict from typing import Callable, Dict, List, NoReturn, Optional, Set, TextIO, Tuple, TypeVar, Union -from typing_extensions import Final, Literal +from typing_extensions import Final, Literal, TypeAlias as _TypeAlias from mypy import errorcodes as codes from mypy.errorcodes import IMPORT, ErrorCode @@ -123,7 +123,9 @@ def __init__( # Type used internally to represent errors: # (path, line, column, end_line, end_column, severity, message, allow_dups, code) -ErrorTuple = Tuple[Optional[str], int, int, int, int, str, str, bool, Optional[ErrorCode]] +ErrorTuple: _TypeAlias = Tuple[ + Optional[str], int, int, int, int, str, str, bool, Optional[ErrorCode] +] class ErrorWatcher: diff --git a/mypy/literals.py b/mypy/literals.py index 6d3a8f2843fe..6bdb2cfbb06f 100644 --- a/mypy/literals.py +++ b/mypy/literals.py @@ -1,5 +1,5 @@ from typing import Any, Iterable, Optional, Tuple, Union -from typing_extensions import Final +from typing_extensions import Final, TypeAlias as _TypeAlias from mypy.nodes import ( LITERAL_NO, @@ -123,7 +123,7 @@ def literal(e: Expression) -> int: return LITERAL_NO -Key = Tuple[Any, ...] +Key: _TypeAlias = Tuple[Any, ...] def subkeys(key: Key) -> Iterable[Key]: diff --git a/mypy/plugins/singledispatch.py b/mypy/plugins/singledispatch.py index 053d3f77c57d..18c3559168cf 100644 --- a/mypy/plugins/singledispatch.py +++ b/mypy/plugins/singledispatch.py @@ -1,7 +1,7 @@ from __future__ import annotations from typing import List, NamedTuple, Optional, Sequence, TypeVar, Union -from typing_extensions import Final +from typing_extensions import Final, TypeAlias as _TypeAlias from mypy.messages import format_type from mypy.nodes import ARG_POS, Argument, Block, ClassDef, Context, SymbolTable, TypeInfo, Var @@ -76,7 +76,7 @@ def make_fake_register_class_instance( return Instance(info, type_args) -PluginContext = Union[FunctionContext, MethodContext] +PluginContext: _TypeAlias = Union[FunctionContext, MethodContext] def fail(ctx: PluginContext, msg: str, context: Optional[Context]) -> None: diff --git a/mypy/semanal_main.py b/mypy/semanal_main.py index a2f9cf3c7e98..2fdde47a482c 100644 --- a/mypy/semanal_main.py +++ b/mypy/semanal_main.py @@ -294,7 +294,9 @@ def process_top_level_function( analyzer.saved_locals.clear() -TargetInfo = Tuple[str, Union[MypyFile, FuncDef, OverloadedFuncDef, Decorator], Optional[TypeInfo]] +TargetInfo: _TypeAlias = Tuple[ + str, Union[MypyFile, FuncDef, OverloadedFuncDef, Decorator], Optional[TypeInfo] +] def get_all_leaf_targets(file: MypyFile) -> List[TargetInfo]: diff --git a/mypy/server/astdiff.py b/mypy/server/astdiff.py index d6a5539323c1..a1c494643e2c 100644 --- a/mypy/server/astdiff.py +++ b/mypy/server/astdiff.py @@ -53,6 +53,7 @@ class level -- these are handled at attribute level (say, 'mod.Cls.method' from __future__ import annotations from typing import Dict, Optional, Sequence, Set, Tuple, Union +from typing_extensions import TypeAlias as _TypeAlias from mypy.nodes import ( UNBOUND_IMPORTED, @@ -103,7 +104,7 @@ class level -- these are handled at attribute level (say, 'mod.Cls.method' # snapshots are immutable). # # For example, the snapshot of the 'int' type is ('Instance', 'builtins.int', ()). -SnapshotItem = Tuple[object, ...] +SnapshotItem: _TypeAlias = Tuple[object, ...] def compare_symbol_table_snapshots( diff --git a/mypy/server/aststrip.py b/mypy/server/aststrip.py index 04cf43fe0c7b..465e0c61e136 100644 --- a/mypy/server/aststrip.py +++ b/mypy/server/aststrip.py @@ -35,6 +35,7 @@ from contextlib import contextmanager, nullcontext from typing import Dict, Iterator, Optional, Tuple, Union +from typing_extensions import TypeAlias as _TypeAlias from mypy.nodes import ( CLASSDEF_NO_INFO, @@ -66,7 +67,7 @@ from mypy.types import CallableType from mypy.typestate import TypeState -SavedAttributes = Dict[Tuple[ClassDef, str], SymbolTableNode] +SavedAttributes: _TypeAlias = Dict[Tuple[ClassDef, str], SymbolTableNode] def strip_target( diff --git a/mypy/server/update.py b/mypy/server/update.py index 8f6d5a5ecc90..59eaacc0c829 100644 --- a/mypy/server/update.py +++ b/mypy/server/update.py @@ -118,7 +118,7 @@ import sys import time from typing import Callable, Dict, List, NamedTuple, Optional, Sequence, Set, Tuple, Union -from typing_extensions import Final +from typing_extensions import Final, TypeAlias as _TypeAlias from mypy.build import ( DEBUG_FINE_GRAINED, @@ -540,7 +540,7 @@ class BlockedUpdate(NamedTuple): messages: List[str] -UpdateResult = Union[NormalUpdate, BlockedUpdate] +UpdateResult: _TypeAlias = Union[NormalUpdate, BlockedUpdate] def update_module_isolated( diff --git a/mypy/stubdoc.py b/mypy/stubdoc.py index 608cdb375d2e..52fa8772880a 100644 --- a/mypy/stubdoc.py +++ b/mypy/stubdoc.py @@ -17,10 +17,10 @@ Sequence, Tuple, ) -from typing_extensions import Final +from typing_extensions import Final, TypeAlias as _TypeAlias # Type alias for signatures strings in format ('func_name', '(arg, opt_arg=False)'). -Sig = Tuple[str, str] +Sig: _TypeAlias = Tuple[str, str] _TYPE_RE: Final = re.compile(r"^[a-zA-Z_][\w\[\], ]*(\.[a-zA-Z_][\w\[\], ]*)*$") diff --git a/mypy/stubtest.py b/mypy/stubtest.py index e24ad410d141..ec1b2e4fe78a 100644 --- a/mypy/stubtest.py +++ b/mypy/stubtest.py @@ -1179,7 +1179,7 @@ def verify_typealias( # ==================== -IGNORED_MODULE_DUNDERS = frozenset( +IGNORED_MODULE_DUNDERS: typing_extensions.Final = frozenset( { "__file__", "__doc__", @@ -1199,7 +1199,7 @@ def verify_typealias( } ) -IGNORABLE_CLASS_DUNDERS = frozenset( +IGNORABLE_CLASS_DUNDERS: typing_extensions.Final = frozenset( { # Special attributes "__dict__", diff --git a/mypy/test/data.py b/mypy/test/data.py index 09e3ab0c3dca..fedd3fda6339 100644 --- a/mypy/test/data.py +++ b/mypy/test/data.py @@ -11,7 +11,7 @@ import tempfile from abc import abstractmethod from typing import Any, Dict, Iterator, List, NamedTuple, Optional, Pattern, Set, Tuple, Union -from typing_extensions import Final +from typing_extensions import Final, TypeAlias as _TypeAlias import pytest @@ -38,7 +38,7 @@ class DeleteFile(NamedTuple): path: str -FileOperation = Union[UpdateFile, DeleteFile] +FileOperation: _TypeAlias = Union[UpdateFile, DeleteFile] def parse_test_case(case: "DataDrivenTestCase") -> None: