diff --git a/misc/analyze_cache.py b/misc/analyze_cache.py index 62a5112b0ccd..0a05493b77a3 100644 --- a/misc/analyze_cache.py +++ b/misc/analyze_cache.py @@ -7,12 +7,12 @@ import os.path from collections import Counter from collections.abc import Iterable -from typing import Any, Dict, Final +from typing import Any, Final from typing_extensions import TypeAlias as _TypeAlias ROOT: Final = ".mypy_cache/3.5" -JsonDict: _TypeAlias = Dict[str, Any] +JsonDict: _TypeAlias = dict[str, Any] class CacheData: diff --git a/misc/incremental_checker.py b/misc/incremental_checker.py index 4e42aef333bb..a9ed61d13414 100755 --- a/misc/incremental_checker.py +++ b/misc/incremental_checker.py @@ -44,7 +44,7 @@ import textwrap import time from argparse import ArgumentParser, Namespace, RawDescriptionHelpFormatter -from typing import Any, Dict, Final +from typing import Any, Final from typing_extensions import TypeAlias as _TypeAlias CACHE_PATH: Final = ".incremental_checker_cache.json" @@ -52,7 +52,7 @@ MYPY_TARGET_FILE: Final = "mypy" DAEMON_CMD: Final = ["python3", "-m", "mypy.dmypy"] -JsonDict: _TypeAlias = Dict[str, Any] +JsonDict: _TypeAlias = dict[str, Any] def print_offset(text: str, indent_length: int = 4) -> None: diff --git a/mypy/binder.py b/mypy/binder.py index 34447550e3bb..3d833153d628 100644 --- a/mypy/binder.py +++ b/mypy/binder.py @@ -3,7 +3,7 @@ from collections import defaultdict from collections.abc import Iterator from contextlib import contextmanager -from typing import DefaultDict, List, NamedTuple, Optional, Tuple, Union +from typing import NamedTuple, Optional, Union from typing_extensions import TypeAlias as _TypeAlias from mypy.erasetype import remove_instance_last_known_values @@ -59,7 +59,7 @@ def __repr__(self) -> str: return f"Frame({self.id}, {self.types}, {self.unreachable}, {self.conditional_frame})" -Assigns = DefaultDict[Expression, List[Tuple[Type, Optional[Type]]]] +Assigns = defaultdict[Expression, list[tuple[Type, Optional[Type]]]] class ConditionalTypeBinder: diff --git a/mypy/build.py b/mypy/build.py index 108ba320054c..884862dcf568 100644 --- a/mypy/build.py +++ b/mypy/build.py @@ -32,7 +32,6 @@ Any, Callable, ClassVar, - Dict, Final, NamedTuple, NoReturn, @@ -118,7 +117,7 @@ } -Graph: _TypeAlias = Dict[str, "State"] +Graph: _TypeAlias = dict[str, "State"] # TODO: Get rid of BuildResult. We might as well return a BuildManager. diff --git a/mypy/checker.py b/mypy/checker.py index 440b161618ee..6adf8fe26a0d 100644 --- a/mypy/checker.py +++ b/mypy/checker.py @@ -9,12 +9,10 @@ from typing import ( AbstractSet, Callable, - Dict, Final, Generic, NamedTuple, Optional, - Tuple, TypeVar, Union, cast, @@ -265,7 +263,7 @@ class FineGrainedDeferredNode(NamedTuple): # (such as two references to the same variable). TODO: it would # probably be better to have the dict keyed by the nodes' literal_hash # field instead. -TypeMap: _TypeAlias = Optional[Dict[Expression, Type]] +TypeMap: _TypeAlias = Optional[dict[Expression, Type]] # An object that represents either a precise type or a type with an upper bound; @@ -7813,7 +7811,7 @@ def conditional_types_to_typemaps( assert typ is not None maps.append({expr: typ}) - return cast(Tuple[TypeMap, TypeMap], tuple(maps)) + return cast(tuple[TypeMap, TypeMap], tuple(maps)) def gen_unique_name(base: str, table: SymbolTable) -> str: diff --git a/mypy/checkexpr.py b/mypy/checkexpr.py index 7000cfba25c1..2ba60744635f 100644 --- a/mypy/checkexpr.py +++ b/mypy/checkexpr.py @@ -8,7 +8,7 @@ from collections import defaultdict from collections.abc import Iterable, Iterator, Sequence from contextlib import contextmanager -from typing import Callable, ClassVar, Final, List, Optional, cast +from typing import Callable, ClassVar, Final, Optional, cast from typing_extensions import TypeAlias as _TypeAlias, assert_never, overload import mypy.checker @@ -1966,7 +1966,7 @@ def infer_arg_types_in_context( if not t: res[i] = self.accept(args[i]) assert all(tp is not None for tp in res) - return cast(List[Type], res) + return cast(list[Type], res) def infer_function_type_arguments_using_context( self, callable: CallableType, error_context: Context diff --git a/mypy/checkstrformat.py b/mypy/checkstrformat.py index 3d92897246fe..289961523b1d 100644 --- a/mypy/checkstrformat.py +++ b/mypy/checkstrformat.py @@ -14,7 +14,7 @@ import re from re import Match, Pattern -from typing import TYPE_CHECKING, Callable, Dict, Final, Tuple, Union, cast +from typing import TYPE_CHECKING, Callable, Final, Union, cast from typing_extensions import TypeAlias as _TypeAlias import mypy.errorcodes as codes @@ -70,8 +70,8 @@ from mypy.typeops import custom_special_method FormatStringExpr: _TypeAlias = Union[StrExpr, BytesExpr] -Checkers: _TypeAlias = Tuple[Callable[[Expression], None], Callable[[Type], bool]] -MatchMap: _TypeAlias = Dict[Tuple[int, int], Match[str]] # span -> match +Checkers: _TypeAlias = tuple[Callable[[Expression], None], Callable[[Type], bool]] +MatchMap: _TypeAlias = dict[tuple[int, int], Match[str]] # span -> match def compile_format_re() -> Pattern[str]: diff --git a/mypy/config_parser.py b/mypy/config_parser.py index e54afd4a07f3..a0f93f663522 100644 --- a/mypy/config_parser.py +++ b/mypy/config_parser.py @@ -16,14 +16,14 @@ import tomli as tomllib from collections.abc import Iterable, Mapping, MutableMapping, Sequence -from typing import Any, Callable, Dict, Final, List, TextIO, Tuple, Union +from typing import Any, Callable, Final, TextIO, Union from typing_extensions import TypeAlias as _TypeAlias from mypy import defaults from mypy.options import PER_MODULE_OPTIONS, Options _CONFIG_VALUE_TYPES: _TypeAlias = Union[ - str, bool, int, float, Dict[str, str], List[str], Tuple[int, int] + str, bool, int, float, dict[str, str], list[str], tuple[int, int] ] _INI_PARSER_CALLABLE: _TypeAlias = Callable[[Any], _CONFIG_VALUE_TYPES] diff --git a/mypy/constraints.py b/mypy/constraints.py index 410d33cae50c..848dec07cbcb 100644 --- a/mypy/constraints.py +++ b/mypy/constraints.py @@ -3,7 +3,7 @@ from __future__ import annotations from collections.abc import Iterable, Sequence -from typing import TYPE_CHECKING, Final, List +from typing import TYPE_CHECKING, Final import mypy.subtypes import mypy.typeops @@ -627,7 +627,7 @@ def visit_uninhabited_type(self, t: UninhabitedType) -> bool: return False -class ConstraintBuilderVisitor(TypeVisitor[List[Constraint]]): +class ConstraintBuilderVisitor(TypeVisitor[list[Constraint]]): """Visitor class for inferring type constraints.""" # The type that is compared against a template diff --git a/mypy/dmypy_server.py b/mypy/dmypy_server.py index 43b8c5eb05be..ee1590a25141 100644 --- a/mypy/dmypy_server.py +++ b/mypy/dmypy_server.py @@ -18,7 +18,7 @@ import traceback from collections.abc import Sequence from contextlib import redirect_stderr, redirect_stdout -from typing import AbstractSet, Any, Callable, Final, List, Tuple +from typing import AbstractSet, Any, Callable, Final from typing_extensions import TypeAlias as _TypeAlias import mypy.build @@ -162,9 +162,9 @@ def ignore_suppressed_imports(module: str) -> bool: return module.startswith("encodings.") -ModulePathPair: _TypeAlias = Tuple[str, str] -ModulePathPairs: _TypeAlias = List[ModulePathPair] -ChangesAndRemovals: _TypeAlias = 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 c7af95461af1..2dd5af96eeef 100644 --- a/mypy/errors.py +++ b/mypy/errors.py @@ -5,7 +5,7 @@ import traceback from collections import defaultdict from collections.abc import Iterable -from typing import Callable, Final, NoReturn, Optional, TextIO, Tuple, TypeVar +from typing import Callable, Final, NoReturn, Optional, TextIO, TypeVar from typing_extensions import Literal, TypeAlias as _TypeAlias from mypy import errorcodes as codes @@ -152,7 +152,7 @@ def __init__( # Type used internally to represent errors: # (path, line, column, end_line, end_column, severity, message, allow_dups, code) -ErrorTuple: _TypeAlias = Tuple[ +ErrorTuple: _TypeAlias = tuple[ Optional[str], int, int, int, int, str, str, bool, Optional[ErrorCode] ] @@ -1328,7 +1328,7 @@ def __init__( # (file_path, line, column) -_ErrorLocation = Tuple[str, int, int] +_ErrorLocation = tuple[str, int, int] def create_errors(error_tuples: list[ErrorTuple]) -> list[MypyError]: diff --git a/mypy/fastparse.py b/mypy/fastparse.py index 07e3dcd26ee0..2ffe033b1e08 100644 --- a/mypy/fastparse.py +++ b/mypy/fastparse.py @@ -4,7 +4,7 @@ import sys import warnings from collections.abc import Sequence -from typing import Any, Callable, Final, List, Optional, TypeVar, Union, cast +from typing import Any, Callable, Final, Optional, TypeVar, Union, cast from typing_extensions import Literal, overload from mypy import defaults, errorcodes as codes, message_registry @@ -425,7 +425,7 @@ def translate_opt_expr_list(self, l: Sequence[AST | None]) -> list[Expression | return res def translate_expr_list(self, l: Sequence[AST]) -> list[Expression]: - return cast(List[Expression], self.translate_opt_expr_list(l)) + return cast(list[Expression], self.translate_opt_expr_list(l)) def get_lineno(self, node: ast3.expr | ast3.stmt) -> int: if ( @@ -668,7 +668,7 @@ def fix_function_overloads(self, stmts: list[Statement]) -> list[Statement]: current_overload.append(last_if_overload) last_if_stmt, last_if_overload = None, None if isinstance(if_block_with_overload.body[-1], OverloadedFuncDef): - skipped_if_stmts.extend(cast(List[IfStmt], if_block_with_overload.body[:-1])) + skipped_if_stmts.extend(cast(list[IfStmt], if_block_with_overload.body[:-1])) current_overload.extend(if_block_with_overload.body[-1].items) else: current_overload.append( @@ -715,7 +715,7 @@ def fix_function_overloads(self, stmts: list[Statement]) -> list[Statement]: last_if_stmt_overload_name = None if if_block_with_overload is not None: skipped_if_stmts.extend( - cast(List[IfStmt], if_block_with_overload.body[:-1]) + cast(list[IfStmt], if_block_with_overload.body[:-1]) ) last_if_overload = cast( Union[Decorator, FuncDef, OverloadedFuncDef], @@ -939,7 +939,7 @@ def do_func_def( self.errors, line=lineno, override_column=n.col_offset ).translate_expr_list(func_type_ast.argtypes) # Use a cast to work around `list` invariance - arg_types = cast(List[Optional[Type]], translated_args) + arg_types = cast(list[Optional[Type]], translated_args) return_type = TypeConverter(self.errors, line=lineno).visit(func_type_ast.returns) # add implicit self type @@ -1051,7 +1051,7 @@ def transform_args( ) -> list[Argument]: new_args = [] names: list[ast3.arg] = [] - posonlyargs = getattr(args, "posonlyargs", cast(List[ast3.arg], [])) + posonlyargs = getattr(args, "posonlyargs", cast(list[ast3.arg], [])) args_args = posonlyargs + args.args args_defaults = args.defaults num_no_defaults = len(args_args) - len(args_defaults) @@ -1589,7 +1589,7 @@ def visit_Call(self, n: Call) -> CallExpr: self.visit(n.func), arg_types, arg_kinds, - cast("List[Optional[str]]", [None] * len(args)) + keyword_names, + cast("list[Optional[str]]", [None] * len(args)) + keyword_names, ) return self.set_line(e, n) diff --git a/mypy/literals.py b/mypy/literals.py index a4527a47f3a6..32b5ad7b9fde 100644 --- a/mypy/literals.py +++ b/mypy/literals.py @@ -1,7 +1,7 @@ from __future__ import annotations from collections.abc import Iterable -from typing import Any, Final, Optional, Tuple +from typing import Any, Final, Optional from typing_extensions import TypeAlias as _TypeAlias from mypy.nodes import ( @@ -129,7 +129,7 @@ def literal(e: Expression) -> int: return LITERAL_NO -Key: _TypeAlias = Tuple[Any, ...] +Key: _TypeAlias = tuple[Any, ...] def subkeys(key: Key) -> Iterable[Key]: diff --git a/mypy/memprofile.py b/mypy/memprofile.py index e47d0deb1ab3..4bab4ecb262e 100644 --- a/mypy/memprofile.py +++ b/mypy/memprofile.py @@ -10,7 +10,7 @@ import sys from collections import defaultdict from collections.abc import Iterable -from typing import Dict, cast +from typing import cast from mypy.nodes import FakeInfo, Node from mypy.types import Type @@ -109,7 +109,7 @@ def visit(o: object) -> None: # Processing these would cause a crash. continue if type(obj) in (dict, defaultdict): - for key, val in cast(Dict[object, object], obj).items(): + for key, val in cast(dict[object, object], obj).items(): visit(key) visit(val) if type(obj) in (list, tuple, set): diff --git a/mypy/messages.py b/mypy/messages.py index fe4552112f16..5fa4dc0c05ad 100644 --- a/mypy/messages.py +++ b/mypy/messages.py @@ -17,7 +17,7 @@ from collections.abc import Collection, Iterable, Iterator, Sequence from contextlib import contextmanager from textwrap import dedent -from typing import Any, Callable, Final, List, cast +from typing import Any, Callable, Final, cast import mypy.typeops from mypy import errorcodes as codes, message_registry @@ -955,7 +955,7 @@ def too_few_arguments( msg = "Missing positional arguments" callee_name = callable_name(callee) if callee_name is not None and diff and all(d is not None for d in diff): - args = '", "'.join(cast(List[str], diff)) + args = '", "'.join(cast(list[str], diff)) msg += f' "{args}" in call to {callee_name}' else: msg = "Too few arguments" + for_function(callee) diff --git a/mypy/modulefinder.py b/mypy/modulefinder.py index a5d28a30dea8..61dbb6c61d1f 100644 --- a/mypy/modulefinder.py +++ b/mypy/modulefinder.py @@ -13,7 +13,7 @@ import subprocess import sys from enum import Enum, unique -from typing import Dict, Final, List, Optional, Tuple, Union +from typing import Final, Optional, Union from typing_extensions import TypeAlias as _TypeAlias from mypy import pyinfo @@ -53,11 +53,11 @@ def asdict(self) -> dict[str, tuple[str, ...]]: # Package dirs are a two-tuple of path to search and whether to verify the module -OnePackageDir = Tuple[str, bool] -PackageDirs = List[OnePackageDir] +OnePackageDir = tuple[str, bool] +PackageDirs = list[OnePackageDir] # Minimum and maximum Python versions for modules in stdlib as (major, minor) -StdlibVersions: _TypeAlias = Dict[str, Tuple[Tuple[int, int], Optional[Tuple[int, int]]]] +StdlibVersions: _TypeAlias = dict[str, tuple[tuple[int, int], Optional[tuple[int, int]]]] PYTHON_EXTENSIONS: Final = [".pyi", ".py"] diff --git a/mypy/nodes.py b/mypy/nodes.py index e287fdb652d6..585012d5a865 100644 --- a/mypy/nodes.py +++ b/mypy/nodes.py @@ -7,19 +7,7 @@ from collections import defaultdict from collections.abc import Iterator, Sequence from enum import Enum, unique -from typing import ( - TYPE_CHECKING, - Any, - Callable, - Dict, - Final, - List, - Optional, - Tuple, - TypeVar, - Union, - cast, -) +from typing import TYPE_CHECKING, Any, Callable, Final, Optional, TypeVar, Union, cast from typing_extensions import TypeAlias as _TypeAlias, TypeGuard from mypy_extensions import trait @@ -80,7 +68,7 @@ def set_line( T = TypeVar("T") -JsonDict: _TypeAlias = Dict[str, Any] +JsonDict: _TypeAlias = dict[str, Any] # Symbol table node kinds @@ -264,7 +252,7 @@ def deserialize(cls, data: JsonDict) -> SymbolNode: # Items: fullname, related symbol table node, surrounding type (if any) -Definition: _TypeAlias = Tuple[str, "SymbolTableNode", Optional["TypeInfo"]] +Definition: _TypeAlias = tuple[str, "SymbolTableNode", Optional["TypeInfo"]] class MypyFile(SymbolNode): @@ -3743,7 +3731,7 @@ def deserialize(cls, data: JsonDict) -> TypeAlias: fullname, line, column, - alias_tvars=cast(List[mypy.types.TypeVarLikeType], alias_tvars), + alias_tvars=cast(list[mypy.types.TypeVarLikeType], alias_tvars), no_args=no_args, normalized=normalized, python_3_12_type_alias=python_3_12_type_alias, @@ -4008,7 +3996,7 @@ def deserialize(cls, data: JsonDict) -> SymbolTableNode: return stnode -class SymbolTable(Dict[str, SymbolTableNode]): +class SymbolTable(dict[str, SymbolTableNode]): """Static representation of a namespace dictionary. This is used for module, class and function namespaces. diff --git a/mypy/plugins/attrs.py b/mypy/plugins/attrs.py index 15d442db0e58..e7eed030ce1f 100644 --- a/mypy/plugins/attrs.py +++ b/mypy/plugins/attrs.py @@ -5,7 +5,7 @@ from collections import defaultdict from collections.abc import Iterable, Mapping from functools import reduce -from typing import Final, List, cast +from typing import Final, cast from typing_extensions import Literal import mypy.plugin # To avoid circular imports. @@ -807,7 +807,7 @@ def _parse_assignments( rvalues: list[Expression] = [] if isinstance(lvalue, (TupleExpr, ListExpr)): if all(isinstance(item, NameExpr) for item in lvalue.items): - lvalues = cast(List[NameExpr], lvalue.items) + lvalues = cast(list[NameExpr], lvalue.items) if isinstance(stmt.rvalue, (TupleExpr, ListExpr)): rvalues = stmt.rvalue.items elif isinstance(lvalue, NameExpr): @@ -1088,7 +1088,7 @@ def _get_expanded_attr_types( return None init_func = expand_type_by_instance(init_func, typ) # [1:] to skip the self argument of AttrClass.__init__ - field_names = cast(List[str], init_func.arg_names[1:]) + field_names = cast(list[str], init_func.arg_names[1:]) field_types = init_func.arg_types[1:] return [dict(zip(field_names, field_types))] else: diff --git a/mypy/reachability.py b/mypy/reachability.py index a25b9dff4581..e69a857553d5 100644 --- a/mypy/reachability.py +++ b/mypy/reachability.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Final, Tuple, TypeVar +from typing import Final, TypeVar from mypy.literals import literal from mypy.nodes import ( @@ -254,7 +254,7 @@ def consider_sys_platform(expr: Expression, platform: str) -> int: return TRUTH_VALUE_UNKNOWN -Targ = TypeVar("Targ", int, str, Tuple[int, ...]) +Targ = TypeVar("Targ", int, str, tuple[int, ...]) def fixed_comparison(left: Targ, op: str, right: Targ) -> int: diff --git a/mypy/report.py b/mypy/report.py index 1beb375299bd..39cd80ed38bf 100644 --- a/mypy/report.py +++ b/mypy/report.py @@ -13,7 +13,7 @@ from abc import ABCMeta, abstractmethod from collections.abc import Iterator from operator import attrgetter -from typing import Any, Callable, Dict, Final, Tuple +from typing import Any, Callable, Final from typing_extensions import TypeAlias as _TypeAlias from urllib.request import pathname2url @@ -44,8 +44,8 @@ ] ) -ReporterClasses: _TypeAlias = Dict[ - str, Tuple[Callable[["Reports", str], "AbstractReporter"], bool] +ReporterClasses: _TypeAlias = dict[ + str, tuple[Callable[["Reports", str], "AbstractReporter"], bool] ] reporter_classes: Final[ReporterClasses] = {} diff --git a/mypy/scope.py b/mypy/scope.py index c13c45573557..766048c41180 100644 --- a/mypy/scope.py +++ b/mypy/scope.py @@ -7,12 +7,12 @@ from collections.abc import Iterator from contextlib import contextmanager, nullcontext -from typing import Optional, Tuple +from typing import Optional from typing_extensions import TypeAlias as _TypeAlias from mypy.nodes import FuncBase, TypeInfo -SavedScope: _TypeAlias = Tuple[str, Optional[TypeInfo], Optional[FuncBase]] +SavedScope: _TypeAlias = tuple[str, Optional[TypeInfo], Optional[FuncBase]] class Scope: diff --git a/mypy/semanal.py b/mypy/semanal.py index 4e1769a29866..02e34dd00c63 100644 --- a/mypy/semanal.py +++ b/mypy/semanal.py @@ -52,7 +52,7 @@ from collections.abc import Collection, Iterable, Iterator from contextlib import contextmanager -from typing import Any, Callable, Final, List, TypeVar, cast +from typing import Any, Callable, Final, TypeVar, cast from typing_extensions import TypeAlias as _TypeAlias, TypeGuard from mypy import errorcodes as codes, message_registry @@ -5140,7 +5140,7 @@ def process_module_assignment( # with unpacking assignment like `x, y = a, b`. Mypy didn't # understand our all(isinstance(...)), so cast them as TupleExpr # so mypy knows it is safe to access their .items attribute. - seq_lvals = cast(List[TupleExpr], lvals) + seq_lvals = cast(list[TupleExpr], lvals) # given an assignment like: # (x, y) = (m, n) = (a, b) # we now have: diff --git a/mypy/semanal_main.py b/mypy/semanal_main.py index 09a1223be6aa..ded2a9412168 100644 --- a/mypy/semanal_main.py +++ b/mypy/semanal_main.py @@ -27,7 +27,7 @@ from __future__ import annotations from contextlib import nullcontext -from typing import TYPE_CHECKING, Callable, Final, List, Optional, Tuple, Union +from typing import TYPE_CHECKING, Callable, Final, Optional, Union from typing_extensions import TypeAlias as _TypeAlias import mypy.build @@ -59,7 +59,7 @@ from mypy.build import Graph, State -Patches: _TypeAlias = List[Tuple[int, Callable[[], None]]] +Patches: _TypeAlias = list[tuple[int, Callable[[], None]]] # If we perform this many iterations, raise an exception since we are likely stuck. @@ -304,7 +304,7 @@ def process_top_level_function( analyzer.saved_locals.clear() -TargetInfo: _TypeAlias = Tuple[ +TargetInfo: _TypeAlias = tuple[ str, Union[MypyFile, FuncDef, OverloadedFuncDef, Decorator], Optional[TypeInfo] ] diff --git a/mypy/semanal_namedtuple.py b/mypy/semanal_namedtuple.py index 52665b0fa121..a18d0591364c 100644 --- a/mypy/semanal_namedtuple.py +++ b/mypy/semanal_namedtuple.py @@ -8,7 +8,7 @@ import keyword from collections.abc import Container, Iterator, Mapping from contextlib import contextmanager -from typing import Final, List, cast +from typing import Final, cast from mypy.errorcodes import ARG_TYPE, ErrorCode from mypy.exprtotype import TypeTranslationError, expr_to_unanalyzed_type @@ -605,7 +605,7 @@ def add_method( items = [arg.variable.name for arg in args] arg_kinds = [arg.kind for arg in args] assert None not in types - signature = CallableType(cast(List[Type], types), arg_kinds, items, ret, function_type) + signature = CallableType(cast(list[Type], types), arg_kinds, items, ret, function_type) signature.variables = [self_type] func = FuncDef(funcname, args, Block([])) func.info = info diff --git a/mypy/server/astdiff.py b/mypy/server/astdiff.py index a2711f9e0a8f..f91687823841 100644 --- a/mypy/server/astdiff.py +++ b/mypy/server/astdiff.py @@ -53,7 +53,7 @@ class level -- these are handled at attribute level (say, 'mod.Cls.method' from __future__ import annotations from collections.abc import Sequence -from typing import Tuple, Union +from typing import Union from typing_extensions import TypeAlias as _TypeAlias from mypy.expandtype import expand_type @@ -115,10 +115,10 @@ class level -- these are handled at attribute level (say, 'mod.Cls.method' # Type snapshots are strict, they must be hashable and ordered (e.g. for Unions). Primitive: _TypeAlias = Union[str, float, int, bool] # float is for Literal[3.14] support. -SnapshotItem: _TypeAlias = Tuple[Union[Primitive, "SnapshotItem"], ...] +SnapshotItem: _TypeAlias = tuple[Union[Primitive, "SnapshotItem"], ...] # Symbol snapshots can be more lenient. -SymbolSnapshot: _TypeAlias = Tuple[object, ...] +SymbolSnapshot: _TypeAlias = tuple[object, ...] def compare_symbol_table_snapshots( diff --git a/mypy/server/aststrip.py b/mypy/server/aststrip.py index 410b3ecfa976..a70dfc30deb5 100644 --- a/mypy/server/aststrip.py +++ b/mypy/server/aststrip.py @@ -35,7 +35,6 @@ from collections.abc import Iterator from contextlib import contextmanager, nullcontext -from typing import Dict, Tuple from typing_extensions import TypeAlias as _TypeAlias from mypy.nodes import ( @@ -69,7 +68,7 @@ from mypy.types import CallableType from mypy.typestate import type_state -SavedAttributes: _TypeAlias = Dict[Tuple[ClassDef, str], SymbolTableNode] +SavedAttributes: _TypeAlias = dict[tuple[ClassDef, str], SymbolTableNode] def strip_target( diff --git a/mypy/server/deps.py b/mypy/server/deps.py index 6376600ffc0c..f4e7b86abf63 100644 --- a/mypy/server/deps.py +++ b/mypy/server/deps.py @@ -82,7 +82,6 @@ class 'mod.Cls'. This can also refer to an attribute inherited from a from __future__ import annotations from collections import defaultdict -from typing import List from mypy.nodes import ( GDEF, @@ -947,7 +946,7 @@ def get_type_triggers( return typ.accept(TypeTriggersVisitor(use_logical_deps, seen_aliases)) -class TypeTriggersVisitor(TypeVisitor[List[str]]): +class TypeTriggersVisitor(TypeVisitor[list[str]]): def __init__( self, use_logical_deps: bool, seen_aliases: set[TypeAliasType] | None = None ) -> None: diff --git a/mypy/stubdoc.py b/mypy/stubdoc.py index 79365bec33bd..e99204f3ade5 100644 --- a/mypy/stubdoc.py +++ b/mypy/stubdoc.py @@ -12,13 +12,13 @@ import re import tokenize from collections.abc import MutableMapping, MutableSequence, Sequence -from typing import Any, Final, NamedTuple, Tuple +from typing import Any, Final, NamedTuple from typing_extensions import TypeAlias as _TypeAlias import mypy.util # Type alias for signatures strings in format ('func_name', '(arg, opt_arg=False)'). -Sig: _TypeAlias = 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/subtypes.py b/mypy/subtypes.py index 7e3d34deda27..ceb9b7f0298a 100644 --- a/mypy/subtypes.py +++ b/mypy/subtypes.py @@ -2,7 +2,7 @@ from collections.abc import Iterator from contextlib import contextmanager -from typing import Any, Callable, Final, List, TypeVar, cast +from typing import Any, Callable, Final, TypeVar, cast from typing_extensions import TypeAlias as _TypeAlias import mypy.applytype @@ -1886,7 +1886,7 @@ def unify_generic_callable( ) if None in inferred_vars: return None - non_none_inferred_vars = cast(List[Type], inferred_vars) + non_none_inferred_vars = cast(list[Type], inferred_vars) had_errors = False def report(*args: Any) -> None: diff --git a/mypy/test/testsemanal.py b/mypy/test/testsemanal.py index cdecc4739168..a544e1f91829 100644 --- a/mypy/test/testsemanal.py +++ b/mypy/test/testsemanal.py @@ -3,7 +3,6 @@ from __future__ import annotations import sys -from typing import Dict from mypy import build from mypy.defaults import PYTHON3_VERSION @@ -199,7 +198,7 @@ def run_case(self, testcase: DataDrivenTestCase) -> None: ) -class TypeInfoMap(Dict[str, TypeInfo]): +class TypeInfoMap(dict[str, TypeInfo]): def __str__(self) -> str: a: list[str] = ["TypeInfoMap("] for x, y in sorted(self.items()): diff --git a/mypy/typeanal.py b/mypy/typeanal.py index b3df842f9d05..031ec0450db1 100644 --- a/mypy/typeanal.py +++ b/mypy/typeanal.py @@ -5,7 +5,7 @@ import itertools from collections.abc import Iterable, Iterator, Sequence from contextlib import contextmanager -from typing import Callable, Final, List, Tuple, TypeVar +from typing import Callable, Final, TypeVar from typing_extensions import Protocol from mypy import errorcodes as codes, message_registry, nodes @@ -1977,7 +1977,7 @@ def tuple_type(self, items: list[Type], line: int, column: int) -> TupleType: ) -TypeVarLikeList = List[Tuple[str, TypeVarLikeExpr]] +TypeVarLikeList = list[tuple[str, TypeVarLikeExpr]] class MsgCallback(Protocol): @@ -2432,7 +2432,7 @@ def collect_all_inner_types(t: Type) -> list[Type]: return t.accept(CollectAllInnerTypesQuery()) -class CollectAllInnerTypesQuery(TypeQuery[List[Type]]): +class CollectAllInnerTypesQuery(TypeQuery[list[Type]]): def __init__(self) -> None: super().__init__(self.combine_lists_strategy) diff --git a/mypy/typeops.py b/mypy/typeops.py index f29682f4ecd5..7c7e2b8bf8e5 100644 --- a/mypy/typeops.py +++ b/mypy/typeops.py @@ -9,7 +9,7 @@ import itertools from collections.abc import Iterable, Sequence -from typing import Any, List, TypeVar, cast +from typing import Any, TypeVar, cast from mypy.copytype import copy_type from mypy.expandtype import expand_type, expand_type_by_instance @@ -1051,7 +1051,7 @@ def get_all_type_vars(tp: Type) -> list[TypeVarLikeType]: return tp.accept(TypeVarExtractor(include_all=True)) -class TypeVarExtractor(TypeQuery[List[TypeVarLikeType]]): +class TypeVarExtractor(TypeQuery[list[TypeVarLikeType]]): def __init__(self, include_all: bool = False) -> None: super().__init__(self._merge) self.include_all = include_all diff --git a/mypy/types.py b/mypy/types.py index 119a104c299a..164e18be032e 100644 --- a/mypy/types.py +++ b/mypy/types.py @@ -5,18 +5,7 @@ import sys from abc import abstractmethod from collections.abc import Iterable, Sequence -from typing import ( - TYPE_CHECKING, - Any, - ClassVar, - Dict, - Final, - NamedTuple, - NewType, - TypeVar, - Union, - cast, -) +from typing import TYPE_CHECKING, Any, ClassVar, Final, NamedTuple, NewType, TypeVar, Union, cast from typing_extensions import Self, TypeAlias as _TypeAlias, TypeGuard, overload import mypy.nodes @@ -37,7 +26,7 @@ T = TypeVar("T") -JsonDict: _TypeAlias = Dict[str, Any] +JsonDict: _TypeAlias = dict[str, Any] # The set of all valid expressions that can currently be contained # inside of a Literal[...]. diff --git a/mypy/typestate.py b/mypy/typestate.py index 0082c5564705..574618668477 100644 --- a/mypy/typestate.py +++ b/mypy/typestate.py @@ -5,7 +5,7 @@ from __future__ import annotations -from typing import Dict, Final, Set, Tuple +from typing import Final from typing_extensions import TypeAlias as _TypeAlias from mypy.nodes import VARIANCE_NOT_READY, TypeInfo @@ -16,15 +16,15 @@ MAX_NEGATIVE_CACHE_ENTRIES: Final = 10000 # Represents that the 'left' instance is a subtype of the 'right' instance -SubtypeRelationship: _TypeAlias = Tuple[Instance, Instance] +SubtypeRelationship: _TypeAlias = tuple[Instance, Instance] # A tuple encoding the specific conditions under which we performed the subtype check. # (e.g. did we want a proper subtype? A regular subtype while ignoring variance?) -SubtypeKind: _TypeAlias = Tuple[bool, ...] +SubtypeKind: _TypeAlias = tuple[bool, ...] # A cache that keeps track of whether the given TypeInfo is a part of a particular # subtype relationship -SubtypeCache: _TypeAlias = Dict[TypeInfo, Dict[SubtypeKind, Set[SubtypeRelationship]]] +SubtypeCache: _TypeAlias = dict[TypeInfo, dict[SubtypeKind, set[SubtypeRelationship]]] class TypeState: diff --git a/mypyc/analysis/attrdefined.py b/mypyc/analysis/attrdefined.py index e4038bfaa238..896527bdcf14 100644 --- a/mypyc/analysis/attrdefined.py +++ b/mypyc/analysis/attrdefined.py @@ -63,7 +63,7 @@ def foo(self) -> int: from __future__ import annotations -from typing import Final, Set, Tuple +from typing import Final from mypyc.analysis.dataflow import ( CFG, @@ -279,7 +279,7 @@ def mark_attr_initialization_ops( op.mark_as_initializer() -GenAndKill = Tuple[Set[str], Set[str]] +GenAndKill = tuple[set[str], set[str]] def attributes_initialized_by_init_call(op: Call) -> set[str]: diff --git a/mypyc/analysis/dataflow.py b/mypyc/analysis/dataflow.py index 0ef78fd600ae..26b58e224634 100644 --- a/mypyc/analysis/dataflow.py +++ b/mypyc/analysis/dataflow.py @@ -4,7 +4,7 @@ from abc import abstractmethod from collections.abc import Iterable, Iterator -from typing import Dict, Generic, Set, Tuple, TypeVar +from typing import Generic, TypeVar from mypyc.ir.ops import ( Assign, @@ -155,7 +155,7 @@ def cleanup_cfg(blocks: list[BasicBlock]) -> None: T = TypeVar("T") -AnalysisDict = Dict[Tuple[BasicBlock, int], Set[T]] +AnalysisDict = dict[tuple[BasicBlock, int], set[T]] class AnalysisResult(Generic[T]): @@ -167,7 +167,7 @@ def __str__(self) -> str: return f"before: {self.before}\nafter: {self.after}\n" -GenAndKill = Tuple[Set[T], Set[T]] +GenAndKill = tuple[set[T], set[T]] class BaseAnalysisVisitor(OpVisitor[GenAndKill[T]]): diff --git a/mypyc/analysis/selfleaks.py b/mypyc/analysis/selfleaks.py index 5d89a9bfc7c6..4d3a7c87c5d1 100644 --- a/mypyc/analysis/selfleaks.py +++ b/mypyc/analysis/selfleaks.py @@ -1,7 +1,5 @@ from __future__ import annotations -from typing import Set, Tuple - from mypyc.analysis.dataflow import CFG, MAYBE_ANALYSIS, AnalysisResult, run_analysis from mypyc.ir.ops import ( Assign, @@ -47,7 +45,7 @@ ) from mypyc.ir.rtypes import RInstance -GenAndKill = Tuple[Set[None], Set[None]] +GenAndKill = tuple[set[None], set[None]] CLEAN: GenAndKill = (set(), set()) DIRTY: GenAndKill = ({None}, {None}) diff --git a/mypyc/build.py b/mypyc/build.py index 3880860f3613..d0709fceb97d 100644 --- a/mypyc/build.py +++ b/mypyc/build.py @@ -26,7 +26,7 @@ import sys import time from collections.abc import Iterable -from typing import TYPE_CHECKING, Any, Dict, NoReturn, Union, cast +from typing import TYPE_CHECKING, Any, NoReturn, Union, cast from mypy.build import BuildSource from mypy.errors import CompileError @@ -88,7 +88,7 @@ def setup_mypycify_vars() -> None: # There has to be a better approach to this. # The vars can contain ints but we only work with str ones - vars = cast(Dict[str, str], sysconfig.get_config_vars()) + vars = cast(dict[str, str], sysconfig.get_config_vars()) if sys.platform == "darwin": # Disable building 32-bit binaries, since we generate too much code # for a 32-bit Mach-O object. There has to be a better way to do this. diff --git a/mypyc/codegen/emitclass.py b/mypyc/codegen/emitclass.py index 9f290b9c99a8..54c979482f66 100644 --- a/mypyc/codegen/emitclass.py +++ b/mypyc/codegen/emitclass.py @@ -3,7 +3,7 @@ from __future__ import annotations from collections.abc import Mapping -from typing import Callable, Tuple +from typing import Callable from mypyc.codegen.emit import Emitter, HeaderDeclaration, ReturnHandler from mypyc.codegen.emitfunc import native_function_header @@ -40,7 +40,7 @@ def wrapper_slot(cl: ClassIR, fn: FuncIR, emitter: Emitter) -> str: # and return the function name to stick in the slot. # TODO: Add remaining dunder methods SlotGenerator = Callable[[ClassIR, FuncIR, Emitter], str] -SlotTable = Mapping[str, Tuple[str, SlotGenerator]] +SlotTable = Mapping[str, tuple[str, SlotGenerator]] SLOT_DEFS: SlotTable = { "__init__": ("tp_init", lambda c, t, e: generate_init_for_class(c, t, e)), diff --git a/mypyc/codegen/emitmodule.py b/mypyc/codegen/emitmodule.py index e64465aef0ff..bd2958c285c3 100644 --- a/mypyc/codegen/emitmodule.py +++ b/mypyc/codegen/emitmodule.py @@ -8,7 +8,7 @@ import json import os from collections.abc import Iterable -from typing import List, Optional, Tuple, TypeVar +from typing import Optional, TypeVar from mypy.build import ( BuildResult, @@ -84,11 +84,11 @@ # its modules along with the name of the group. (Which can be None # only if we are compiling only a single group with a single file in it # and not using shared libraries). -Group = Tuple[List[BuildSource], Optional[str]] -Groups = List[Group] +Group = tuple[list[BuildSource], Optional[str]] +Groups = list[Group] # A list of (file name, file contents) pairs. -FileContents = List[Tuple[str, str]] +FileContents = list[tuple[str, str]] class MarkedDeclaration: diff --git a/mypyc/codegen/literals.py b/mypyc/codegen/literals.py index 2c4ab0c1dc2e..4cd41e0f4d32 100644 --- a/mypyc/codegen/literals.py +++ b/mypyc/codegen/literals.py @@ -1,12 +1,12 @@ from __future__ import annotations -from typing import Final, FrozenSet, Tuple, Union +from typing import Final, Union from typing_extensions import TypeGuard # Supported Python literal types. All tuple / frozenset items must have supported # literal types as well, but we can't represent the type precisely. LiteralValue = Union[ - str, bytes, int, bool, float, complex, Tuple[object, ...], FrozenSet[object], None + str, bytes, int, bool, float, complex, tuple[object, ...], frozenset[object], None ] diff --git a/mypyc/common.py b/mypyc/common.py index 31567c689c34..724f61c34b78 100644 --- a/mypyc/common.py +++ b/mypyc/common.py @@ -2,7 +2,7 @@ import sys import sysconfig -from typing import Any, Dict, Final +from typing import Any, Final from mypy.util import unnamed_function @@ -83,7 +83,7 @@ ] -JsonDict = Dict[str, Any] +JsonDict = dict[str, Any] def shared_lib_name(group_name: str) -> str: diff --git a/mypyc/ir/class_ir.py b/mypyc/ir/class_ir.py index 94bf714b28d4..94181e115145 100644 --- a/mypyc/ir/class_ir.py +++ b/mypyc/ir/class_ir.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import List, NamedTuple +from typing import NamedTuple from mypyc.common import PROPSET_PREFIX, JsonDict from mypyc.ir.func_ir import FuncDecl, FuncIR, FuncSignature @@ -76,7 +76,7 @@ class VTableMethod(NamedTuple): shadow_method: FuncIR | None -VTableEntries = List[VTableMethod] +VTableEntries = list[VTableMethod] class ClassIR: diff --git a/mypyc/ir/module_ir.py b/mypyc/ir/module_ir.py index e3b240629eda..7d95b48e197e 100644 --- a/mypyc/ir/module_ir.py +++ b/mypyc/ir/module_ir.py @@ -2,8 +2,6 @@ from __future__ import annotations -from typing import Dict - from mypyc.common import JsonDict from mypyc.ir.class_ir import ClassIR from mypyc.ir.func_ir import FuncDecl, FuncIR @@ -91,4 +89,4 @@ def deserialize_modules(data: dict[str, JsonDict], ctx: DeserMaps) -> dict[str, # ModulesIRs should also always be an *OrderedDict*, but if we # declared it that way we would need to put it in quotes everywhere... -ModuleIRs = Dict[str, ModuleIR] +ModuleIRs = dict[str, ModuleIR] diff --git a/mypyc/ir/ops.py b/mypyc/ir/ops.py index 9ee745380872..6a2e70aee6d7 100644 --- a/mypyc/ir/ops.py +++ b/mypyc/ir/ops.py @@ -13,7 +13,7 @@ from abc import abstractmethod from collections.abc import Sequence -from typing import TYPE_CHECKING, Final, Generic, List, NamedTuple, TypeVar, Union +from typing import TYPE_CHECKING, Final, Generic, NamedTuple, TypeVar, Union from mypy_extensions import trait @@ -1025,7 +1025,7 @@ def accept(self, visitor: OpVisitor[T]) -> T: # True steals all arguments, False steals none, a list steals those in matching positions -StealsDescription = Union[bool, List[bool]] +StealsDescription = Union[bool, list[bool]] class CallC(RegisterOp): diff --git a/mypyc/irbuild/ll_builder.py b/mypyc/irbuild/ll_builder.py index cc6c501aa21c..bae38f27b346 100644 --- a/mypyc/irbuild/ll_builder.py +++ b/mypyc/irbuild/ll_builder.py @@ -7,7 +7,7 @@ from __future__ import annotations from collections.abc import Sequence -from typing import Callable, Final, Optional, Tuple +from typing import Callable, Final, Optional from mypy.argmap import map_actuals_to_formals from mypy.nodes import ARG_POS, ARG_STAR, ARG_STAR2, ArgKind @@ -181,7 +181,7 @@ from mypyc.sametype import is_same_type from mypyc.subtype import is_subtype -DictEntry = Tuple[Optional[Value], Value] +DictEntry = tuple[Optional[Value], Value] # If the number of items is less than the threshold when initializing # a list, we would inline the generate IR using SetMem and expanded diff --git a/mypyc/irbuild/match.py b/mypyc/irbuild/match.py index 82250955f6e6..beb88311fe4d 100644 --- a/mypyc/irbuild/match.py +++ b/mypyc/irbuild/match.py @@ -1,6 +1,6 @@ from collections.abc import Generator from contextlib import contextmanager -from typing import List, Optional, Tuple +from typing import Optional from mypy.nodes import MatchStmt, NameExpr, TypeInfo from mypy.patterns import ( @@ -158,7 +158,7 @@ def visit_class_pattern(self, pattern: ClassPattern) -> None: match_args_type = get_proper_type(ty.type) assert isinstance(match_args_type, TupleType) - match_args: List[str] = [] + match_args: list[str] = [] for item in match_args_type.items: proper_item = get_proper_type(item) @@ -221,7 +221,7 @@ def visit_mapping_pattern(self, pattern: MappingPattern) -> None: self.builder.add_bool_branch(is_dict, self.code_block, self.next_block) - keys: List[Value] = [] + keys: list[Value] = [] for key, value in zip(pattern.keys, pattern.values): self.builder.activate_block(self.code_block) @@ -340,10 +340,10 @@ def enter_subpattern(self, subject: Value) -> Generator[None, None, None]: def prep_sequence_pattern( seq_pattern: SequencePattern, -) -> Tuple[Optional[int], Optional[NameExpr], List[Pattern]]: +) -> tuple[Optional[int], Optional[NameExpr], list[Pattern]]: star_index: Optional[int] = None capture: Optional[NameExpr] = None - patterns: List[Pattern] = [] + patterns: list[Pattern] = [] for i, pattern in enumerate(seq_pattern.patterns): if isinstance(pattern, StarredPattern): diff --git a/mypyc/irbuild/prepare.py b/mypyc/irbuild/prepare.py index 89c4e883ec29..b6cd632e475f 100644 --- a/mypyc/irbuild/prepare.py +++ b/mypyc/irbuild/prepare.py @@ -15,7 +15,7 @@ from collections import defaultdict from collections.abc import Iterable -from typing import NamedTuple, Tuple +from typing import NamedTuple from mypy.build import Graph from mypy.nodes import ( @@ -525,7 +525,7 @@ def prepare_non_ext_class_def( ) -RegisterImplInfo = Tuple[TypeInfo, FuncDef] +RegisterImplInfo = tuple[TypeInfo, FuncDef] class SingledispatchInfo(NamedTuple): diff --git a/mypyc/lower/registry.py b/mypyc/lower/registry.py index 084d57df4608..3feedfc385ee 100644 --- a/mypyc/lower/registry.py +++ b/mypyc/lower/registry.py @@ -1,11 +1,11 @@ from __future__ import annotations -from typing import Callable, Final, List +from typing import Callable, Final from mypyc.ir.ops import Value from mypyc.irbuild.ll_builder import LowLevelIRBuilder -LowerFunc = Callable[[LowLevelIRBuilder, List[Value], int], Value] +LowerFunc = Callable[[LowLevelIRBuilder, list[Value], int], Value] lowering_registry: Final[dict[str, LowerFunc]] = {} diff --git a/mypyc/transform/refcount.py b/mypyc/transform/refcount.py index 50d3f11ffe2a..b2ca03d44630 100644 --- a/mypyc/transform/refcount.py +++ b/mypyc/transform/refcount.py @@ -19,7 +19,6 @@ from __future__ import annotations from collections.abc import Iterable -from typing import Dict, Tuple from mypyc.analysis.dataflow import ( AnalysisDict, @@ -47,13 +46,13 @@ Value, ) -Decs = Tuple[Tuple[Value, bool], ...] -Incs = Tuple[Value, ...] +Decs = tuple[tuple[Value, bool], ...] +Incs = tuple[Value, ...] # A cache of basic blocks that decrement and increment specific values # and then jump to some target block. This lets us cut down on how # much code we generate in some circumstances. -BlockCache = Dict[Tuple[BasicBlock, Decs, Incs], BasicBlock] +BlockCache = dict[tuple[BasicBlock, Decs, Incs], BasicBlock] def insert_ref_count_opcodes(ir: FuncIR) -> None: