From 37f0fc521977bf85e138ffcb981f607a9064e3ef Mon Sep 17 00:00:00 2001 From: Nick Drozd Date: Wed, 25 Sep 2024 10:10:44 -0400 Subject: [PATCH 1/2] Move typing imports and some definitions behind guard --- astroid/arguments.py | 6 +- astroid/bases.py | 16 ++-- astroid/brain/brain_argparse.py | 6 +- astroid/brain/brain_attrs.py | 9 +- astroid/brain/brain_boto3.py | 13 ++- astroid/brain/brain_builtin_inference.py | 19 ++-- astroid/brain/brain_collections.py | 8 +- astroid/brain/brain_crypt.py | 10 ++- astroid/brain/brain_ctypes.py | 9 +- astroid/brain/brain_curses.py | 10 ++- astroid/brain/brain_dataclasses.py | 24 +++-- astroid/brain/brain_datetime.py | 8 +- astroid/brain/brain_dateutil.py | 7 +- astroid/brain/brain_functools.py | 16 ++-- astroid/brain/brain_hashlib.py | 10 ++- astroid/brain/brain_http.py | 7 +- astroid/brain/brain_hypothesis.py | 9 +- astroid/brain/brain_multiprocessing.py | 8 +- astroid/brain/brain_namedtuple_enum.py | 14 ++- astroid/brain/brain_nose.py | 8 +- astroid/brain/brain_numpy_core_einsumfunc.py | 10 ++- astroid/brain/brain_numpy_core_fromnumeric.py | 10 ++- .../brain/brain_numpy_core_function_base.py | 8 +- astroid/brain/brain_numpy_core_multiarray.py | 9 +- astroid/brain/brain_numpy_core_numeric.py | 9 +- .../brain/brain_numpy_core_numerictypes.py | 10 ++- astroid/brain/brain_numpy_core_umath.py | 10 ++- astroid/brain/brain_numpy_ma.py | 10 ++- astroid/brain/brain_numpy_ndarray.py | 8 +- astroid/brain/brain_numpy_random_mtrand.py | 10 ++- astroid/brain/brain_numpy_utils.py | 10 ++- astroid/brain/brain_pathlib.py | 12 ++- astroid/brain/brain_pkg_resources.py | 10 ++- astroid/brain/brain_pytest.py | 8 +- astroid/brain/brain_random.py | 8 +- astroid/brain/brain_re.py | 9 +- astroid/brain/brain_regex.py | 9 +- astroid/brain/brain_responses.py | 10 ++- astroid/brain/brain_scipy_signal.py | 10 ++- astroid/brain/brain_signal.py | 7 +- astroid/brain/brain_sqlalchemy.py | 10 ++- astroid/brain/brain_ssl.py | 10 ++- astroid/brain/brain_subprocess.py | 10 ++- astroid/brain/brain_threading.py | 10 ++- astroid/brain/brain_type.py | 8 +- astroid/brain/brain_typing.py | 12 ++- astroid/brain/brain_unittest.py | 10 ++- astroid/brain/brain_uuid.py | 9 +- astroid/brain/helpers.py | 8 +- astroid/builder.py | 16 ++-- astroid/constraint.py | 22 ++--- astroid/context.py | 17 ++-- astroid/decorators.py | 9 +- astroid/exceptions.py | 9 +- astroid/filter_statements.py | 2 +- astroid/helpers.py | 8 +- astroid/inference_tip.py | 25 +++--- astroid/interpreter/_import/spec.py | 12 +-- astroid/interpreter/_import/util.py | 5 +- astroid/interpreter/objectmodel.py | 8 +- astroid/manager.py | 16 ++-- astroid/modutils.py | 8 +- astroid/nodes/_base_nodes.py | 6 +- astroid/nodes/as_string.py | 3 +- astroid/nodes/node_classes.py | 87 +++++++++---------- astroid/nodes/node_ng.py | 25 +++--- astroid/nodes/scoped_nodes/mixin.py | 8 +- astroid/nodes/scoped_nodes/scoped_nodes.py | 28 +++--- astroid/objects.py | 14 +-- astroid/protocols.py | 18 ++-- astroid/raw_building.py | 25 +++--- astroid/rebuilder.py | 44 ++++++---- astroid/test_utils.py | 5 +- astroid/transforms.py | 30 ++++--- astroid/typing.py | 2 +- astroid/util.py | 4 +- 76 files changed, 642 insertions(+), 305 deletions(-) diff --git a/astroid/arguments.py b/astroid/arguments.py index 29336cf8f1..fc4d514e1d 100644 --- a/astroid/arguments.py +++ b/astroid/arguments.py @@ -4,13 +4,17 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from astroid import nodes from astroid.bases import Instance from astroid.context import CallContext, InferenceContext from astroid.exceptions import InferenceError, NoDefault -from astroid.typing import InferenceResult from astroid.util import Uninferable, UninferableBase, safe_infer +if TYPE_CHECKING: + from astroid.typing import InferenceResult + class CallSite: """Class for understanding arguments passed into a call site. diff --git a/astroid/bases.py b/astroid/bases.py index 4a0d152656..c800abc46c 100644 --- a/astroid/bases.py +++ b/astroid/bases.py @@ -9,8 +9,7 @@ import collections import collections.abc -from collections.abc import Iterable, Iterator -from typing import TYPE_CHECKING, Any, Literal +from typing import TYPE_CHECKING from astroid import decorators, nodes from astroid.const import PY310_PLUS @@ -27,15 +26,18 @@ NameInferenceError, ) from astroid.interpreter import objectmodel -from astroid.typing import ( - InferenceErrorInfo, - InferenceResult, - SuccessfulInferenceResult, -) from astroid.util import Uninferable, UninferableBase, safe_infer if TYPE_CHECKING: + from typing import Any, Literal + from collections.abc import Iterable, Iterator + from astroid.constraint import Constraint + from astroid.typing import ( + InferenceErrorInfo, + InferenceResult, + SuccessfulInferenceResult, + ) PROPERTIES = {"builtins.property", "abc.abstractproperty"} diff --git a/astroid/brain/brain_argparse.py b/astroid/brain/brain_argparse.py index 2e6b742c38..5ccf3f4e94 100644 --- a/astroid/brain/brain_argparse.py +++ b/astroid/brain/brain_argparse.py @@ -4,12 +4,16 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from astroid import arguments, nodes -from astroid.context import InferenceContext from astroid.exceptions import UseInferenceDefault from astroid.inference_tip import inference_tip from astroid.manager import AstroidManager +if TYPE_CHECKING: + from astroid.context import InferenceContext + def infer_namespace(node, context: InferenceContext | None = None): callsite = arguments.CallSite.from_call(node, context=context) diff --git a/astroid/brain/brain_attrs.py b/astroid/brain/brain_attrs.py index 23ec9f66a4..b0ea6d54c1 100644 --- a/astroid/brain/brain_attrs.py +++ b/astroid/brain/brain_attrs.py @@ -8,11 +8,18 @@ Without this hook pylint reports unsupported-assignment-operation for attrs classes """ -from astroid.manager import AstroidManager + +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.nodes.node_classes import AnnAssign, Assign, AssignName, Call, Unknown from astroid.nodes.scoped_nodes import ClassDef from astroid.util import safe_infer +if TYPE_CHECKING: + from astroid.manager import AstroidManager + ATTRIB_NAMES = frozenset( ( "attr.Factory", diff --git a/astroid/brain/brain_boto3.py b/astroid/brain/brain_boto3.py index 3a95feb816..ba8d46683f 100644 --- a/astroid/brain/brain_boto3.py +++ b/astroid/brain/brain_boto3.py @@ -4,10 +4,17 @@ """Astroid hooks for understanding ``boto3.ServiceRequest()``.""" +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.builder import extract_node -from astroid.manager import AstroidManager from astroid.nodes.scoped_nodes import ClassDef +if TYPE_CHECKING: + from astroid.manager import AstroidManager + + BOTO_SERVICE_FACTORY_QUALIFIED_NAME = "boto3.resources.base.ServiceResource" @@ -28,5 +35,7 @@ def _looks_like_boto3_service_request(node: ClassDef) -> bool: def register(manager: AstroidManager) -> None: manager.register_transform( - ClassDef, service_request_transform, _looks_like_boto3_service_request + ClassDef, + service_request_transform, + _looks_like_boto3_service_request, ) diff --git a/astroid/brain/brain_builtin_inference.py b/astroid/brain/brain_builtin_inference.py index c60510d0b9..f6363fbfa1 100644 --- a/astroid/brain/brain_builtin_inference.py +++ b/astroid/brain/brain_builtin_inference.py @@ -7,13 +7,12 @@ from __future__ import annotations import itertools -from collections.abc import Callable, Iterable, Iterator +from collections.abc import Iterator from functools import partial -from typing import TYPE_CHECKING, Any, NoReturn, Union, cast +from typing import TYPE_CHECKING, Union, cast from astroid import arguments, helpers, nodes, objects, util from astroid.builder import AstroidBuilder -from astroid.context import InferenceContext from astroid.exceptions import ( AstroidTypeError, AttributeInferenceError, @@ -25,14 +24,18 @@ from astroid.manager import AstroidManager from astroid.nodes import scoped_nodes from astroid.raw_building import build_module -from astroid.typing import ( - ConstFactoryResult, - InferenceResult, - SuccessfulInferenceResult, -) if TYPE_CHECKING: + from typing import Any, NoReturn + from collections.abc import Callable, Iterable + from astroid.bases import Instance + from astroid.context import InferenceContext + from astroid.typing import ( + ConstFactoryResult, + InferenceResult, + SuccessfulInferenceResult, + ) ContainerObjects = Union[ objects.FrozenSet, diff --git a/astroid/brain/brain_collections.py b/astroid/brain/brain_collections.py index 22017786ac..9a0ce6bcf9 100644 --- a/astroid/brain/brain_collections.py +++ b/astroid/brain/brain_collections.py @@ -4,13 +4,17 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import extract_node, parse -from astroid.context import InferenceContext from astroid.exceptions import AttributeInferenceError -from astroid.manager import AstroidManager from astroid.nodes.scoped_nodes import ClassDef +if TYPE_CHECKING: + from astroid.manager import AstroidManager + from astroid.context import InferenceContext + def _collections_transform(): return parse( diff --git a/astroid/brain/brain_crypt.py b/astroid/brain/brain_crypt.py index 71f9dfcb34..d304bf23d5 100644 --- a/astroid/brain/brain_crypt.py +++ b/astroid/brain/brain_crypt.py @@ -2,10 +2,16 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def _re_transform() -> nodes.Module: diff --git a/astroid/brain/brain_ctypes.py b/astroid/brain/brain_ctypes.py index 8ae10bc952..fd879aa384 100644 --- a/astroid/brain/brain_ctypes.py +++ b/astroid/brain/brain_ctypes.py @@ -10,12 +10,17 @@ Thus astroid doesn't know that the value member is a builtin type among float, int, bytes or str. """ +from __future__ import annotations + import sys +from typing import TYPE_CHECKING -from astroid import nodes from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def enrich_ctypes_redefined_types() -> nodes.Module: diff --git a/astroid/brain/brain_curses.py b/astroid/brain/brain_curses.py index 5824fd7f35..6055fd8b11 100644 --- a/astroid/brain/brain_curses.py +++ b/astroid/brain/brain_curses.py @@ -2,10 +2,16 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def _curses_transform() -> nodes.Module: diff --git a/astroid/brain/brain_dataclasses.py b/astroid/brain/brain_dataclasses.py index 845295bf9b..2e29ddefbb 100644 --- a/astroid/brain/brain_dataclasses.py +++ b/astroid/brain/brain_dataclasses.py @@ -14,23 +14,29 @@ from __future__ import annotations -from collections.abc import Iterator -from typing import Literal, Union +from typing import TYPE_CHECKING -from astroid import bases, context, nodes +from astroid import bases, nodes from astroid.builder import parse from astroid.const import PY310_PLUS, PY313_PLUS from astroid.exceptions import AstroidSyntaxError, InferenceError, UseInferenceDefault from astroid.inference_tip import inference_tip from astroid.manager import AstroidManager -from astroid.typing import InferenceResult from astroid.util import Uninferable, UninferableBase, safe_infer -_FieldDefaultReturn = Union[ - None, - tuple[Literal["default"], nodes.NodeNG], - tuple[Literal["default_factory"], nodes.Call], -] +if TYPE_CHECKING: + from typing import Literal, Union + from collections.abc import Iterator + + from astroid import context + from astroid.typing import InferenceResult + + _FieldDefaultReturn = Union[ + None, + tuple[Literal["default"], nodes.NodeNG], + tuple[Literal["default_factory"], nodes.Call], + ] + DATACLASSES_DECORATORS = frozenset(("dataclass",)) FIELD_NAME = "field" diff --git a/astroid/brain/brain_datetime.py b/astroid/brain/brain_datetime.py index f4cb6670bd..2a657da779 100644 --- a/astroid/brain/brain_datetime.py +++ b/astroid/brain/brain_datetime.py @@ -2,12 +2,18 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import AstroidBuilder from astroid.const import PY312_PLUS from astroid.manager import AstroidManager +if TYPE_CHECKING: + from astroid import nodes + def datetime_transform() -> nodes.Module: """The datetime module was C-accelerated in Python 3.12, so use the diff --git a/astroid/brain/brain_dateutil.py b/astroid/brain/brain_dateutil.py index c27343f961..a809ae55d4 100644 --- a/astroid/brain/brain_dateutil.py +++ b/astroid/brain/brain_dateutil.py @@ -4,13 +4,18 @@ """Astroid hooks for dateutil.""" +from __future__ import annotations + import textwrap +from typing import TYPE_CHECKING -from astroid import nodes from astroid.brain.helpers import register_module_extender from astroid.builder import AstroidBuilder from astroid.manager import AstroidManager +if TYPE_CHECKING: + from astroid import nodes + def dateutil_transform() -> nodes.Module: return AstroidBuilder(AstroidManager()).string_build( diff --git a/astroid/brain/brain_functools.py b/astroid/brain/brain_functools.py index c11b856ecc..bf829d4193 100644 --- a/astroid/brain/brain_functools.py +++ b/astroid/brain/brain_functools.py @@ -6,22 +6,28 @@ from __future__ import annotations -from collections.abc import Iterator from functools import partial from itertools import chain +from typing import TYPE_CHECKING -from astroid import BoundMethod, arguments, nodes, objects +from astroid import BoundMethod, arguments, objects from astroid.builder import extract_node -from astroid.context import InferenceContext from astroid.exceptions import InferenceError, UseInferenceDefault from astroid.inference_tip import inference_tip from astroid.interpreter import objectmodel -from astroid.manager import AstroidManager from astroid.nodes.node_classes import AssignName, Attribute, Call, Name from astroid.nodes.scoped_nodes import FunctionDef -from astroid.typing import InferenceResult, SuccessfulInferenceResult from astroid.util import UninferableBase, safe_infer +if TYPE_CHECKING: + from collections.abc import Iterator + + from astroid import nodes + from astroid.manager import AstroidManager + from astroid.context import InferenceContext + from astroid.typing import InferenceResult, SuccessfulInferenceResult + + LRU_CACHE = "functools.lru_cache" diff --git a/astroid/brain/brain_hashlib.py b/astroid/brain/brain_hashlib.py index a17645a8dd..0d582df204 100644 --- a/astroid/brain/brain_hashlib.py +++ b/astroid/brain/brain_hashlib.py @@ -2,10 +2,16 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def _hashlib_transform() -> nodes.Module: diff --git a/astroid/brain/brain_http.py b/astroid/brain/brain_http.py index 3a8a8588af..b6f005b144 100644 --- a/astroid/brain/brain_http.py +++ b/astroid/brain/brain_http.py @@ -3,13 +3,18 @@ # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt """Astroid brain hints for some of the `http` module.""" +from __future__ import annotations + import textwrap +from typing import TYPE_CHECKING -from astroid import nodes from astroid.brain.helpers import register_module_extender from astroid.builder import AstroidBuilder from astroid.manager import AstroidManager +if TYPE_CHECKING: + from astroid import nodes + def _http_transform() -> nodes.Module: code = textwrap.dedent( diff --git a/astroid/brain/brain_hypothesis.py b/astroid/brain/brain_hypothesis.py index ba20f0683c..da36af373e 100644 --- a/astroid/brain/brain_hypothesis.py +++ b/astroid/brain/brain_hypothesis.py @@ -16,9 +16,16 @@ def a_strategy(draw): a_strategy() """ -from astroid.manager import AstroidManager +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.nodes.scoped_nodes import FunctionDef +if TYPE_CHECKING: + from astroid.manager import AstroidManager + + COMPOSITE_NAMES = ( "composite", "st.composite", diff --git a/astroid/brain/brain_multiprocessing.py b/astroid/brain/brain_multiprocessing.py index e6413b07c1..16ef57b3ba 100644 --- a/astroid/brain/brain_multiprocessing.py +++ b/astroid/brain/brain_multiprocessing.py @@ -2,13 +2,19 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.bases import BoundMethod from astroid.brain.helpers import register_module_extender from astroid.builder import parse from astroid.exceptions import InferenceError -from astroid.manager import AstroidManager from astroid.nodes.scoped_nodes import FunctionDef +if TYPE_CHECKING: + from astroid.manager import AstroidManager + def _multiprocessing_transform(): module = parse( diff --git a/astroid/brain/brain_namedtuple_enum.py b/astroid/brain/brain_namedtuple_enum.py index 72a07c1187..3e1e8bd355 100644 --- a/astroid/brain/brain_namedtuple_enum.py +++ b/astroid/brain/brain_namedtuple_enum.py @@ -8,12 +8,10 @@ import functools import keyword -from collections.abc import Iterator from textwrap import dedent -from typing import Final +from typing import TYPE_CHECKING -import astroid -from astroid import arguments, bases, nodes, util +from astroid import arguments, nodes, util from astroid.builder import AstroidBuilder, _extract_single_node, extract_node from astroid.context import InferenceContext from astroid.exceptions import ( @@ -25,6 +23,14 @@ from astroid.inference_tip import inference_tip from astroid.manager import AstroidManager +if TYPE_CHECKING: + from typing import Final + from collections.abc import Iterator + + import astroid + from astroid import bases + + ENUM_QNAME: Final[str] = "enum.Enum" TYPING_NAMEDTUPLE_QUALIFIED: Final = { "typing.NamedTuple", diff --git a/astroid/brain/brain_nose.py b/astroid/brain/brain_nose.py index 742418f2d5..8ae691baca 100644 --- a/astroid/brain/brain_nose.py +++ b/astroid/brain/brain_nose.py @@ -4,16 +4,22 @@ """Hooks for nose library.""" +from __future__ import annotations + import re import textwrap +from typing import TYPE_CHECKING from astroid.bases import BoundMethod from astroid.brain.helpers import register_module_extender from astroid.builder import AstroidBuilder from astroid.exceptions import InferenceError -from astroid.manager import AstroidManager from astroid.nodes import List, Module +if TYPE_CHECKING: + from astroid.manager import AstroidManager + + CAPITALS = re.compile("([A-Z])") diff --git a/astroid/brain/brain_numpy_core_einsumfunc.py b/astroid/brain/brain_numpy_core_einsumfunc.py index b72369cb81..4b869ffc94 100644 --- a/astroid/brain/brain_numpy_core_einsumfunc.py +++ b/astroid/brain/brain_numpy_core_einsumfunc.py @@ -7,10 +7,16 @@ https://github.com/numpy/numpy/blob/main/numpy/core/einsumfunc.py. """ -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def numpy_core_einsumfunc_transform() -> nodes.Module: diff --git a/astroid/brain/brain_numpy_core_fromnumeric.py b/astroid/brain/brain_numpy_core_fromnumeric.py index ce4173c110..3936b5e6b0 100644 --- a/astroid/brain/brain_numpy_core_fromnumeric.py +++ b/astroid/brain/brain_numpy_core_fromnumeric.py @@ -3,10 +3,16 @@ # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt """Astroid hooks for numpy.core.fromnumeric module.""" -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def numpy_core_fromnumeric_transform() -> nodes.Module: diff --git a/astroid/brain/brain_numpy_core_function_base.py b/astroid/brain/brain_numpy_core_function_base.py index 17e1ad11d2..9248b40e49 100644 --- a/astroid/brain/brain_numpy_core_function_base.py +++ b/astroid/brain/brain_numpy_core_function_base.py @@ -4,16 +4,22 @@ """Astroid hooks for numpy.core.function_base module.""" +from __future__ import annotations + import functools +from typing import TYPE_CHECKING from astroid.brain.brain_numpy_utils import ( attribute_looks_like_numpy_member, infer_numpy_member, ) from astroid.inference_tip import inference_tip -from astroid.manager import AstroidManager from astroid.nodes.node_classes import Attribute +if TYPE_CHECKING: + from astroid.manager import AstroidManager + + METHODS_TO_BE_INFERRED = { "linspace": """def linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0): return numpy.ndarray([0, 0])""", diff --git a/astroid/brain/brain_numpy_core_multiarray.py b/astroid/brain/brain_numpy_core_multiarray.py index 16cdd6f918..7683f37046 100644 --- a/astroid/brain/brain_numpy_core_multiarray.py +++ b/astroid/brain/brain_numpy_core_multiarray.py @@ -4,9 +4,11 @@ """Astroid hooks for numpy.core.multiarray module.""" +from __future__ import annotations + import functools +from typing import TYPE_CHECKING -from astroid import nodes from astroid.brain.brain_numpy_utils import ( attribute_looks_like_numpy_member, infer_numpy_member, @@ -15,9 +17,12 @@ from astroid.brain.helpers import register_module_extender from astroid.builder import parse from astroid.inference_tip import inference_tip -from astroid.manager import AstroidManager from astroid.nodes.node_classes import Attribute, Name +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager + def numpy_core_multiarray_transform() -> nodes.Module: return parse( diff --git a/astroid/brain/brain_numpy_core_numeric.py b/astroid/brain/brain_numpy_core_numeric.py index df4ae0cbb1..6ca61a1dad 100644 --- a/astroid/brain/brain_numpy_core_numeric.py +++ b/astroid/brain/brain_numpy_core_numeric.py @@ -4,9 +4,11 @@ """Astroid hooks for numpy.core.numeric module.""" +from __future__ import annotations + import functools +from typing import TYPE_CHECKING -from astroid import nodes from astroid.brain.brain_numpy_utils import ( attribute_looks_like_numpy_member, infer_numpy_member, @@ -14,9 +16,12 @@ from astroid.brain.helpers import register_module_extender from astroid.builder import parse from astroid.inference_tip import inference_tip -from astroid.manager import AstroidManager from astroid.nodes.node_classes import Attribute +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager + def numpy_core_numeric_transform() -> nodes.Module: return parse( diff --git a/astroid/brain/brain_numpy_core_numerictypes.py b/astroid/brain/brain_numpy_core_numerictypes.py index 7111c837a3..2c913fb86d 100644 --- a/astroid/brain/brain_numpy_core_numerictypes.py +++ b/astroid/brain/brain_numpy_core_numerictypes.py @@ -5,11 +5,17 @@ # TODO(hippo91) : correct the methods signature. """Astroid hooks for numpy.core.numerictypes module.""" -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.brain_numpy_utils import numpy_supports_type_hints from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def numpy_core_numerictypes_transform() -> nodes.Module: diff --git a/astroid/brain/brain_numpy_core_umath.py b/astroid/brain/brain_numpy_core_umath.py index a048a1c06b..bca15f92dd 100644 --- a/astroid/brain/brain_numpy_core_umath.py +++ b/astroid/brain/brain_numpy_core_umath.py @@ -7,10 +7,16 @@ # typecheck in `_emit_no_member` function) """Astroid hooks for numpy.core.umath module.""" -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def numpy_core_umath_transform() -> nodes.Module: diff --git a/astroid/brain/brain_numpy_ma.py b/astroid/brain/brain_numpy_ma.py index e61acb5c15..e68d26d5b1 100644 --- a/astroid/brain/brain_numpy_ma.py +++ b/astroid/brain/brain_numpy_ma.py @@ -4,10 +4,16 @@ """Astroid hooks for numpy ma module.""" -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def numpy_ma_transform() -> nodes.Module: diff --git a/astroid/brain/brain_numpy_ndarray.py b/astroid/brain/brain_numpy_ndarray.py index 38db4e62f4..7d6b06c046 100644 --- a/astroid/brain/brain_numpy_ndarray.py +++ b/astroid/brain/brain_numpy_ndarray.py @@ -5,13 +5,17 @@ """Astroid hooks for numpy ndarray class.""" from __future__ import annotations +from typing import TYPE_CHECKING + from astroid.brain.brain_numpy_utils import numpy_supports_type_hints from astroid.builder import extract_node -from astroid.context import InferenceContext from astroid.inference_tip import inference_tip -from astroid.manager import AstroidManager from astroid.nodes.node_classes import Attribute +if TYPE_CHECKING: + from astroid.context import InferenceContext + from astroid.manager import AstroidManager + def infer_numpy_ndarray(node, context: InferenceContext | None = None): ndarray = """ diff --git a/astroid/brain/brain_numpy_random_mtrand.py b/astroid/brain/brain_numpy_random_mtrand.py index be1c957861..1ab922c40c 100644 --- a/astroid/brain/brain_numpy_random_mtrand.py +++ b/astroid/brain/brain_numpy_random_mtrand.py @@ -4,10 +4,16 @@ # TODO(hippo91) : correct the functions return types """Astroid hooks for numpy.random.mtrand module.""" -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def numpy_random_mtrand_transform() -> nodes.Module: diff --git a/astroid/brain/brain_numpy_utils.py b/astroid/brain/brain_numpy_utils.py index 47f24433bd..4215a1a8af 100644 --- a/astroid/brain/brain_numpy_utils.py +++ b/astroid/brain/brain_numpy_utils.py @@ -6,9 +6,15 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from astroid.builder import extract_node -from astroid.context import InferenceContext -from astroid.nodes.node_classes import Attribute, Import, Name +from astroid.nodes.node_classes import Import, Name + +if TYPE_CHECKING: + from astroid.context import InferenceContext + from astroid.nodes.node_classes import Attribute + # Class subscript is available in numpy starting with version 1.20.0 NUMPY_VERSION_TYPE_HINTS_SUPPORT = ("1", "20", "0") diff --git a/astroid/brain/brain_pathlib.py b/astroid/brain/brain_pathlib.py index 62daaafc1b..fbbde73453 100644 --- a/astroid/brain/brain_pathlib.py +++ b/astroid/brain/brain_pathlib.py @@ -4,14 +4,20 @@ from __future__ import annotations -from collections.abc import Iterator +from typing import TYPE_CHECKING -from astroid import bases, context, nodes +from astroid import bases, nodes from astroid.builder import _extract_single_node from astroid.const import PY313_PLUS from astroid.exceptions import InferenceError, UseInferenceDefault from astroid.inference_tip import inference_tip -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from collections.abc import Iterator + + from astroid import context + from astroid.manager import AstroidManager + PATH_TEMPLATE = """ from pathlib import Path diff --git a/astroid/brain/brain_pkg_resources.py b/astroid/brain/brain_pkg_resources.py index e2bd669100..c587304d92 100644 --- a/astroid/brain/brain_pkg_resources.py +++ b/astroid/brain/brain_pkg_resources.py @@ -2,10 +2,16 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def pkg_resources_transform() -> nodes.Module: diff --git a/astroid/brain/brain_pytest.py b/astroid/brain/brain_pytest.py index 6d06267b3d..6b0d594957 100644 --- a/astroid/brain/brain_pytest.py +++ b/astroid/brain/brain_pytest.py @@ -3,11 +3,17 @@ # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt """Astroid hooks for pytest.""" -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import AstroidBuilder from astroid.manager import AstroidManager +if TYPE_CHECKING: + from astroid import nodes + def pytest_transform() -> nodes.Module: return AstroidBuilder(AstroidManager()).string_build( diff --git a/astroid/brain/brain_random.py b/astroid/brain/brain_random.py index 48cc121461..920b4d131e 100644 --- a/astroid/brain/brain_random.py +++ b/astroid/brain/brain_random.py @@ -5,11 +5,10 @@ from __future__ import annotations import random +from typing import TYPE_CHECKING -from astroid.context import InferenceContext from astroid.exceptions import UseInferenceDefault from astroid.inference_tip import inference_tip -from astroid.manager import AstroidManager from astroid.nodes.node_classes import ( Attribute, Call, @@ -22,6 +21,11 @@ ) from astroid.util import safe_infer +if TYPE_CHECKING: + from astroid.context import InferenceContext + from astroid.manager import AstroidManager + + ACCEPTED_ITERABLES_FOR_SAMPLE = (List, Set, Tuple) diff --git a/astroid/brain/brain_re.py b/astroid/brain/brain_re.py index 64646454b6..2a552e9c91 100644 --- a/astroid/brain/brain_re.py +++ b/astroid/brain/brain_re.py @@ -4,12 +4,17 @@ from __future__ import annotations -from astroid import context, nodes +from typing import TYPE_CHECKING + +from astroid import nodes from astroid.brain.helpers import register_module_extender from astroid.builder import _extract_single_node, parse from astroid.const import PY311_PLUS from astroid.inference_tip import inference_tip -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import context + from astroid.manager import AstroidManager def _re_transform() -> nodes.Module: diff --git a/astroid/brain/brain_regex.py b/astroid/brain/brain_regex.py index 70fb94610c..e30bd24d08 100644 --- a/astroid/brain/brain_regex.py +++ b/astroid/brain/brain_regex.py @@ -4,11 +4,16 @@ from __future__ import annotations -from astroid import context, nodes +from typing import TYPE_CHECKING + +from astroid import nodes from astroid.brain.helpers import register_module_extender from astroid.builder import _extract_single_node, parse from astroid.inference_tip import inference_tip -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import context + from astroid.manager import AstroidManager def _regex_transform() -> nodes.Module: diff --git a/astroid/brain/brain_responses.py b/astroid/brain/brain_responses.py index f2e606976b..773988b76d 100644 --- a/astroid/brain/brain_responses.py +++ b/astroid/brain/brain_responses.py @@ -10,10 +10,16 @@ See: https://github.com/getsentry/responses/blob/master/responses.py """ -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def responses_funcs() -> nodes.Module: diff --git a/astroid/brain/brain_scipy_signal.py b/astroid/brain/brain_scipy_signal.py index a7a257628a..c501250f5c 100755 --- a/astroid/brain/brain_scipy_signal.py +++ b/astroid/brain/brain_scipy_signal.py @@ -3,10 +3,16 @@ # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt """Astroid hooks for scipy.signal module.""" -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def scipy_signal() -> nodes.Module: diff --git a/astroid/brain/brain_signal.py b/astroid/brain/brain_signal.py index 649e9749a9..d6f1df0ec3 100644 --- a/astroid/brain/brain_signal.py +++ b/astroid/brain/brain_signal.py @@ -25,11 +25,16 @@ """ +from __future__ import annotations + import sys +from typing import TYPE_CHECKING from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid.manager import AstroidManager def _signals_enums_transform(): diff --git a/astroid/brain/brain_sqlalchemy.py b/astroid/brain/brain_sqlalchemy.py index 8410d9e12f..09552706a8 100644 --- a/astroid/brain/brain_sqlalchemy.py +++ b/astroid/brain/brain_sqlalchemy.py @@ -2,10 +2,16 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def _session_transform() -> nodes.Module: diff --git a/astroid/brain/brain_ssl.py b/astroid/brain/brain_ssl.py index de932dee5b..9bab82357b 100644 --- a/astroid/brain/brain_ssl.py +++ b/astroid/brain/brain_ssl.py @@ -4,11 +4,17 @@ """Astroid hooks for the ssl library.""" -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse from astroid.const import PY310_PLUS, PY312_PLUS -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def _verifyflags_enum() -> str: diff --git a/astroid/brain/brain_subprocess.py b/astroid/brain/brain_subprocess.py index 96855c6a15..89fd25b4e7 100644 --- a/astroid/brain/brain_subprocess.py +++ b/astroid/brain/brain_subprocess.py @@ -2,13 +2,19 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt +from __future__ import annotations + import textwrap +from typing import TYPE_CHECKING + -from astroid import nodes from astroid.brain.helpers import register_module_extender from astroid.builder import parse from astroid.const import PY310_PLUS, PY311_PLUS -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def _subprocess_transform() -> nodes.Module: diff --git a/astroid/brain/brain_threading.py b/astroid/brain/brain_threading.py index 95af2db069..054293a4cb 100644 --- a/astroid/brain/brain_threading.py +++ b/astroid/brain/brain_threading.py @@ -2,10 +2,16 @@ # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def _thread_transform() -> nodes.Module: diff --git a/astroid/brain/brain_type.py b/astroid/brain/brain_type.py index 2fb06be53e..8e851e1933 100644 --- a/astroid/brain/brain_type.py +++ b/astroid/brain/brain_type.py @@ -22,12 +22,16 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from astroid import nodes from astroid.builder import extract_node -from astroid.context import InferenceContext from astroid.exceptions import UseInferenceDefault from astroid.inference_tip import inference_tip -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid.manager import AstroidManager + from astroid.context import InferenceContext def _looks_like_type_subscript(node: nodes.Name) -> bool: diff --git a/astroid/brain/brain_typing.py b/astroid/brain/brain_typing.py index 239e63af24..adac998cf3 100644 --- a/astroid/brain/brain_typing.py +++ b/astroid/brain/brain_typing.py @@ -8,11 +8,9 @@ import textwrap import typing -from collections.abc import Iterator from functools import partial -from typing import Final +from typing import TYPE_CHECKING -from astroid import context from astroid.brain.helpers import register_module_extender from astroid.builder import AstroidBuilder, _extract_single_node, extract_node from astroid.const import PY312_PLUS, PY313_PLUS @@ -32,11 +30,17 @@ Const, JoinedStr, Name, - NodeNG, Subscript, ) from astroid.nodes.scoped_nodes import ClassDef, FunctionDef +if TYPE_CHECKING: + from typing import Final + from collections.abc import Iterator + + from astroid import context + from astroid.nodes.node_classes import NodeNG + TYPING_TYPEVARS = {"TypeVar", "NewType"} TYPING_TYPEVARS_QUALIFIED: Final = { "typing.TypeVar", diff --git a/astroid/brain/brain_unittest.py b/astroid/brain/brain_unittest.py index 4103ce0600..55660ffe56 100644 --- a/astroid/brain/brain_unittest.py +++ b/astroid/brain/brain_unittest.py @@ -3,10 +3,16 @@ # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt """Astroid hooks for unittest module.""" -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.brain.helpers import register_module_extender from astroid.builder import parse -from astroid.manager import AstroidManager + +if TYPE_CHECKING: + from astroid import nodes + from astroid.manager import AstroidManager def IsolatedAsyncioTestCaseImport() -> nodes.Module: diff --git a/astroid/brain/brain_uuid.py b/astroid/brain/brain_uuid.py index 37800b8e03..0a5a9b2c25 100644 --- a/astroid/brain/brain_uuid.py +++ b/astroid/brain/brain_uuid.py @@ -3,10 +3,17 @@ # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt """Astroid hooks for the UUID module.""" -from astroid.manager import AstroidManager + +from __future__ import annotations + +from typing import TYPE_CHECKING + from astroid.nodes.node_classes import Const from astroid.nodes.scoped_nodes import ClassDef +if TYPE_CHECKING: + from astroid.manager import AstroidManager + def _patch_uuid_class(node: ClassDef) -> None: # The .int member is patched using __dict__ diff --git a/astroid/brain/helpers.py b/astroid/brain/helpers.py index 79d778b5a3..d069343a37 100644 --- a/astroid/brain/helpers.py +++ b/astroid/brain/helpers.py @@ -4,11 +4,15 @@ from __future__ import annotations -from collections.abc import Callable +from typing import TYPE_CHECKING -from astroid.manager import AstroidManager from astroid.nodes.scoped_nodes import Module +if TYPE_CHECKING: + from collections.abc import Callable + + from astroid.manager import AstroidManager + def register_module_extender( manager: AstroidManager, module_name: str, get_extension_mod: Callable[[], Module] diff --git a/astroid/builder.py b/astroid/builder.py index ddc1aee712..392bcf2f23 100644 --- a/astroid/builder.py +++ b/astroid/builder.py @@ -10,21 +10,27 @@ from __future__ import annotations -import ast import os import textwrap -import types import warnings -from collections.abc import Iterator, Sequence -from io import TextIOWrapper from tokenize import detect_encoding +from typing import TYPE_CHECKING from astroid import bases, modutils, nodes, raw_building, rebuilder, util -from astroid._ast import ParserModule, get_parser_module +from astroid._ast import get_parser_module from astroid.const import PY312_PLUS from astroid.exceptions import AstroidBuildingError, AstroidSyntaxError, InferenceError from astroid.manager import AstroidManager +if TYPE_CHECKING: + import ast + import types + from io import TextIOWrapper + from collections.abc import Iterator, Sequence + + from astroid._ast import ParserModule + + # The name of the transient function that is used to # wrap expressions to be extracted when calling # extract_node. diff --git a/astroid/constraint.py b/astroid/constraint.py index 08bb80e3c9..69d2c4539c 100644 --- a/astroid/constraint.py +++ b/astroid/constraint.py @@ -5,23 +5,25 @@ """Classes representing different types of constraints on inference values.""" from __future__ import annotations -import sys from abc import ABC, abstractmethod -from collections.abc import Iterator -from typing import TYPE_CHECKING, Union +from typing import TYPE_CHECKING from astroid import nodes, util -from astroid.typing import InferenceResult - -if sys.version_info >= (3, 11): - from typing import Self -else: - from typing_extensions import Self if TYPE_CHECKING: + import sys + from typing import Union + from collections.abc import Iterator + from astroid import bases + from astroid.typing import InferenceResult + + if sys.version_info >= (3, 11): + from typing import Self + else: + from typing_extensions import Self -_NameNodes = Union[nodes.AssignAttr, nodes.Attribute, nodes.AssignName, nodes.Name] + _NameNodes = Union[nodes.AssignAttr, nodes.Attribute, nodes.AssignName, nodes.Name] class Constraint(ABC): diff --git a/astroid/context.py b/astroid/context.py index 0b8c259fc6..779b01a304 100644 --- a/astroid/context.py +++ b/astroid/context.py @@ -8,18 +8,21 @@ import contextlib import pprint -from collections.abc import Iterator, Sequence -from typing import TYPE_CHECKING, Optional - -from astroid.typing import InferenceResult, SuccessfulInferenceResult +from typing import TYPE_CHECKING if TYPE_CHECKING: + from typing import Optional + from collections.abc import Iterator, Sequence + from astroid import constraint, nodes from astroid.nodes.node_classes import Keyword, NodeNG + from astroid.typing import InferenceResult, SuccessfulInferenceResult + + _InferenceCache = dict[ + tuple["NodeNG", Optional[str], Optional[str], Optional[str]], + Sequence["NodeNG"], + ] -_InferenceCache = dict[ - tuple["NodeNG", Optional[str], Optional[str], Optional[str]], Sequence["NodeNG"] -] _INFERENCE_CACHE: _InferenceCache = {} diff --git a/astroid/decorators.py b/astroid/decorators.py index 6c8b1bac32..ac540c6612 100644 --- a/astroid/decorators.py +++ b/astroid/decorators.py @@ -10,13 +10,16 @@ import inspect import sys import warnings -from collections.abc import Callable, Generator -from typing import TypeVar +from typing import TypeVar, TYPE_CHECKING from astroid import util from astroid.context import InferenceContext from astroid.exceptions import InferenceError -from astroid.typing import InferenceResult + +if TYPE_CHECKING: + from collections.abc import Callable, Generator + + from astroid.typing import InferenceResult if sys.version_info >= (3, 10): from typing import ParamSpec diff --git a/astroid/exceptions.py b/astroid/exceptions.py index 126acb954d..690c71b4a4 100644 --- a/astroid/exceptions.py +++ b/astroid/exceptions.py @@ -6,14 +6,15 @@ from __future__ import annotations -from collections.abc import Iterable, Iterator -from typing import TYPE_CHECKING, Any - -from astroid.typing import InferenceResult, SuccessfulInferenceResult +from typing import TYPE_CHECKING if TYPE_CHECKING: + from typing import Any + from collections.abc import Iterable, Iterator + from astroid import arguments, bases, nodes, objects from astroid.context import InferenceContext + from astroid.typing import InferenceResult, SuccessfulInferenceResult __all__ = ( "AstroidBuildingError", diff --git a/astroid/filter_statements.py b/astroid/filter_statements.py index 627e68edc9..5274bc3060 100644 --- a/astroid/filter_statements.py +++ b/astroid/filter_statements.py @@ -13,10 +13,10 @@ from typing import TYPE_CHECKING from astroid import nodes -from astroid.typing import SuccessfulInferenceResult if TYPE_CHECKING: from astroid.nodes import _base_nodes + from astroid.typing import SuccessfulInferenceResult def _get_filtered_node_statements( diff --git a/astroid/helpers.py b/astroid/helpers.py index ea7523b94f..c02cbfa982 100644 --- a/astroid/helpers.py +++ b/astroid/helpers.py @@ -7,7 +7,7 @@ from __future__ import annotations import warnings -from collections.abc import Generator +from typing import TYPE_CHECKING from astroid import bases, manager, nodes, objects, raw_building, util from astroid.context import CallContext, InferenceContext @@ -19,9 +19,13 @@ _NonDeducibleTypeHierarchy, ) from astroid.nodes import scoped_nodes -from astroid.typing import InferenceResult from astroid.util import safe_infer as real_safe_infer +if TYPE_CHECKING: + from collections.abc import Generator + + from astroid.typing import InferenceResult + def safe_infer( node: nodes.NodeNG | bases.Proxy | util.UninferableBase, diff --git a/astroid/inference_tip.py b/astroid/inference_tip.py index c3187c0670..52f842eda8 100644 --- a/astroid/inference_tip.py +++ b/astroid/inference_tip.py @@ -7,17 +7,24 @@ from __future__ import annotations from collections import OrderedDict -from collections.abc import Generator -from typing import Any, TypeVar +from typing import TYPE_CHECKING -from astroid.context import InferenceContext from astroid.exceptions import InferenceOverwriteError, UseInferenceDefault from astroid.nodes import NodeNG -from astroid.typing import ( - InferenceResult, - InferFn, - TransformFn, -) + +if TYPE_CHECKING: + from typing import Any, TypeVar + from collections.abc import Generator + + from astroid.context import InferenceContext + from astroid.typing import ( + InferenceResult, + InferFn, + TransformFn, + ) + + _NodesT = TypeVar("_NodesT", bound=NodeNG) + _cache: OrderedDict[ tuple[InferFn[Any], NodeNG, InferenceContext | None], list[InferenceResult] @@ -25,8 +32,6 @@ _CURRENTLY_INFERRING: set[tuple[InferFn[Any], NodeNG]] = set() -_NodesT = TypeVar("_NodesT", bound=NodeNG) - def clear_inference_tip_cache() -> None: """Clear the inference tips cache.""" diff --git a/astroid/interpreter/_import/spec.py b/astroid/interpreter/_import/spec.py index 9795835e15..ee9258c60e 100644 --- a/astroid/interpreter/_import/spec.py +++ b/astroid/interpreter/_import/spec.py @@ -10,21 +10,23 @@ import importlib.machinery import importlib.util import os -import pathlib import sys -import types import warnings import zipimport -from collections.abc import Iterable, Iterator, Sequence from functools import lru_cache from pathlib import Path -from typing import Literal, NamedTuple, Protocol +from typing import TYPE_CHECKING, NamedTuple, Protocol from astroid.const import PY310_PLUS from astroid.modutils import EXT_LIB_DIRS, cached_os_path_isfile from . import util +if TYPE_CHECKING: + import types + from typing import Literal + from collections.abc import Iterable, Iterator, Sequence + # The MetaPathFinder protocol comes from typeshed, which says: # Intentionally omits one deprecated and one optional method of `importlib.abc.MetaPathFinder` @@ -321,7 +323,7 @@ def contribute_to_path( ) -def _is_setuptools_namespace(location: pathlib.Path) -> bool: +def _is_setuptools_namespace(location: Path) -> bool: try: with open(location / "__init__.py", "rb") as stream: data = stream.read(4096) diff --git a/astroid/interpreter/_import/util.py b/astroid/interpreter/_import/util.py index 511ec4f977..d588ed8e3a 100644 --- a/astroid/interpreter/_import/util.py +++ b/astroid/interpreter/_import/util.py @@ -7,11 +7,14 @@ import pathlib import sys from functools import lru_cache -from importlib._bootstrap_external import _NamespacePath +from typing import TYPE_CHECKING from importlib.util import _find_spec_from_path # type: ignore[attr-defined] from astroid.const import IS_PYPY +if TYPE_CHECKING: + from importlib._bootstrap_external import _NamespacePath + if sys.version_info >= (3, 11): from importlib.machinery import NamespaceLoader else: diff --git a/astroid/interpreter/objectmodel.py b/astroid/interpreter/objectmodel.py index 1fcff9e7f3..c620a83f05 100644 --- a/astroid/interpreter/objectmodel.py +++ b/astroid/interpreter/objectmodel.py @@ -27,9 +27,8 @@ import os import pprint import types -from collections.abc import Iterator from functools import lru_cache -from typing import TYPE_CHECKING, Any, Literal +from typing import TYPE_CHECKING import astroid from astroid import bases, nodes, util @@ -37,10 +36,13 @@ from astroid.exceptions import AttributeInferenceError, InferenceError, NoDefault from astroid.manager import AstroidManager from astroid.nodes import node_classes -from astroid.typing import InferenceResult, SuccessfulInferenceResult if TYPE_CHECKING: + from typing import Any, Literal + from collections.abc import Iterator + from astroid.objects import Property + from astroid.typing import InferenceResult, SuccessfulInferenceResult IMPL_PREFIX = "attr_" LEN_OF_IMPL_PREFIX = len(IMPL_PREFIX) diff --git a/astroid/manager.py b/astroid/manager.py index 3ed9ca39c4..5480ece786 100644 --- a/astroid/manager.py +++ b/astroid/manager.py @@ -11,13 +11,11 @@ import collections import os -import types import zipimport -from collections.abc import Callable, Iterator, Sequence -from typing import Any, ClassVar +from typing import TYPE_CHECKING from astroid import nodes -from astroid.context import InferenceContext, _invalidate_cache +from astroid.context import _invalidate_cache from astroid.exceptions import AstroidBuildingError, AstroidImportError from astroid.interpreter._import import spec, util from astroid.modutils import ( @@ -34,7 +32,15 @@ modpath_from_file, ) from astroid.transforms import TransformVisitor -from astroid.typing import AstroidManagerBrain, InferenceResult + +if TYPE_CHECKING: + import types + from typing import Any, ClassVar + from collections.abc import Callable, Iterator, Sequence + + from astroid.context import InferenceContext + from astroid.typing import AstroidManagerBrain, InferenceResult + ZIP_IMPORT_EXTS = (".zip", ".egg", ".whl", ".pyz", ".pyzw") diff --git a/astroid/modutils.py b/astroid/modutils.py index bf84b3b933..ba150cab8d 100644 --- a/astroid/modutils.py +++ b/astroid/modutils.py @@ -25,15 +25,19 @@ import os import sys import sysconfig -import types import warnings -from collections.abc import Callable, Iterable, Sequence from contextlib import redirect_stderr, redirect_stdout from functools import lru_cache +from typing import TYPE_CHECKING from astroid.const import IS_JYTHON, PY310_PLUS from astroid.interpreter._import import spec, util +if TYPE_CHECKING: + import types + from collections.abc import Callable, Iterable, Sequence + + if PY310_PLUS: from sys import stdlib_module_names else: diff --git a/astroid/nodes/_base_nodes.py b/astroid/nodes/_base_nodes.py index 2d210f17af..3451f4af5c 100644 --- a/astroid/nodes/_base_nodes.py +++ b/astroid/nodes/_base_nodes.py @@ -10,9 +10,8 @@ from __future__ import annotations import itertools -from collections.abc import Callable, Generator, Iterator from functools import cached_property, lru_cache, partial -from typing import TYPE_CHECKING, Any, ClassVar, Optional, Union +from typing import TYPE_CHECKING from astroid import bases, nodes, util from astroid.const import PY310_PLUS @@ -30,6 +29,9 @@ from astroid.typing import InferenceResult if TYPE_CHECKING: + from typing import Any, ClassVar, Optional, Union + from collections.abc import Callable, Generator, Iterator + from astroid.nodes.node_classes import LocalsDictNodeNG GetFlowFactory = Callable[ diff --git a/astroid/nodes/as_string.py b/astroid/nodes/as_string.py index d063350b4c..e355be6354 100644 --- a/astroid/nodes/as_string.py +++ b/astroid/nodes/as_string.py @@ -7,12 +7,13 @@ from __future__ import annotations import warnings -from collections.abc import Iterator from typing import TYPE_CHECKING from astroid import nodes if TYPE_CHECKING: + from collections.abc import Iterator + from astroid import objects from astroid.nodes import Const from astroid.nodes.node_classes import ( diff --git a/astroid/nodes/node_classes.py b/astroid/nodes/node_classes.py index 91d7b0fa49..3bdfe37540 100644 --- a/astroid/nodes/node_classes.py +++ b/astroid/nodes/node_classes.py @@ -10,23 +10,15 @@ import ast import itertools import operator -import sys import typing import warnings -from collections.abc import Callable, Generator, Iterable, Iterator, Mapping from functools import cached_property -from typing import ( - TYPE_CHECKING, - Any, - ClassVar, - Literal, - Optional, - Union, -) +from typing import TYPE_CHECKING from astroid import decorators, protocols, util from astroid.bases import Instance, _infer_stmts -from astroid.const import _EMPTY_OBJECT_MARKER, Context +from astroid.const import _EMPTY_OBJECT_MARKER +from astroid.typing import InferenceErrorInfo from astroid.context import CallContext, InferenceContext, copy_context from astroid.exceptions import ( AstroidBuildingError, @@ -46,51 +38,54 @@ from astroid.nodes import _base_nodes from astroid.nodes.const import OP_PRECEDENCE from astroid.nodes.node_ng import NodeNG -from astroid.typing import ( - ConstFactoryResult, - InferenceErrorInfo, - InferenceResult, - SuccessfulInferenceResult, -) - -if sys.version_info >= (3, 11): - from typing import Self -else: - from typing_extensions import Self if TYPE_CHECKING: + import sys + from typing import Any, ClassVar, Literal, Optional, Union + from collections.abc import Callable, Generator, Iterable, Iterator, Mapping + from astroid import nodes + from astroid.const import Context from astroid.nodes import LocalsDictNodeNG + from astroid.typing import ( + ConstFactoryResult, + InferenceResult, + SuccessfulInferenceResult, + ) + + if sys.version_info >= (3, 11): + from typing import Self + else: + from typing_extensions import Self + + _NodesT = typing.TypeVar("_NodesT", bound=NodeNG) + _BadOpMessageT = typing.TypeVar("_BadOpMessageT", bound=util.BadOperationMessage) + + AssignedStmtsPossibleNode = Union["List", "Tuple", "AssignName", "AssignAttr", None] + AssignedStmtsCall = Callable[ + [ + _NodesT, + AssignedStmtsPossibleNode, + Optional[InferenceContext], + Optional[list[int]], + ], + Any, + ] + InferBinaryOperation = Callable[ + [_NodesT, Optional[InferenceContext]], + Generator[Union[InferenceResult, _BadOpMessageT]], + ] + InferLHS = Callable[ + [_NodesT, Optional[InferenceContext]], + Generator[InferenceResult, None, Optional[InferenceErrorInfo]], + ] + InferUnaryOp = Callable[[_NodesT, str], ConstFactoryResult] def _is_const(value) -> bool: return isinstance(value, tuple(CONST_CLS)) -_NodesT = typing.TypeVar("_NodesT", bound=NodeNG) -_BadOpMessageT = typing.TypeVar("_BadOpMessageT", bound=util.BadOperationMessage) - -AssignedStmtsPossibleNode = Union["List", "Tuple", "AssignName", "AssignAttr", None] -AssignedStmtsCall = Callable[ - [ - _NodesT, - AssignedStmtsPossibleNode, - Optional[InferenceContext], - Optional[list[int]], - ], - Any, -] -InferBinaryOperation = Callable[ - [_NodesT, Optional[InferenceContext]], - Generator[Union[InferenceResult, _BadOpMessageT]], -] -InferLHS = Callable[ - [_NodesT, Optional[InferenceContext]], - Generator[InferenceResult, None, Optional[InferenceErrorInfo]], -] -InferUnaryOp = Callable[[_NodesT, str], ConstFactoryResult] - - @decorators.raise_if_nothing_inferred def unpack_infer(stmt, context: InferenceContext | None = None): """recursively generate nodes inferred by the given statement. diff --git a/astroid/nodes/node_ng.py b/astroid/nodes/node_ng.py index 6d149e3840..7947286a3a 100644 --- a/astroid/nodes/node_ng.py +++ b/astroid/nodes/node_ng.py @@ -5,16 +5,12 @@ from __future__ import annotations import pprint -import sys + import warnings -from collections.abc import Generator, Iterator from functools import cached_property from functools import singledispatch as _singledispatch from typing import ( TYPE_CHECKING, - Any, - ClassVar, - Literal, TypeVar, Union, cast, @@ -33,18 +29,21 @@ from astroid.manager import AstroidManager from astroid.nodes.as_string import AsStringVisitor from astroid.nodes.const import OP_PRECEDENCE -from astroid.nodes.utils import Position -from astroid.typing import InferenceErrorInfo, InferenceResult, InferFn - -if sys.version_info >= (3, 11): - from typing import Self -else: - from typing_extensions import Self - if TYPE_CHECKING: + from sys import version_info + from typing import Any, ClassVar, Literal + from collections.abc import Generator, Iterator + from astroid import nodes from astroid.nodes import _base_nodes + from astroid.nodes.utils import Position + from astroid.typing import InferenceErrorInfo, InferenceResult, InferFn + + if version_info >= (3, 11): + from typing import Self + else: + from typing_extensions import Self # Types for 'NodeNG.nodes_of_class()' diff --git a/astroid/nodes/scoped_nodes/mixin.py b/astroid/nodes/scoped_nodes/mixin.py index 8874c0691a..8abbd6fe59 100644 --- a/astroid/nodes/scoped_nodes/mixin.py +++ b/astroid/nodes/scoped_nodes/mixin.py @@ -6,18 +6,20 @@ from __future__ import annotations -from typing import TYPE_CHECKING, TypeVar, overload +from typing import TYPE_CHECKING, overload from astroid.exceptions import ParentMissingError from astroid.filter_statements import _filter_stmts from astroid.nodes import _base_nodes, scoped_nodes from astroid.nodes.scoped_nodes.utils import builtin_lookup -from astroid.typing import InferenceResult, SuccessfulInferenceResult if TYPE_CHECKING: + from typing import TypeVar + from astroid import nodes + from astroid.typing import InferenceResult, SuccessfulInferenceResult -_T = TypeVar("_T") + _T = TypeVar("_T") class LocalsDictNodeNG(_base_nodes.LookupMixIn): diff --git a/astroid/nodes/scoped_nodes/scoped_nodes.py b/astroid/nodes/scoped_nodes/scoped_nodes.py index 81c4d8dd20..b0e52a6888 100644 --- a/astroid/nodes/scoped_nodes/scoped_nodes.py +++ b/astroid/nodes/scoped_nodes/scoped_nodes.py @@ -14,9 +14,8 @@ import itertools import os import warnings -from collections.abc import Generator, Iterable, Iterator, Sequence from functools import cached_property, lru_cache -from typing import TYPE_CHECKING, Any, ClassVar, Literal, NoReturn, TypeVar +from typing import TYPE_CHECKING from astroid import bases, protocols, util from astroid.context import ( @@ -43,7 +42,6 @@ from astroid.nodes import ( Arguments, Const, - NodeNG, Unknown, _base_nodes, const_factory, @@ -51,17 +49,23 @@ ) from astroid.nodes.scoped_nodes.mixin import ComprehensionScope, LocalsDictNodeNG from astroid.nodes.scoped_nodes.utils import builtin_lookup -from astroid.nodes.utils import Position -from astroid.typing import ( - InferBinaryOp, - InferenceErrorInfo, - InferenceResult, - SuccessfulInferenceResult, -) +from astroid.typing import InferenceErrorInfo if TYPE_CHECKING: + from typing import Any, ClassVar, Literal, NoReturn, TypeVar + from collections.abc import Generator, Iterable, Iterator, Sequence + from astroid import nodes, objects + from astroid.nodes import NodeNG + from astroid.nodes.utils import Position from astroid.nodes._base_nodes import LookupMixIn + from astroid.typing import ( + InferBinaryOp, + InferenceResult, + SuccessfulInferenceResult, + ) + + _T = TypeVar("_T") ITER_METHODS = ("__iter__", "__getitem__") @@ -70,8 +74,6 @@ {"classmethod", "staticmethod", "builtins.classmethod", "builtins.staticmethod"} ) -_T = TypeVar("_T") - def _c3_merge(sequences, cls, context): """Merges MROs in *sequences* to a single MRO using the C3 algorithm. @@ -566,7 +568,7 @@ def wildcard_import_names(self): return default def str_const(node) -> bool: - return isinstance(node, node_classes.Const) and isinstance(node.value, str) + return isinstance(node, Const) and isinstance(node.value, str) for node in explicit.elts: if str_const(node): diff --git a/astroid/objects.py b/astroid/objects.py index 4a6b58d749..3156b5deb3 100644 --- a/astroid/objects.py +++ b/astroid/objects.py @@ -13,12 +13,10 @@ from __future__ import annotations -from collections.abc import Generator, Iterator +from typing import TYPE_CHECKING from functools import cached_property -from typing import Any, Literal, NoReturn, TypeVar from astroid import bases, util -from astroid.context import InferenceContext from astroid.exceptions import ( AttributeInferenceError, InferenceError, @@ -28,9 +26,15 @@ from astroid.interpreter import objectmodel from astroid.manager import AstroidManager from astroid.nodes import node_classes, scoped_nodes -from astroid.typing import InferenceResult, SuccessfulInferenceResult -_T = TypeVar("_T") +if TYPE_CHECKING: + from collections.abc import Generator, Iterator + from typing import Any, Literal, NoReturn, TypeVar + + from astroid.context import InferenceContext + from astroid.typing import InferenceResult, SuccessfulInferenceResult + + _T = TypeVar("_T") class FrozenSet(node_classes.BaseContainer): diff --git a/astroid/protocols.py b/astroid/protocols.py index bacb786a99..b24609d771 100644 --- a/astroid/protocols.py +++ b/astroid/protocols.py @@ -11,8 +11,7 @@ import collections import itertools import operator as operator_mod -from collections.abc import Callable, Generator, Iterator, Sequence -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING from astroid import bases, decorators, nodes, util from astroid.const import Context @@ -25,15 +24,20 @@ NoDefault, ) from astroid.nodes import node_classes -from astroid.typing import ( - ConstFactoryResult, - InferenceResult, - SuccessfulInferenceResult, -) if TYPE_CHECKING: + from typing import Any, TypeVar + from collections.abc import Callable, Generator, Iterator, Sequence + + from astroid.typing import ( + ConstFactoryResult, + InferenceResult, + SuccessfulInferenceResult, + ) + _TupleListNodeT = TypeVar("_TupleListNodeT", nodes.Tuple, nodes.List) + _CONTEXTLIB_MGR = "contextlib.contextmanager" _UNARY_OPERATORS: dict[str, Callable[[Any], Any]] = { diff --git a/astroid/raw_building.py b/astroid/raw_building.py index 1306838064..fdfe8f0abe 100644 --- a/astroid/raw_building.py +++ b/astroid/raw_building.py @@ -16,26 +16,29 @@ import sys import types import warnings -from collections.abc import Iterable from contextlib import redirect_stderr, redirect_stdout -from typing import Any, Union +from typing import TYPE_CHECKING from astroid import bases, nodes from astroid.const import _EMPTY_OBJECT_MARKER, IS_PYPY from astroid.manager import AstroidManager from astroid.nodes import node_classes -logger = logging.getLogger(__name__) +if TYPE_CHECKING: + from typing import Any, Union + from collections.abc import Iterable + + _FunctionTypes = Union[ + types.FunctionType, + types.MethodType, + types.BuiltinFunctionType, + types.WrapperDescriptorType, + types.MethodDescriptorType, + types.ClassMethodDescriptorType, + ] +logger = logging.getLogger(__name__) -_FunctionTypes = Union[ - types.FunctionType, - types.MethodType, - types.BuiltinFunctionType, - types.WrapperDescriptorType, - types.MethodDescriptorType, - types.ClassMethodDescriptorType, -] # the keys of CONST_CLS eg python builtin types _CONSTANTS = tuple(node_classes.CONST_CLS) diff --git a/astroid/rebuilder.py b/astroid/rebuilder.py index 8c6b74b327..d88bfe16e6 100644 --- a/astroid/rebuilder.py +++ b/astroid/rebuilder.py @@ -11,19 +11,37 @@ import ast import sys import token -from collections.abc import Callable, Generator from io import StringIO -from tokenize import TokenInfo, generate_tokens -from typing import TYPE_CHECKING, Final, TypeVar, Union, cast, overload +from tokenize import generate_tokens +from typing import TYPE_CHECKING, cast, overload, Union from astroid import nodes -from astroid._ast import ParserModule, get_parser_module, parse_function_type_comment +from astroid._ast import get_parser_module, parse_function_type_comment from astroid.const import PY312_PLUS, Context -from astroid.manager import AstroidManager -from astroid.nodes import NodeNG from astroid.nodes.node_classes import AssignName from astroid.nodes.utils import Position -from astroid.typing import InferenceResult + +if TYPE_CHECKING: + from tokenize import TokenInfo + from collections.abc import Callable, Generator + from typing import Final, TypeVar + + from astroid.nodes import NodeNG + from astroid._ast import ParserModule + from astroid.manager import AstroidManager + from astroid.typing import InferenceResult + + T_Doc = TypeVar( + "T_Doc", + "ast.Module", + "ast.ClassDef", + Union["ast.FunctionDef", "ast.AsyncFunctionDef"], + ) + _FunctionT = TypeVar("_FunctionT", nodes.FunctionDef, nodes.AsyncFunctionDef) + _ForT = TypeVar("_ForT", nodes.For, nodes.AsyncFor) + _WithT = TypeVar("_WithT", nodes.With, nodes.AsyncWith) + NodesWithDocsType = Union[nodes.Module, nodes.ClassDef, nodes.FunctionDef] + REDIRECT: Final[dict[str, str]] = { "arguments": "Arguments", @@ -36,18 +54,6 @@ } -T_Doc = TypeVar( - "T_Doc", - "ast.Module", - "ast.ClassDef", - Union["ast.FunctionDef", "ast.AsyncFunctionDef"], -) -_FunctionT = TypeVar("_FunctionT", nodes.FunctionDef, nodes.AsyncFunctionDef) -_ForT = TypeVar("_ForT", nodes.For, nodes.AsyncFor) -_WithT = TypeVar("_WithT", nodes.With, nodes.AsyncWith) -NodesWithDocsType = Union[nodes.Module, nodes.ClassDef, nodes.FunctionDef] - - # noinspection PyMethodMayBeStatic class TreeRebuilder: """Rebuilds the _ast tree to become an Astroid tree.""" diff --git a/astroid/test_utils.py b/astroid/test_utils.py index afddb1a4ff..faa3ebe6b5 100644 --- a/astroid/test_utils.py +++ b/astroid/test_utils.py @@ -10,12 +10,15 @@ import functools import sys import warnings -from collections.abc import Callable +from typing import TYPE_CHECKING import pytest from astroid import manager, nodes, transforms +if TYPE_CHECKING: + from collections.abc import Callable + def require_version(minver: str = "0.0.0", maxver: str = "4.0.0") -> Callable: """Compare version of python interpreter to the given one and skips the test if older.""" diff --git a/astroid/transforms.py b/astroid/transforms.py index 1831e74b5c..32938c5ba9 100644 --- a/astroid/transforms.py +++ b/astroid/transforms.py @@ -6,30 +6,34 @@ import warnings from collections import defaultdict -from collections.abc import Callable -from typing import TYPE_CHECKING, Optional, TypeVar, Union, cast, overload +from typing import TYPE_CHECKING, overload, cast from astroid.context import _invalidate_cache -from astroid.typing import SuccessfulInferenceResult, TransformFn if TYPE_CHECKING: + from collections.abc import Callable + from typing import Optional, TypeVar, Union + from astroid import nodes + from astroid.typing import SuccessfulInferenceResult, TransformFn _SuccessfulInferenceResultT = TypeVar( "_SuccessfulInferenceResultT", bound=SuccessfulInferenceResult ) + _Predicate = Optional[Callable[[_SuccessfulInferenceResultT], bool]] -_Vistables = Union[ - "nodes.NodeNG", list["nodes.NodeNG"], tuple["nodes.NodeNG", ...], str, None -] -_VisitReturns = Union[ - SuccessfulInferenceResult, - list[SuccessfulInferenceResult], - tuple[SuccessfulInferenceResult, ...], - str, - None, -] + _Vistables = Union[ + "nodes.NodeNG", list["nodes.NodeNG"], tuple["nodes.NodeNG", ...], str, None + ] + + _VisitReturns = Union[ + SuccessfulInferenceResult, + list[SuccessfulInferenceResult], + tuple[SuccessfulInferenceResult, ...], + str, + None, + ] class TransformVisitor: diff --git a/astroid/typing.py b/astroid/typing.py index 77cc120306..413fed7fc9 100644 --- a/astroid/typing.py +++ b/astroid/typing.py @@ -7,7 +7,6 @@ from collections.abc import Callable, Generator from typing import ( TYPE_CHECKING, - Any, Generic, Protocol, TypedDict, @@ -16,6 +15,7 @@ ) if TYPE_CHECKING: + from typing import Any from collections.abc import Iterator from astroid import bases, exceptions, nodes, transforms, util diff --git a/astroid/util.py b/astroid/util.py index 510b81cc13..315d5cfb3e 100644 --- a/astroid/util.py +++ b/astroid/util.py @@ -6,11 +6,13 @@ from __future__ import annotations import warnings -from typing import TYPE_CHECKING, Any, Final, Literal +from typing import TYPE_CHECKING from astroid.exceptions import InferenceError if TYPE_CHECKING: + from typing import Any, Final, Literal + from astroid import bases, nodes from astroid.context import InferenceContext from astroid.typing import InferenceResult From 72ff96437e25f814230babab97721571aeb2eabe Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:08:17 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- astroid/bases.py | 2 +- astroid/brain/brain_builtin_inference.py | 2 +- astroid/brain/brain_collections.py | 2 +- astroid/brain/brain_dataclasses.py | 2 +- astroid/brain/brain_functools.py | 2 +- astroid/brain/brain_namedtuple_enum.py | 2 +- astroid/brain/brain_subprocess.py | 1 - astroid/brain/brain_type.py | 2 +- astroid/brain/brain_typing.py | 2 +- astroid/builder.py | 2 +- astroid/constraint.py | 2 +- astroid/context.py | 2 +- astroid/decorators.py | 2 +- astroid/exceptions.py | 2 +- astroid/inference_tip.py | 2 +- astroid/interpreter/_import/spec.py | 2 +- astroid/interpreter/_import/util.py | 2 +- astroid/interpreter/objectmodel.py | 2 +- astroid/manager.py | 2 +- astroid/nodes/_base_nodes.py | 2 +- astroid/nodes/node_classes.py | 4 ++-- astroid/nodes/node_ng.py | 3 +-- astroid/nodes/scoped_nodes/scoped_nodes.py | 4 ++-- astroid/objects.py | 2 +- astroid/protocols.py | 2 +- astroid/raw_building.py | 2 +- astroid/rebuilder.py | 6 +++--- astroid/transforms.py | 2 +- astroid/typing.py | 2 +- 29 files changed, 32 insertions(+), 34 deletions(-) diff --git a/astroid/bases.py b/astroid/bases.py index c800abc46c..36280e59b5 100644 --- a/astroid/bases.py +++ b/astroid/bases.py @@ -29,8 +29,8 @@ from astroid.util import Uninferable, UninferableBase, safe_infer if TYPE_CHECKING: - from typing import Any, Literal from collections.abc import Iterable, Iterator + from typing import Any, Literal from astroid.constraint import Constraint from astroid.typing import ( diff --git a/astroid/brain/brain_builtin_inference.py b/astroid/brain/brain_builtin_inference.py index f6363fbfa1..9da266bae5 100644 --- a/astroid/brain/brain_builtin_inference.py +++ b/astroid/brain/brain_builtin_inference.py @@ -26,8 +26,8 @@ from astroid.raw_building import build_module if TYPE_CHECKING: - from typing import Any, NoReturn from collections.abc import Callable, Iterable + from typing import Any, NoReturn from astroid.bases import Instance from astroid.context import InferenceContext diff --git a/astroid/brain/brain_collections.py b/astroid/brain/brain_collections.py index 9a0ce6bcf9..7edf416ccf 100644 --- a/astroid/brain/brain_collections.py +++ b/astroid/brain/brain_collections.py @@ -12,8 +12,8 @@ from astroid.nodes.scoped_nodes import ClassDef if TYPE_CHECKING: - from astroid.manager import AstroidManager from astroid.context import InferenceContext + from astroid.manager import AstroidManager def _collections_transform(): diff --git a/astroid/brain/brain_dataclasses.py b/astroid/brain/brain_dataclasses.py index 2e29ddefbb..a059933d91 100644 --- a/astroid/brain/brain_dataclasses.py +++ b/astroid/brain/brain_dataclasses.py @@ -25,8 +25,8 @@ from astroid.util import Uninferable, UninferableBase, safe_infer if TYPE_CHECKING: - from typing import Literal, Union from collections.abc import Iterator + from typing import Literal, Union from astroid import context from astroid.typing import InferenceResult diff --git a/astroid/brain/brain_functools.py b/astroid/brain/brain_functools.py index bf829d4193..e8380e4639 100644 --- a/astroid/brain/brain_functools.py +++ b/astroid/brain/brain_functools.py @@ -23,8 +23,8 @@ from collections.abc import Iterator from astroid import nodes - from astroid.manager import AstroidManager from astroid.context import InferenceContext + from astroid.manager import AstroidManager from astroid.typing import InferenceResult, SuccessfulInferenceResult diff --git a/astroid/brain/brain_namedtuple_enum.py b/astroid/brain/brain_namedtuple_enum.py index 3e1e8bd355..862d46f275 100644 --- a/astroid/brain/brain_namedtuple_enum.py +++ b/astroid/brain/brain_namedtuple_enum.py @@ -24,8 +24,8 @@ from astroid.manager import AstroidManager if TYPE_CHECKING: - from typing import Final from collections.abc import Iterator + from typing import Final import astroid from astroid import bases diff --git a/astroid/brain/brain_subprocess.py b/astroid/brain/brain_subprocess.py index 89fd25b4e7..db81f27658 100644 --- a/astroid/brain/brain_subprocess.py +++ b/astroid/brain/brain_subprocess.py @@ -7,7 +7,6 @@ import textwrap from typing import TYPE_CHECKING - from astroid.brain.helpers import register_module_extender from astroid.builder import parse from astroid.const import PY310_PLUS, PY311_PLUS diff --git a/astroid/brain/brain_type.py b/astroid/brain/brain_type.py index 8e851e1933..29dce8040f 100644 --- a/astroid/brain/brain_type.py +++ b/astroid/brain/brain_type.py @@ -30,8 +30,8 @@ from astroid.inference_tip import inference_tip if TYPE_CHECKING: - from astroid.manager import AstroidManager from astroid.context import InferenceContext + from astroid.manager import AstroidManager def _looks_like_type_subscript(node: nodes.Name) -> bool: diff --git a/astroid/brain/brain_typing.py b/astroid/brain/brain_typing.py index adac998cf3..b38bf60b38 100644 --- a/astroid/brain/brain_typing.py +++ b/astroid/brain/brain_typing.py @@ -35,8 +35,8 @@ from astroid.nodes.scoped_nodes import ClassDef, FunctionDef if TYPE_CHECKING: - from typing import Final from collections.abc import Iterator + from typing import Final from astroid import context from astroid.nodes.node_classes import NodeNG diff --git a/astroid/builder.py b/astroid/builder.py index 392bcf2f23..a4c76f1c01 100644 --- a/astroid/builder.py +++ b/astroid/builder.py @@ -25,8 +25,8 @@ if TYPE_CHECKING: import ast import types - from io import TextIOWrapper from collections.abc import Iterator, Sequence + from io import TextIOWrapper from astroid._ast import ParserModule diff --git a/astroid/constraint.py b/astroid/constraint.py index 69d2c4539c..cf3eeacc56 100644 --- a/astroid/constraint.py +++ b/astroid/constraint.py @@ -12,8 +12,8 @@ if TYPE_CHECKING: import sys - from typing import Union from collections.abc import Iterator + from typing import Union from astroid import bases from astroid.typing import InferenceResult diff --git a/astroid/context.py b/astroid/context.py index 779b01a304..c2ac1d6b38 100644 --- a/astroid/context.py +++ b/astroid/context.py @@ -11,8 +11,8 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Optional from collections.abc import Iterator, Sequence + from typing import Optional from astroid import constraint, nodes from astroid.nodes.node_classes import Keyword, NodeNG diff --git a/astroid/decorators.py b/astroid/decorators.py index ac540c6612..e19a93089a 100644 --- a/astroid/decorators.py +++ b/astroid/decorators.py @@ -10,7 +10,7 @@ import inspect import sys import warnings -from typing import TypeVar, TYPE_CHECKING +from typing import TYPE_CHECKING, TypeVar from astroid import util from astroid.context import InferenceContext diff --git a/astroid/exceptions.py b/astroid/exceptions.py index 690c71b4a4..5f0d32b095 100644 --- a/astroid/exceptions.py +++ b/astroid/exceptions.py @@ -9,8 +9,8 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Any from collections.abc import Iterable, Iterator + from typing import Any from astroid import arguments, bases, nodes, objects from astroid.context import InferenceContext diff --git a/astroid/inference_tip.py b/astroid/inference_tip.py index 52f842eda8..32144fbb72 100644 --- a/astroid/inference_tip.py +++ b/astroid/inference_tip.py @@ -13,8 +13,8 @@ from astroid.nodes import NodeNG if TYPE_CHECKING: - from typing import Any, TypeVar from collections.abc import Generator + from typing import Any, TypeVar from astroid.context import InferenceContext from astroid.typing import ( diff --git a/astroid/interpreter/_import/spec.py b/astroid/interpreter/_import/spec.py index ee9258c60e..622ecc64d5 100644 --- a/astroid/interpreter/_import/spec.py +++ b/astroid/interpreter/_import/spec.py @@ -24,8 +24,8 @@ if TYPE_CHECKING: import types - from typing import Literal from collections.abc import Iterable, Iterator, Sequence + from typing import Literal # The MetaPathFinder protocol comes from typeshed, which says: diff --git a/astroid/interpreter/_import/util.py b/astroid/interpreter/_import/util.py index d588ed8e3a..45ba0e0d08 100644 --- a/astroid/interpreter/_import/util.py +++ b/astroid/interpreter/_import/util.py @@ -7,8 +7,8 @@ import pathlib import sys from functools import lru_cache -from typing import TYPE_CHECKING from importlib.util import _find_spec_from_path # type: ignore[attr-defined] +from typing import TYPE_CHECKING from astroid.const import IS_PYPY diff --git a/astroid/interpreter/objectmodel.py b/astroid/interpreter/objectmodel.py index c620a83f05..4417e6247a 100644 --- a/astroid/interpreter/objectmodel.py +++ b/astroid/interpreter/objectmodel.py @@ -38,8 +38,8 @@ from astroid.nodes import node_classes if TYPE_CHECKING: - from typing import Any, Literal from collections.abc import Iterator + from typing import Any, Literal from astroid.objects import Property from astroid.typing import InferenceResult, SuccessfulInferenceResult diff --git a/astroid/manager.py b/astroid/manager.py index 5480ece786..6ec03108c7 100644 --- a/astroid/manager.py +++ b/astroid/manager.py @@ -35,8 +35,8 @@ if TYPE_CHECKING: import types - from typing import Any, ClassVar from collections.abc import Callable, Iterator, Sequence + from typing import Any, ClassVar from astroid.context import InferenceContext from astroid.typing import AstroidManagerBrain, InferenceResult diff --git a/astroid/nodes/_base_nodes.py b/astroid/nodes/_base_nodes.py index 3451f4af5c..d1c9f3c7ca 100644 --- a/astroid/nodes/_base_nodes.py +++ b/astroid/nodes/_base_nodes.py @@ -29,8 +29,8 @@ from astroid.typing import InferenceResult if TYPE_CHECKING: - from typing import Any, ClassVar, Optional, Union from collections.abc import Callable, Generator, Iterator + from typing import Any, ClassVar, Optional, Union from astroid.nodes.node_classes import LocalsDictNodeNG diff --git a/astroid/nodes/node_classes.py b/astroid/nodes/node_classes.py index 3bdfe37540..c26842814b 100644 --- a/astroid/nodes/node_classes.py +++ b/astroid/nodes/node_classes.py @@ -18,7 +18,6 @@ from astroid import decorators, protocols, util from astroid.bases import Instance, _infer_stmts from astroid.const import _EMPTY_OBJECT_MARKER -from astroid.typing import InferenceErrorInfo from astroid.context import CallContext, InferenceContext, copy_context from astroid.exceptions import ( AstroidBuildingError, @@ -38,11 +37,12 @@ from astroid.nodes import _base_nodes from astroid.nodes.const import OP_PRECEDENCE from astroid.nodes.node_ng import NodeNG +from astroid.typing import InferenceErrorInfo if TYPE_CHECKING: import sys - from typing import Any, ClassVar, Literal, Optional, Union from collections.abc import Callable, Generator, Iterable, Iterator, Mapping + from typing import Any, ClassVar, Literal, Optional, Union from astroid import nodes from astroid.const import Context diff --git a/astroid/nodes/node_ng.py b/astroid/nodes/node_ng.py index 7947286a3a..e191a792c9 100644 --- a/astroid/nodes/node_ng.py +++ b/astroid/nodes/node_ng.py @@ -5,7 +5,6 @@ from __future__ import annotations import pprint - import warnings from functools import cached_property from functools import singledispatch as _singledispatch @@ -31,9 +30,9 @@ from astroid.nodes.const import OP_PRECEDENCE if TYPE_CHECKING: + from collections.abc import Generator, Iterator from sys import version_info from typing import Any, ClassVar, Literal - from collections.abc import Generator, Iterator from astroid import nodes from astroid.nodes import _base_nodes diff --git a/astroid/nodes/scoped_nodes/scoped_nodes.py b/astroid/nodes/scoped_nodes/scoped_nodes.py index b0e52a6888..da1c320f43 100644 --- a/astroid/nodes/scoped_nodes/scoped_nodes.py +++ b/astroid/nodes/scoped_nodes/scoped_nodes.py @@ -52,13 +52,13 @@ from astroid.typing import InferenceErrorInfo if TYPE_CHECKING: - from typing import Any, ClassVar, Literal, NoReturn, TypeVar from collections.abc import Generator, Iterable, Iterator, Sequence + from typing import Any, ClassVar, Literal, NoReturn, TypeVar from astroid import nodes, objects from astroid.nodes import NodeNG - from astroid.nodes.utils import Position from astroid.nodes._base_nodes import LookupMixIn + from astroid.nodes.utils import Position from astroid.typing import ( InferBinaryOp, InferenceResult, diff --git a/astroid/objects.py b/astroid/objects.py index 3156b5deb3..1ac52e8731 100644 --- a/astroid/objects.py +++ b/astroid/objects.py @@ -13,8 +13,8 @@ from __future__ import annotations -from typing import TYPE_CHECKING from functools import cached_property +from typing import TYPE_CHECKING from astroid import bases, util from astroid.exceptions import ( diff --git a/astroid/protocols.py b/astroid/protocols.py index b24609d771..e5cb4e9f55 100644 --- a/astroid/protocols.py +++ b/astroid/protocols.py @@ -26,8 +26,8 @@ from astroid.nodes import node_classes if TYPE_CHECKING: - from typing import Any, TypeVar from collections.abc import Callable, Generator, Iterator, Sequence + from typing import Any, TypeVar from astroid.typing import ( ConstFactoryResult, diff --git a/astroid/raw_building.py b/astroid/raw_building.py index fdfe8f0abe..db6d15c1a1 100644 --- a/astroid/raw_building.py +++ b/astroid/raw_building.py @@ -25,8 +25,8 @@ from astroid.nodes import node_classes if TYPE_CHECKING: - from typing import Any, Union from collections.abc import Iterable + from typing import Any, Union _FunctionTypes = Union[ types.FunctionType, diff --git a/astroid/rebuilder.py b/astroid/rebuilder.py index d88bfe16e6..a7e658a48a 100644 --- a/astroid/rebuilder.py +++ b/astroid/rebuilder.py @@ -13,7 +13,7 @@ import token from io import StringIO from tokenize import generate_tokens -from typing import TYPE_CHECKING, cast, overload, Union +from typing import TYPE_CHECKING, Union, cast, overload from astroid import nodes from astroid._ast import get_parser_module, parse_function_type_comment @@ -22,13 +22,13 @@ from astroid.nodes.utils import Position if TYPE_CHECKING: - from tokenize import TokenInfo from collections.abc import Callable, Generator + from tokenize import TokenInfo from typing import Final, TypeVar - from astroid.nodes import NodeNG from astroid._ast import ParserModule from astroid.manager import AstroidManager + from astroid.nodes import NodeNG from astroid.typing import InferenceResult T_Doc = TypeVar( diff --git a/astroid/transforms.py b/astroid/transforms.py index 32938c5ba9..5f3539ec68 100644 --- a/astroid/transforms.py +++ b/astroid/transforms.py @@ -6,7 +6,7 @@ import warnings from collections import defaultdict -from typing import TYPE_CHECKING, overload, cast +from typing import TYPE_CHECKING, cast, overload from astroid.context import _invalidate_cache diff --git a/astroid/typing.py b/astroid/typing.py index 413fed7fc9..bbc874f7d4 100644 --- a/astroid/typing.py +++ b/astroid/typing.py @@ -15,8 +15,8 @@ ) if TYPE_CHECKING: - from typing import Any from collections.abc import Iterator + from typing import Any from astroid import bases, exceptions, nodes, transforms, util from astroid.context import InferenceContext