From 0b202aa0052a819bce727296504069794e7fc420 Mon Sep 17 00:00:00 2001 From: Nick Drozd <nicholasdrozd@gmail.com> Date: Tue, 24 Sep 2024 14:43:54 -0400 Subject: [PATCH 1/3] Move typechecking imports under TYPE_CHECKING flag --- pylint/checkers/bad_chained_comparison.py | 4 +- pylint/checkers/base/basic_checker.py | 8 +-- pylint/checkers/base/basic_error_checker.py | 6 ++- pylint/checkers/base/docstring_checker.py | 7 ++- pylint/checkers/base/name_checker/checker.py | 9 ++-- .../base/name_checker/naming_style.py | 8 ++- pylint/checkers/base_checker.py | 28 +++++----- pylint/checkers/classes/class_checker.py | 20 ++++--- .../classes/special_methods_checker.py | 14 +++-- pylint/checkers/deprecated.py | 9 +++- pylint/checkers/design_analysis.py | 9 ++-- pylint/checkers/exceptions.py | 16 +++--- pylint/checkers/format.py | 8 +-- pylint/checkers/imports.py | 13 +++-- pylint/checkers/logging.py | 13 +++-- pylint/checkers/misc.py | 6 +-- pylint/checkers/newstyle.py | 3 +- pylint/checkers/non_ascii_names.py | 7 ++- pylint/checkers/raw_metrics.py | 10 ++-- .../implicit_booleaness_checker.py | 6 ++- .../refactoring/refactoring_checker.py | 11 ++-- pylint/checkers/spelling.py | 10 ++-- pylint/checkers/stdlib.py | 14 +++-- pylint/checkers/strings.py | 19 ++++--- pylint/checkers/symilar.py | 15 ++++-- pylint/checkers/typecheck.py | 33 +++++++----- pylint/checkers/unicode.py | 16 +++--- pylint/checkers/utils.py | 21 ++++---- pylint/checkers/variables.py | 19 ++++--- pylint/config/_pylint_config/setup.py | 7 ++- pylint/config/_pylint_config/utils.py | 20 ++++--- pylint/config/argument.py | 32 +++++++----- pylint/config/arguments_manager.py | 10 ++-- pylint/config/arguments_provider.py | 11 ++-- pylint/config/callback_actions.py | 6 ++- pylint/config/config_initialization.py | 2 +- pylint/config/deprecation_actions.py | 7 ++- pylint/config/find_default_config_files.py | 5 +- pylint/config/utils.py | 6 ++- pylint/constants.py | 6 ++- pylint/extensions/_check_docs_utils.py | 5 +- pylint/extensions/check_elif.py | 5 +- pylint/extensions/code_style.py | 11 ++-- pylint/extensions/docparams.py | 5 +- pylint/extensions/docstyle.py | 3 +- pylint/extensions/dunder.py | 4 +- pylint/extensions/empty_comment.py | 4 +- pylint/extensions/eq_without_hash.py | 10 +++- pylint/extensions/mccabe.py | 52 ++++++++++--------- pylint/extensions/overlapping_exceptions.py | 8 ++- pylint/extensions/redefined_loop_name.py | 6 ++- pylint/extensions/while_used.py | 4 +- pylint/graph.py | 7 ++- pylint/lint/base_options.py | 2 +- pylint/lint/expand_modules.py | 9 ++-- pylint/lint/message_state_handler.py | 9 ++-- pylint/lint/parallel.py | 13 +++-- pylint/lint/pylinter.py | 46 +++++++++------- pylint/lint/report_functions.py | 11 ++-- pylint/lint/run.py | 11 ++-- pylint/lint/utils.py | 5 +- pylint/message/message.py | 6 ++- pylint/message/message_definition.py | 7 +-- pylint/message/message_definition_store.py | 5 +- pylint/message/message_id_store.py | 5 +- pylint/pyreverse/diadefslib.py | 12 +++-- pylint/pyreverse/diagrams.py | 7 ++- pylint/pyreverse/dot_printer.py | 6 ++- pylint/pyreverse/main.py | 11 ++-- pylint/pyreverse/printer.py | 6 ++- pylint/pyreverse/printer_factory.py | 7 ++- pylint/pyreverse/utils.py | 9 ++-- pylint/pyreverse/writer.py | 25 +++++---- pylint/reporters/base_reporter.py | 8 +-- pylint/reporters/multi_reporter.py | 13 ++--- pylint/reporters/reports_handler_mix_in.py | 12 +++-- pylint/reporters/text.py | 4 +- pylint/reporters/ureports/base_writer.py | 6 ++- pylint/reporters/ureports/nodes.py | 15 +++--- pylint/testutils/_primer/package_to_lint.py | 6 ++- pylint/testutils/_primer/primer.py | 10 ++-- pylint/testutils/_primer/primer_command.py | 12 +++-- .../_primer/primer_compare_command.py | 11 ++-- .../testutils/_primer/primer_run_command.py | 13 +++-- pylint/testutils/_run.py | 8 ++- pylint/testutils/checker_test_case.py | 14 +++-- pylint/testutils/decorator.py | 9 ++-- .../functional/find_functional_tests.py | 6 ++- .../functional/lint_module_output_update.py | 8 ++- pylint/testutils/functional/test_file.py | 6 ++- pylint/testutils/lint_module_test.py | 16 ++++-- pylint/testutils/output_line.py | 17 +++--- pylint/testutils/pyreverse.py | 6 ++- pylint/testutils/reporter_for_tests.py | 2 +- pylint/testutils/tokenize_str.py | 5 +- pylint/testutils/unittest_linter.py | 13 +++-- pylint/testutils/utils.py | 9 ++-- pylint/utils/docs.py | 4 +- pylint/utils/file_state.py | 11 ++-- pylint/utils/linterstats.py | 5 +- pylint/utils/pragma_parser.py | 6 ++- pylint/utils/utils.py | 17 +++--- 102 files changed, 692 insertions(+), 390 deletions(-) diff --git a/pylint/checkers/bad_chained_comparison.py b/pylint/checkers/bad_chained_comparison.py index 2e19121604..ec3abea515 100644 --- a/pylint/checkers/bad_chained_comparison.py +++ b/pylint/checkers/bad_chained_comparison.py @@ -6,12 +6,12 @@ from typing import TYPE_CHECKING -from astroid import nodes - from pylint.checkers import BaseChecker from pylint.interfaces import HIGH if TYPE_CHECKING: + from astroid import nodes + from pylint.lint import PyLinter COMPARISON_OP = frozenset(("<", "<=", ">", ">=", "!=", "==")) diff --git a/pylint/checkers/base/basic_checker.py b/pylint/checkers/base/basic_checker.py index bd31905282..40148d424e 100644 --- a/pylint/checkers/base/basic_checker.py +++ b/pylint/checkers/base/basic_checker.py @@ -8,7 +8,6 @@ import collections import itertools -from collections.abc import Iterator from typing import TYPE_CHECKING, Literal, cast import astroid @@ -16,12 +15,15 @@ from pylint import utils as lint_utils from pylint.checkers import BaseChecker, utils -from pylint.interfaces import HIGH, INFERENCE, Confidence +from pylint.interfaces import HIGH, INFERENCE from pylint.reporters.ureports import nodes as reporter_nodes -from pylint.utils import LinterStats if TYPE_CHECKING: + from collections.abc import Iterator + + from pylint.interfaces import Confidence from pylint.lint.pylinter import PyLinter + from pylint.utils import LinterStats class _BasicChecker(BaseChecker): diff --git a/pylint/checkers/base/basic_error_checker.py b/pylint/checkers/base/basic_error_checker.py index d6e10f31d0..ca3b064efd 100644 --- a/pylint/checkers/base/basic_error_checker.py +++ b/pylint/checkers/base/basic_error_checker.py @@ -7,16 +7,20 @@ from __future__ import annotations import itertools +from typing import TYPE_CHECKING import astroid from astroid import nodes -from astroid.typing import InferenceResult from pylint.checkers import utils from pylint.checkers.base.basic_checker import _BasicChecker from pylint.checkers.utils import infer_all from pylint.interfaces import HIGH +if TYPE_CHECKING: + from astroid.typing import InferenceResult + + ABC_METACLASSES = {"_py_abc.ABCMeta", "abc.ABCMeta"} # Python 3.7+, # List of methods which can be redefined REDEFINABLE_METHODS = frozenset(("__module__",)) diff --git a/pylint/checkers/base/docstring_checker.py b/pylint/checkers/base/docstring_checker.py index aecfd9b060..4e90e8c896 100644 --- a/pylint/checkers/base/docstring_checker.py +++ b/pylint/checkers/base/docstring_checker.py @@ -7,7 +7,8 @@ from __future__ import annotations import re -from typing import Literal +from typing import TYPE_CHECKING + import astroid from astroid import nodes @@ -21,6 +22,10 @@ is_property_setter, ) +if TYPE_CHECKING: + from typing import Literal + + # do not require a doc string on private/system methods NO_REQUIRED_DOC_RGX = re.compile("^_") diff --git a/pylint/checkers/base/name_checker/checker.py b/pylint/checkers/base/name_checker/checker.py index 1d8589a576..1c26fe12c8 100644 --- a/pylint/checkers/base/name_checker/checker.py +++ b/pylint/checkers/base/name_checker/checker.py @@ -6,14 +6,11 @@ from __future__ import annotations -import argparse import collections import itertools import re import sys -from collections.abc import Iterable from enum import Enum, auto -from re import Pattern from typing import TYPE_CHECKING import astroid @@ -29,10 +26,14 @@ _create_naming_options, ) from pylint.checkers.utils import is_property_deleter, is_property_setter -from pylint.typing import Options if TYPE_CHECKING: + import argparse + from collections.abc import Iterable + from re import Pattern + from pylint.lint.pylinter import PyLinter + from pylint.typing import Options _BadNamesTuple = tuple[nodes.NodeNG, str, str, interfaces.Confidence] diff --git a/pylint/checkers/base/name_checker/naming_style.py b/pylint/checkers/base/name_checker/naming_style.py index 0198ae7d1e..9df22dfceb 100644 --- a/pylint/checkers/base/name_checker/naming_style.py +++ b/pylint/checkers/base/name_checker/naming_style.py @@ -5,10 +5,14 @@ from __future__ import annotations import re -from re import Pattern +from typing import TYPE_CHECKING from pylint import constants -from pylint.typing import OptionDict, Options + +if TYPE_CHECKING: + from re import Pattern + + from pylint.typing import OptionDict, Options class NamingStyle: diff --git a/pylint/checkers/base_checker.py b/pylint/checkers/base_checker.py index 6d577e0bdd..3d239aebc5 100644 --- a/pylint/checkers/base_checker.py +++ b/pylint/checkers/base_checker.py @@ -6,29 +6,31 @@ import abc import functools -from collections.abc import Iterable, Sequence from inspect import cleandoc -from tokenize import TokenInfo -from typing import TYPE_CHECKING, Any - -from astroid import nodes +from typing import TYPE_CHECKING from pylint.config.arguments_provider import _ArgumentsProvider from pylint.constants import _MSG_ORDER, MAIN_CHECKER_NAME, WarningScope from pylint.exceptions import InvalidMessageError -from pylint.interfaces import Confidence from pylint.message.message_definition import MessageDefinition -from pylint.typing import ( - ExtraMessageOptions, - MessageDefinitionTuple, - OptionDict, - Options, - ReportsCallable, -) +from pylint.typing import ExtraMessageOptions from pylint.utils import get_rst_section, get_rst_title if TYPE_CHECKING: + from collections.abc import Iterable, Sequence + from tokenize import TokenInfo + from typing import Any + + from astroid import nodes + from pylint.lint import PyLinter + from pylint.interfaces import Confidence + from pylint.typing import ( + MessageDefinitionTuple, + OptionDict, + Options, + ReportsCallable, + ) @functools.total_ordering diff --git a/pylint/checkers/classes/class_checker.py b/pylint/checkers/classes/class_checker.py index 0caeeadcdf..e38dd99407 100644 --- a/pylint/checkers/classes/class_checker.py +++ b/pylint/checkers/classes/class_checker.py @@ -7,16 +7,12 @@ from __future__ import annotations from collections import defaultdict -from collections.abc import Callable, Sequence from functools import cached_property from itertools import chain, zip_longest -from re import Pattern -from typing import TYPE_CHECKING, Any, NamedTuple, Union +from typing import TYPE_CHECKING, NamedTuple import astroid -from astroid import bases, nodes, util -from astroid.nodes import LocalsDictNodeNG -from astroid.typing import SuccessfulInferenceResult +from astroid import nodes, util from pylint.checkers import BaseChecker, utils from pylint.checkers.utils import ( @@ -40,13 +36,21 @@ uninferable_final_decorators, ) from pylint.interfaces import HIGH, INFERENCE -from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: + from collections.abc import Callable, Sequence + from re import Pattern + from typing import Any, Union + + from astroid import bases + from astroid.nodes import LocalsDictNodeNG + from astroid.typing import SuccessfulInferenceResult + from pylint.lint.pylinter import PyLinter + from pylint.typing import MessageDefinitionTuple + _AccessNodes = Union[nodes.Attribute, nodes.AssignAttr] -_AccessNodes = Union[nodes.Attribute, nodes.AssignAttr] INVALID_BASE_CLASSES = {"bool", "range", "slice", "memoryview"} ALLOWED_PROPERTIES = {"bultins.property", "functools.cached_property"} diff --git a/pylint/checkers/classes/special_methods_checker.py b/pylint/checkers/classes/special_methods_checker.py index 025f285622..ea438acabb 100644 --- a/pylint/checkers/classes/special_methods_checker.py +++ b/pylint/checkers/classes/special_methods_checker.py @@ -6,12 +6,10 @@ from __future__ import annotations -from collections.abc import Callable +from typing import TYPE_CHECKING import astroid from astroid import bases, nodes, util -from astroid.context import InferenceContext -from astroid.typing import InferenceResult from pylint.checkers import BaseChecker from pylint.checkers.utils import ( @@ -22,7 +20,15 @@ only_required_for_messages, safe_infer, ) -from pylint.lint.pylinter import PyLinter + +if TYPE_CHECKING: + from collections.abc import Callable + + from astroid.context import InferenceContext + from astroid.typing import InferenceResult + + from pylint.lint.pylinter import PyLinter + NEXT_METHOD = "__next__" diff --git a/pylint/checkers/deprecated.py b/pylint/checkers/deprecated.py index 028dc13f38..4855672bd3 100644 --- a/pylint/checkers/deprecated.py +++ b/pylint/checkers/deprecated.py @@ -6,8 +6,8 @@ from __future__ import annotations -from collections.abc import Container, Iterable from itertools import chain +from typing import TYPE_CHECKING import astroid from astroid import nodes @@ -17,7 +17,12 @@ from pylint.checkers.base_checker import BaseChecker from pylint.checkers.utils import get_import_name, infer_all, safe_infer from pylint.interfaces import INFERENCE -from pylint.typing import MessageDefinitionTuple + +if TYPE_CHECKING: + from collections.abc import Container, Iterable + + from pylint.typing import MessageDefinitionTuple + ACCEPTABLE_NODES = ( astroid.BoundMethod, diff --git a/pylint/checkers/design_analysis.py b/pylint/checkers/design_analysis.py index 5c1adbc888..a2f05ba470 100644 --- a/pylint/checkers/design_analysis.py +++ b/pylint/checkers/design_analysis.py @@ -8,19 +8,22 @@ import re from collections import defaultdict -from collections.abc import Iterator from typing import TYPE_CHECKING import astroid -from astroid import nodes from pylint.checkers import BaseChecker from pylint.checkers.utils import is_enum, only_required_for_messages from pylint.interfaces import HIGH -from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: + from collections.abc import Iterator + + from astroid import nodes + from pylint.lint import PyLinter + from pylint.typing import MessageDefinitionTuple + MSGS: dict[str, MessageDefinitionTuple] = ( { # pylint: disable=consider-using-namedtuple-or-dataclass diff --git a/pylint/checkers/exceptions.py b/pylint/checkers/exceptions.py index 3834f260be..0d1bd58f40 100644 --- a/pylint/checkers/exceptions.py +++ b/pylint/checkers/exceptions.py @@ -8,21 +8,25 @@ import builtins import inspect -from collections.abc import Generator -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING import astroid -from astroid import nodes, objects, util -from astroid.context import InferenceContext -from astroid.typing import InferenceResult, SuccessfulInferenceResult +from astroid import nodes, util from pylint import checkers from pylint.checkers import utils from pylint.interfaces import HIGH, INFERENCE -from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: + from collections.abc import Generator + from typing import Any + + from astroid import objects + from astroid.context import InferenceContext + from astroid.typing import InferenceResult, SuccessfulInferenceResult + from pylint.lint import PyLinter + from pylint.typing import MessageDefinitionTuple def _builtin_exceptions() -> set[str]: diff --git a/pylint/checkers/format.py b/pylint/checkers/format.py index 12fa930162..57e4214845 100644 --- a/pylint/checkers/format.py +++ b/pylint/checkers/format.py @@ -15,8 +15,7 @@ import tokenize from functools import reduce -from re import Match -from typing import TYPE_CHECKING, Literal +from typing import TYPE_CHECKING from astroid import nodes @@ -24,11 +23,14 @@ from pylint.checkers.utils import only_required_for_messages from pylint.constants import WarningScope from pylint.interfaces import HIGH -from pylint.typing import MessageDefinitionTuple from pylint.utils.pragma_parser import OPTION_PO, PragmaParserError, parse_pragma if TYPE_CHECKING: + from re import Match + from typing import Literal + from pylint.lint import PyLinter + from pylint.typing import MessageDefinitionTuple _KEYWORD_TOKENS = { diff --git a/pylint/checkers/imports.py b/pylint/checkers/imports.py index 2fa212cd7a..f5f7b4a70d 100644 --- a/pylint/checkers/imports.py +++ b/pylint/checkers/imports.py @@ -11,13 +11,11 @@ import os import sys from collections import defaultdict -from collections.abc import ItemsView, Sequence from functools import cached_property from typing import TYPE_CHECKING, Any, Union import astroid from astroid import nodes -from astroid.nodes._base_nodes import ImportNode from pylint.checkers import BaseChecker, DeprecatedMixin from pylint.checkers.utils import ( @@ -32,13 +30,18 @@ from pylint.exceptions import EmptyReportError from pylint.graph import DotBackend, get_cycles from pylint.interfaces import HIGH -from pylint.reporters.ureports.nodes import Paragraph, Section, VerbatimText -from pylint.typing import MessageDefinitionTuple +from pylint.reporters.ureports.nodes import Paragraph, VerbatimText from pylint.utils import IsortDriver -from pylint.utils.linterstats import LinterStats if TYPE_CHECKING: + from collections.abc import ItemsView, Sequence + + from astroid.nodes._base_nodes import ImportNode + from pylint.lint import PyLinter + from pylint.reporters.ureports.nodes import Section + from pylint.typing import MessageDefinitionTuple + from pylint.utils.linterstats import LinterStats # The dictionary with Any should actually be a _ImportTree again diff --git a/pylint/checkers/logging.py b/pylint/checkers/logging.py index d057c78ecb..de93cac0cd 100644 --- a/pylint/checkers/logging.py +++ b/pylint/checkers/logging.py @@ -7,20 +7,25 @@ from __future__ import annotations import string -from typing import TYPE_CHECKING, Literal +from typing import TYPE_CHECKING import astroid -from astroid import bases, nodes -from astroid.typing import InferenceResult +from astroid import nodes from pylint import checkers from pylint.checkers import utils from pylint.checkers.utils import infer_all from pylint.interfaces import HIGH -from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: + from typing import Literal + + from astroid import bases + from astroid.typing import InferenceResult + from pylint.lint import PyLinter + from pylint.typing import MessageDefinitionTuple + MSGS: dict[str, MessageDefinitionTuple] = ( { # pylint: disable=consider-using-namedtuple-or-dataclass diff --git a/pylint/checkers/misc.py b/pylint/checkers/misc.py index 78c21d0c5e..1567e7b35b 100644 --- a/pylint/checkers/misc.py +++ b/pylint/checkers/misc.py @@ -10,13 +10,13 @@ import tokenize from typing import TYPE_CHECKING -from astroid import nodes - from pylint.checkers import BaseRawFileChecker, BaseTokenChecker -from pylint.typing import ManagedMessage if TYPE_CHECKING: + from astroid import nodes + from pylint.lint import PyLinter + from pylint.typing import ManagedMessage class ByIdManagedMessagesChecker(BaseRawFileChecker): diff --git a/pylint/checkers/newstyle.py b/pylint/checkers/newstyle.py index 920c8cc41e..8d9300968b 100644 --- a/pylint/checkers/newstyle.py +++ b/pylint/checkers/newstyle.py @@ -13,10 +13,11 @@ from pylint.checkers import BaseChecker from pylint.checkers.utils import node_frame_class, only_required_for_messages -from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: from pylint.lint import PyLinter + from pylint.typing import MessageDefinitionTuple + MSGS: dict[str, MessageDefinitionTuple] = { "E1003": ( diff --git a/pylint/checkers/non_ascii_names.py b/pylint/checkers/non_ascii_names.py index 693d8529f5..1e03238b3e 100644 --- a/pylint/checkers/non_ascii_names.py +++ b/pylint/checkers/non_ascii_names.py @@ -12,11 +12,16 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from astroid import nodes -from pylint import constants, interfaces, lint +from pylint import constants, interfaces from pylint.checkers import base_checker, utils +if TYPE_CHECKING: + from pylint import lint + NON_ASCII_HELP = ( "Used when the name contains at least one non-ASCII unicode character. " "See https://peps.python.org/pep-0672/#confusing-features" diff --git a/pylint/checkers/raw_metrics.py b/pylint/checkers/raw_metrics.py index ef4535345a..a4e2cab39b 100644 --- a/pylint/checkers/raw_metrics.py +++ b/pylint/checkers/raw_metrics.py @@ -5,14 +5,18 @@ from __future__ import annotations import tokenize -from typing import TYPE_CHECKING, Any, Literal, cast +from typing import TYPE_CHECKING, Literal, cast from pylint.checkers import BaseTokenChecker -from pylint.reporters.ureports.nodes import Paragraph, Section, Table, Text -from pylint.utils import LinterStats, diff_string +from pylint.reporters.ureports.nodes import Paragraph, Table, Text +from pylint.utils import diff_string if TYPE_CHECKING: + from typing import Any + from pylint.lint import PyLinter + from pylint.reporters.ureports.nodes import Section + from pylint.utils import LinterStats def report_raw_stats( diff --git a/pylint/checkers/refactoring/implicit_booleaness_checker.py b/pylint/checkers/refactoring/implicit_booleaness_checker.py index 4d3d47cf9f..b6016cbc04 100644 --- a/pylint/checkers/refactoring/implicit_booleaness_checker.py +++ b/pylint/checkers/refactoring/implicit_booleaness_checker.py @@ -5,14 +5,18 @@ from __future__ import annotations import itertools +from typing import TYPE_CHECKING import astroid -from astroid import bases, nodes, util +from astroid import bases, nodes from pylint import checkers from pylint.checkers import utils from pylint.interfaces import HIGH, INFERENCE +if TYPE_CHECKING: + from astroid import util + def _is_constant_zero(node: str | nodes.NodeNG) -> bool: # We have to check that node.value is not False because node.value == 0 is True diff --git a/pylint/checkers/refactoring/refactoring_checker.py b/pylint/checkers/refactoring/refactoring_checker.py index c67c8dd232..b19e363b88 100644 --- a/pylint/checkers/refactoring/refactoring_checker.py +++ b/pylint/checkers/refactoring/refactoring_checker.py @@ -8,10 +8,8 @@ import copy import itertools import tokenize -from collections.abc import Iterator from functools import cached_property, reduce -from re import Pattern -from typing import TYPE_CHECKING, Any, NamedTuple, Union, cast +from typing import TYPE_CHECKING, NamedTuple, Union, cast import astroid from astroid import bases, nodes @@ -21,9 +19,14 @@ from pylint.checkers import utils from pylint.checkers.base.basic_error_checker import _loop_exits_early from pylint.checkers.utils import node_frame_class -from pylint.interfaces import HIGH, INFERENCE, Confidence +from pylint.interfaces import HIGH, INFERENCE if TYPE_CHECKING: + from collections.abc import Iterator + from re import Pattern + from typing import Any + + from pylint.interfaces import Confidence from pylint.lint import PyLinter diff --git a/pylint/checkers/spelling.py b/pylint/checkers/spelling.py index 27d1c7ce0b..07b5438843 100644 --- a/pylint/checkers/spelling.py +++ b/pylint/checkers/spelling.py @@ -8,15 +8,17 @@ import re import tokenize -from re import Pattern -from typing import TYPE_CHECKING, Any, Literal - -from astroid import nodes +from typing import TYPE_CHECKING from pylint.checkers import BaseTokenChecker from pylint.checkers.utils import only_required_for_messages if TYPE_CHECKING: + from re import Pattern + from typing import Any, Literal + + from astroid import nodes + from pylint.lint import PyLinter try: diff --git a/pylint/checkers/stdlib.py b/pylint/checkers/stdlib.py index 9225cd4d26..91ea6840f2 100644 --- a/pylint/checkers/stdlib.py +++ b/pylint/checkers/stdlib.py @@ -7,22 +7,26 @@ from __future__ import annotations import sys -from collections.abc import Iterable -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING import astroid from astroid import nodes, util -from astroid.typing import InferenceResult from pylint import interfaces from pylint.checkers import BaseChecker, DeprecatedMixin, utils from pylint.interfaces import HIGH, INFERENCE -from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: + from collections.abc import Iterable + from typing import Any + + from astroid.typing import InferenceResult + from pylint.lint import PyLinter + from pylint.typing import MessageDefinitionTuple + + DeprecationDict = dict[tuple[int, int, int], set[str]] -DeprecationDict = dict[tuple[int, int, int], set[str]] OPEN_FILES_MODE = ("open", "file") OPEN_FILES_FUNCS = (*OPEN_FILES_MODE, "read_text", "write_text") diff --git a/pylint/checkers/strings.py b/pylint/checkers/strings.py index 90493fa006..84f0de0663 100644 --- a/pylint/checkers/strings.py +++ b/pylint/checkers/strings.py @@ -6,25 +6,28 @@ from __future__ import annotations -import collections import re import sys import tokenize from collections import Counter -from collections.abc import Iterable, Sequence -from typing import TYPE_CHECKING, Literal +from typing import TYPE_CHECKING import astroid -from astroid import bases, nodes, util -from astroid.typing import SuccessfulInferenceResult +from astroid import nodes, util from pylint.checkers import BaseChecker, BaseRawFileChecker, BaseTokenChecker, utils from pylint.checkers.utils import only_required_for_messages from pylint.interfaces import HIGH -from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: + from collections.abc import Iterable, Sequence + from typing import Literal + + from astroid import bases + from astroid.typing import SuccessfulInferenceResult + from pylint.lint import PyLinter + from pylint.typing import MessageDefinitionTuple _AST_NODE_STR_TYPES = ("__builtin__.unicode", "__builtin__.str", "builtins.str") @@ -439,7 +442,7 @@ def visit_call(self, node: nodes.Call) -> None: def _detect_vacuous_formatting( self, node: nodes.Call, positional_arguments: list[SuccessfulInferenceResult] ) -> None: - counter = collections.Counter( + counter = Counter( arg.name for arg in positional_arguments if isinstance(arg, nodes.Name) ) for name, count in counter.items(): @@ -833,7 +836,7 @@ def check_for_consistent_string_delimiters( Args: tokens: The tokens to be checked against for consistent usage. """ - string_delimiters: Counter[str] = collections.Counter() + string_delimiters: Counter[str] = Counter() inside_fstring = False # whether token is inside f-string (since 3.12) target_py312 = self.linter.config.py_version >= (3, 12) diff --git a/pylint/checkers/symilar.py b/pylint/checkers/symilar.py index 1e82633e65..afec4d135d 100644 --- a/pylint/checkers/symilar.py +++ b/pylint/checkers/symilar.py @@ -38,21 +38,26 @@ import sys import warnings from collections import defaultdict -from collections.abc import Callable, Generator, Iterable, Sequence from io import BufferedIOBase, BufferedReader, BytesIO from itertools import chain -from typing import TYPE_CHECKING, NamedTuple, NewType, NoReturn, TextIO, Union +from typing import TYPE_CHECKING, NamedTuple, NewType, TextIO, Union import astroid from astroid import nodes from pylint.checkers import BaseChecker, BaseRawFileChecker, table_lines_from_stats -from pylint.reporters.ureports.nodes import Section, Table -from pylint.typing import MessageDefinitionTuple, Options -from pylint.utils import LinterStats, decoding_stream +from pylint.reporters.ureports.nodes import Table +from pylint.utils import decoding_stream if TYPE_CHECKING: + from collections.abc import Callable, Generator, Iterable, Sequence + from typing import NoReturn + from pylint.lint import PyLinter + from pylint.reporters.ureports.nodes import Section + from pylint.typing import MessageDefinitionTuple, Options + from pylint.utils import LinterStats + DEFAULT_MIN_SIMILARITY_LINE = 4 diff --git a/pylint/checkers/typecheck.py b/pylint/checkers/typecheck.py index bc7ddfc2a4..cb40a69d32 100644 --- a/pylint/checkers/typecheck.py +++ b/pylint/checkers/typecheck.py @@ -12,17 +12,13 @@ import re import shlex import sys -from collections.abc import Callable, Iterable from functools import cached_property, singledispatch -from re import Pattern -from typing import TYPE_CHECKING, Any, Literal, Union +from typing import TYPE_CHECKING import astroid import astroid.exceptions import astroid.helpers -from astroid import arguments, bases, nodes, util -from astroid.nodes import _base_nodes -from astroid.typing import InferenceResult, SuccessfulInferenceResult +from astroid import bases, nodes, util from pylint.checkers import BaseChecker, utils from pylint.checkers.utils import ( @@ -51,18 +47,27 @@ ) from pylint.constants import PY310_PLUS from pylint.interfaces import HIGH, INFERENCE -from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: + from collections.abc import Callable, Iterable + from re import Pattern + from typing import Any, Literal, Union + + from astroid import arguments + from astroid.nodes import _base_nodes + from astroid.typing import InferenceResult, SuccessfulInferenceResult + from pylint.lint import PyLinter + from pylint.typing import MessageDefinitionTuple + + CallableObjects = Union[ + bases.BoundMethod, + bases.UnboundMethod, + nodes.FunctionDef, + nodes.Lambda, + nodes.ClassDef, + ] -CallableObjects = Union[ - bases.BoundMethod, - bases.UnboundMethod, - nodes.FunctionDef, - nodes.Lambda, - nodes.ClassDef, -] STR_FORMAT = {"builtins.str.format"} ASYNCIO_COROUTINE = "asyncio.coroutines.coroutine" diff --git a/pylint/checkers/unicode.py b/pylint/checkers/unicode.py index c90ace9710..5ea226d0ec 100644 --- a/pylint/checkers/unicode.py +++ b/pylint/checkers/unicode.py @@ -15,21 +15,25 @@ import codecs import contextlib -import io import re from collections import OrderedDict -from collections.abc import Iterable from functools import lru_cache from tokenize import detect_encoding -from typing import NamedTuple, TypeVar - -from astroid import nodes +from typing import TYPE_CHECKING +from typing import NamedTuple import pylint.interfaces import pylint.lint from pylint import checkers -_StrLike = TypeVar("_StrLike", str, bytes) +if TYPE_CHECKING: + from collections.abc import Iterable + import io + from typing import TypeVar + + from astroid import nodes + + _StrLike = TypeVar("_StrLike", str, bytes) # Based on: # https://golangexample.com/go-linter-which-checks-for-dangerous-unicode-character-sequences/ diff --git a/pylint/checkers/utils.py b/pylint/checkers/utils.py index bfc4bc61da..58b64b9d0d 100644 --- a/pylint/checkers/utils.py +++ b/pylint/checkers/utils.py @@ -13,28 +13,31 @@ import numbers import re import string -from collections.abc import Callable, Iterable, Iterator from functools import lru_cache, partial -from re import Match -from typing import TYPE_CHECKING, Any, TypeVar +from typing import TYPE_CHECKING import astroid.objects from astroid import TooManyLevelsError, nodes, util -from astroid.context import InferenceContext from astroid.exceptions import AstroidError -from astroid.nodes._base_nodes import ImportNode, Statement -from astroid.typing import InferenceResult, SuccessfulInferenceResult from pylint.constants import TYPING_NEVER, TYPING_NORETURN if TYPE_CHECKING: + from collections.abc import Callable, Iterable, Iterator from functools import _lru_cache_wrapper + from re import Match + from typing import Any, TypeVar + + from astroid.context import InferenceContext + from astroid.nodes._base_nodes import ImportNode, Statement + from astroid.typing import InferenceResult, SuccessfulInferenceResult from pylint.checkers import BaseChecker -_NodeT = TypeVar("_NodeT", bound=nodes.NodeNG) -_CheckerT = TypeVar("_CheckerT", bound="BaseChecker") -AstCallbackMethod = Callable[[_CheckerT, _NodeT], None] + _NodeT = TypeVar("_NodeT", bound=nodes.NodeNG) + _CheckerT = TypeVar("_CheckerT", bound="BaseChecker") + AstCallbackMethod = Callable[[_CheckerT, _NodeT], None] + COMP_NODE_TYPES = ( nodes.ListComp, diff --git a/pylint/checkers/variables.py b/pylint/checkers/variables.py index 47f6b92d6e..7113bee9a2 100644 --- a/pylint/checkers/variables.py +++ b/pylint/checkers/variables.py @@ -6,23 +6,19 @@ from __future__ import annotations -import collections import copy import itertools import math import os import re from collections import defaultdict -from collections.abc import Generator, Iterable, Iterator from enum import Enum from functools import cached_property -from typing import TYPE_CHECKING, Any, NamedTuple +from typing import TYPE_CHECKING, NamedTuple import astroid import astroid.exceptions from astroid import bases, extract_node, nodes, util -from astroid.nodes import _base_nodes -from astroid.typing import InferenceResult from pylint.checkers import BaseChecker, utils from pylint.checkers.utils import ( @@ -34,10 +30,17 @@ ) from pylint.constants import TYPING_NEVER, TYPING_NORETURN from pylint.interfaces import CONTROL_FLOW, HIGH, INFERENCE, INFERENCE_FAILURE -from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: + from collections.abc import Generator, Iterable, Iterator + from typing import Any + + from astroid.nodes import _base_nodes + from astroid.typing import InferenceResult + from pylint.lint import PyLinter + from pylint.typing import MessageDefinitionTuple + SPECIAL_OBJ = re.compile("^_{2}[a-z]+_{2}$") FUTURE = "__future__" @@ -538,7 +541,7 @@ class NamesConsumer: def __init__(self, node: nodes.NodeNG, scope_type: str) -> None: self._atomic = ScopeConsumer( - copy.copy(node.locals), {}, collections.defaultdict(list), scope_type + copy.copy(node.locals), {}, defaultdict(list), scope_type ) self.node = node self.names_under_always_false_test: set[str] = set() @@ -3200,7 +3203,7 @@ def _check_imports(self, not_consumed: dict[str, list[nodes.NodeNG]]) -> None: checked = set() unused_wildcard_imports: defaultdict[ tuple[str, nodes.ImportFrom], list[str] - ] = collections.defaultdict(list) + ] = defaultdict(list) for name, stmt in local_names: for imports in stmt.names: real_name = imported_name = imports[0] diff --git a/pylint/config/_pylint_config/setup.py b/pylint/config/_pylint_config/setup.py index 211f9bc6d3..eae1058b8c 100644 --- a/pylint/config/_pylint_config/setup.py +++ b/pylint/config/_pylint_config/setup.py @@ -8,12 +8,15 @@ from __future__ import annotations import argparse -from collections.abc import Sequence -from typing import Any +from typing import TYPE_CHECKING from pylint.config._pylint_config.help_message import get_help from pylint.config.callback_actions import _AccessParserAction +if TYPE_CHECKING: + from collections.abc import Sequence + from typing import Any + class _HelpAction(_AccessParserAction): def __call__( diff --git a/pylint/config/_pylint_config/utils.py b/pylint/config/_pylint_config/utils.py index f9185e8b1d..8875f1e1b4 100644 --- a/pylint/config/_pylint_config/utils.py +++ b/pylint/config/_pylint_config/utils.py @@ -7,17 +7,21 @@ from __future__ import annotations import sys -from collections.abc import Callable from pathlib import Path -from typing import Literal, TypeVar +from typing import TYPE_CHECKING -if sys.version_info >= (3, 10): - from typing import ParamSpec -else: - from typing_extensions import ParamSpec +if TYPE_CHECKING: + from collections.abc import Callable + from typing import Literal, TypeVar + + if sys.version_info >= (3, 10): + from typing import ParamSpec + else: + from typing_extensions import ParamSpec + + _P = ParamSpec("_P") + _ReturnValueT = TypeVar("_ReturnValueT", bool, str) -_P = ParamSpec("_P") -_ReturnValueT = TypeVar("_ReturnValueT", bool, str) SUPPORTED_FORMATS = {"t", "toml", "i", "ini"} YES_NO_ANSWERS = {"y", "yes", "n", "no"} diff --git a/pylint/config/argument.py b/pylint/config/argument.py index a515a942b4..9549f56e94 100644 --- a/pylint/config/argument.py +++ b/pylint/config/argument.py @@ -13,27 +13,31 @@ import os import pathlib import re -from collections.abc import Callable, Sequence from glob import glob from re import Pattern -from typing import Any, Literal, Union +from typing import TYPE_CHECKING from pylint import interfaces from pylint import utils as pylint_utils -from pylint.config.callback_actions import _CallbackAction from pylint.config.deprecation_actions import _NewNamesAction, _OldNamesAction -_ArgumentTypes = Union[ - str, - int, - float, - bool, - Pattern[str], - Sequence[str], - Sequence[Pattern[str]], - tuple[int, ...], -] -"""List of possible argument types.""" +if TYPE_CHECKING: + from collections.abc import Callable, Sequence + from typing import Any, Literal, Union + + from pylint.config.callback_actions import _CallbackAction + + _ArgumentTypes = Union[ + str, + int, + float, + bool, + Pattern[str], + Sequence[str], + Sequence[Pattern[str]], + tuple[int, ...], + ] + """List of possible argument types.""" def _confidence_transformer(value: str) -> Sequence[str]: diff --git a/pylint/config/arguments_manager.py b/pylint/config/arguments_manager.py index aca8f5f878..c85b5e4ca4 100644 --- a/pylint/config/arguments_manager.py +++ b/pylint/config/arguments_manager.py @@ -11,14 +11,12 @@ import sys import textwrap import warnings -from collections.abc import Sequence -from typing import TYPE_CHECKING, Any, TextIO +from typing import TYPE_CHECKING import tomlkit from pylint import utils from pylint.config.argument import ( - _Argument, _CallableArgument, _ExtendArgument, _StoreArgument, @@ -33,7 +31,6 @@ from pylint.config.help_formatter import _HelpFormatter from pylint.config.utils import _convert_option_to_argument, _parse_rich_type_value from pylint.constants import MAIN_CHECKER_NAME -from pylint.typing import DirectoryNamespaceDict, OptionDict if sys.version_info >= (3, 11): import tomllib @@ -42,7 +39,12 @@ if TYPE_CHECKING: + from collections.abc import Sequence + from typing import Any, TextIO + + from pylint.typing import DirectoryNamespaceDict, OptionDict from pylint.config.arguments_provider import _ArgumentsProvider + from pylint.config.argument import _Argument class _ArgumentsManager: diff --git a/pylint/config/arguments_provider.py b/pylint/config/arguments_provider.py index 7f75718ca1..731cf1ff2d 100644 --- a/pylint/config/arguments_provider.py +++ b/pylint/config/arguments_provider.py @@ -6,11 +6,14 @@ from __future__ import annotations -from collections.abc import Iterator -from typing import Any +from typing import TYPE_CHECKING -from pylint.config.arguments_manager import _ArgumentsManager -from pylint.typing import OptionDict, Options +if TYPE_CHECKING: + from typing import Any + from collections.abc import Iterator + + from pylint.typing import OptionDict, Options + from pylint.config.arguments_manager import _ArgumentsManager class _ArgumentsProvider: diff --git a/pylint/config/callback_actions.py b/pylint/config/callback_actions.py index bf2decd3c6..dc2e8afd94 100644 --- a/pylint/config/callback_actions.py +++ b/pylint/config/callback_actions.py @@ -11,13 +11,15 @@ import abc import argparse import sys -from collections.abc import Callable, Sequence from pathlib import Path -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING from pylint import exceptions, extensions, interfaces, utils if TYPE_CHECKING: + from collections.abc import Callable, Sequence + from typing import Any + from pylint.config.help_formatter import _HelpFormatter from pylint.lint import PyLinter from pylint.lint.run import Run diff --git a/pylint/config/config_initialization.py b/pylint/config/config_initialization.py index 9656ea5647..e80da1ea11 100644 --- a/pylint/config/config_initialization.py +++ b/pylint/config/config_initialization.py @@ -11,7 +11,6 @@ from pathlib import Path from typing import TYPE_CHECKING -from pylint import reporters from pylint.config.config_file_parser import _ConfigurationFileParser from pylint.config.exceptions import ( ArgumentPreprocessingError, @@ -21,6 +20,7 @@ if TYPE_CHECKING: from pylint.lint import PyLinter + from pylint import reporters def _config_initialization( diff --git a/pylint/config/deprecation_actions.py b/pylint/config/deprecation_actions.py index 85a77cc78a..54757c45ae 100644 --- a/pylint/config/deprecation_actions.py +++ b/pylint/config/deprecation_actions.py @@ -10,8 +10,11 @@ import argparse import warnings -from collections.abc import Sequence -from typing import Any +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from collections.abc import Sequence + from typing import Any class _OldNamesAction(argparse._StoreAction): diff --git a/pylint/config/find_default_config_files.py b/pylint/config/find_default_config_files.py index 7e53e77207..aa2d68f288 100644 --- a/pylint/config/find_default_config_files.py +++ b/pylint/config/find_default_config_files.py @@ -7,14 +7,17 @@ import configparser import os import sys -from collections.abc import Iterator from pathlib import Path +from typing import TYPE_CHECKING if sys.version_info >= (3, 11): import tomllib else: import tomli as tomllib +if TYPE_CHECKING: + from collections.abc import Iterator + RC_NAMES = ( Path("pylintrc"), Path("pylintrc.toml"), diff --git a/pylint/config/utils.py b/pylint/config/utils.py index 91e4ff86f6..91d9bba610 100644 --- a/pylint/config/utils.py +++ b/pylint/config/utils.py @@ -7,9 +7,8 @@ from __future__ import annotations import re -from collections.abc import Callable, Sequence from pathlib import Path -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING from pylint import extensions, utils from pylint.config.argument import ( @@ -24,6 +23,9 @@ from pylint.config.exceptions import ArgumentPreprocessingError if TYPE_CHECKING: + from collections.abc import Callable, Sequence + from typing import Any + from pylint.lint.run import Run diff --git a/pylint/constants.py b/pylint/constants.py index 0ba20162a1..a5bdb37c56 100644 --- a/pylint/constants.py +++ b/pylint/constants.py @@ -7,12 +7,16 @@ import os import platform import sys +from typing import TYPE_CHECKING import astroid import platformdirs from pylint.__pkginfo__ import __version__ -from pylint.typing import MessageTypesFullName + +if TYPE_CHECKING: + from pylint.typing import MessageTypesFullName + PY310_PLUS = sys.version_info[:2] >= (3, 10) PY311_PLUS = sys.version_info[:2] >= (3, 11) diff --git a/pylint/extensions/_check_docs_utils.py b/pylint/extensions/_check_docs_utils.py index 9b4b3e0db6..5592010072 100644 --- a/pylint/extensions/_check_docs_utils.py +++ b/pylint/extensions/_check_docs_utils.py @@ -8,7 +8,7 @@ import itertools import re -from collections.abc import Iterable +from typing import TYPE_CHECKING import astroid from astroid import nodes @@ -16,6 +16,9 @@ from pylint.checkers import utils +if TYPE_CHECKING: + from collections.abc import Iterable + def space_indentation(s: str) -> int: """The number of leading spaces in a string. diff --git a/pylint/extensions/check_elif.py b/pylint/extensions/check_elif.py index de20ed8ec6..3fe79bed38 100644 --- a/pylint/extensions/check_elif.py +++ b/pylint/extensions/check_elif.py @@ -4,8 +4,6 @@ from __future__ import annotations -import tokenize -from tokenize import TokenInfo from typing import TYPE_CHECKING from astroid import nodes @@ -15,6 +13,9 @@ from pylint.interfaces import HIGH if TYPE_CHECKING: + import tokenize + from tokenize import TokenInfo + from pylint.lint import PyLinter diff --git a/pylint/extensions/code_style.py b/pylint/extensions/code_style.py index 00d539500c..6817667261 100644 --- a/pylint/extensions/code_style.py +++ b/pylint/extensions/code_style.py @@ -4,7 +4,6 @@ from __future__ import annotations -import sys from typing import TYPE_CHECKING, cast from astroid import nodes @@ -14,12 +13,14 @@ from pylint.interfaces import INFERENCE if TYPE_CHECKING: + import sys + from pylint.lint import PyLinter -if sys.version_info >= (3, 10): - from typing import TypeGuard -else: - from typing_extensions import TypeGuard + if sys.version_info >= (3, 10): + from typing import TypeGuard + else: + from typing_extensions import TypeGuard class CodeStyleChecker(BaseChecker): diff --git a/pylint/extensions/docparams.py b/pylint/extensions/docparams.py index b19560b7fb..2ce6694642 100644 --- a/pylint/extensions/docparams.py +++ b/pylint/extensions/docparams.py @@ -10,15 +10,16 @@ from typing import TYPE_CHECKING import astroid -from astroid import nodes from pylint.checkers import BaseChecker from pylint.checkers import utils as checker_utils from pylint.extensions import _check_docs_utils as utils -from pylint.extensions._check_docs_utils import Docstring from pylint.interfaces import HIGH if TYPE_CHECKING: + from astroid import nodes + + from pylint.extensions._check_docs_utils import Docstring from pylint.lint import PyLinter diff --git a/pylint/extensions/docstyle.py b/pylint/extensions/docstyle.py index c54ab93b20..4650398e85 100644 --- a/pylint/extensions/docstyle.py +++ b/pylint/extensions/docstyle.py @@ -7,13 +7,14 @@ import linecache from typing import TYPE_CHECKING -from astroid import nodes from pylint import checkers from pylint.checkers.utils import only_required_for_messages from pylint.interfaces import HIGH if TYPE_CHECKING: + from astroid import nodes + from pylint.lint import PyLinter diff --git a/pylint/extensions/dunder.py b/pylint/extensions/dunder.py index 1683f81476..39ce32d403 100644 --- a/pylint/extensions/dunder.py +++ b/pylint/extensions/dunder.py @@ -6,13 +6,13 @@ from typing import TYPE_CHECKING -from astroid import nodes - from pylint.checkers import BaseChecker from pylint.constants import DUNDER_METHODS, DUNDER_PROPERTIES, EXTRA_DUNDER_METHODS from pylint.interfaces import HIGH if TYPE_CHECKING: + from astroid import nodes + from pylint.lint import PyLinter diff --git a/pylint/extensions/empty_comment.py b/pylint/extensions/empty_comment.py index 7f54322ae1..611aa2c2ac 100644 --- a/pylint/extensions/empty_comment.py +++ b/pylint/extensions/empty_comment.py @@ -6,11 +6,11 @@ from typing import TYPE_CHECKING -from astroid import nodes - from pylint.checkers import BaseRawFileChecker if TYPE_CHECKING: + from astroid import nodes + from pylint.lint import PyLinter diff --git a/pylint/extensions/eq_without_hash.py b/pylint/extensions/eq_without_hash.py index 5f39dfa3e2..4a1bf64ef3 100644 --- a/pylint/extensions/eq_without_hash.py +++ b/pylint/extensions/eq_without_hash.py @@ -9,11 +9,17 @@ See https://github.com/pylint-dev/pylint/issues/5025 """ -from astroid import nodes +from __future__ import annotations + +from typing import TYPE_CHECKING from pylint import checkers, interfaces from pylint.checkers import utils -from pylint.lint import PyLinter + +if TYPE_CHECKING: + from astroid import nodes + + from pylint.lint import PyLinter class EqWithoutHash(checkers.BaseChecker): diff --git a/pylint/extensions/mccabe.py b/pylint/extensions/mccabe.py index 9489f24d6c..03b1e1a8f5 100644 --- a/pylint/extensions/mccabe.py +++ b/pylint/extensions/mccabe.py @@ -6,8 +6,7 @@ from __future__ import annotations -from collections.abc import Sequence -from typing import TYPE_CHECKING, Any, TypeVar, Union +from typing import TYPE_CHECKING from astroid import nodes from mccabe import PathGraph as Mccabe_PathGraph @@ -18,31 +17,34 @@ from pylint.interfaces import HIGH if TYPE_CHECKING: + from collections.abc import Sequence + from typing import Any, TypeVar, Union + from pylint.lint import PyLinter -_StatementNodes = Union[ - nodes.Assert, - nodes.Assign, - nodes.AugAssign, - nodes.Delete, - nodes.Raise, - nodes.Yield, - nodes.Import, - nodes.Call, - nodes.Subscript, - nodes.Pass, - nodes.Continue, - nodes.Break, - nodes.Global, - nodes.Return, - nodes.Expr, - nodes.Await, -] - -_SubGraphNodes = Union[nodes.If, nodes.Try, nodes.For, nodes.While] -_AppendableNodeT = TypeVar( - "_AppendableNodeT", bound=Union[_StatementNodes, nodes.While, nodes.FunctionDef] -) + _StatementNodes = Union[ + nodes.Assert, + nodes.Assign, + nodes.AugAssign, + nodes.Delete, + nodes.Raise, + nodes.Yield, + nodes.Import, + nodes.Call, + nodes.Subscript, + nodes.Pass, + nodes.Continue, + nodes.Break, + nodes.Global, + nodes.Return, + nodes.Expr, + nodes.Await, + ] + + _SubGraphNodes = Union[nodes.If, nodes.Try, nodes.For, nodes.While] + _AppendableNodeT = TypeVar( + "_AppendableNodeT", bound=Union[_StatementNodes, nodes.While, nodes.FunctionDef] + ) class PathGraph(Mccabe_PathGraph): # type: ignore[misc] diff --git a/pylint/extensions/overlapping_exceptions.py b/pylint/extensions/overlapping_exceptions.py index 8d35e4ce32..fd1a312b4f 100644 --- a/pylint/extensions/overlapping_exceptions.py +++ b/pylint/extensions/overlapping_exceptions.py @@ -6,16 +6,20 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING import astroid -from astroid import nodes, util +from astroid import util from pylint import checkers from pylint.checkers import utils from pylint.checkers.exceptions import _annotated_unpack_infer if TYPE_CHECKING: + from typing import Any + + from astroid import nodes + from pylint.lint import PyLinter diff --git a/pylint/extensions/redefined_loop_name.py b/pylint/extensions/redefined_loop_name.py index d03b80be38..b7d5ea833d 100644 --- a/pylint/extensions/redefined_loop_name.py +++ b/pylint/extensions/redefined_loop_name.py @@ -6,12 +6,16 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from astroid import nodes from pylint import checkers from pylint.checkers import utils from pylint.interfaces import HIGH -from pylint.lint import PyLinter + +if TYPE_CHECKING: + from pylint.lint import PyLinter class RedefinedLoopNameChecker(checkers.BaseChecker): diff --git a/pylint/extensions/while_used.py b/pylint/extensions/while_used.py index da1f9d59c2..ecfc9b67f5 100644 --- a/pylint/extensions/while_used.py +++ b/pylint/extensions/while_used.py @@ -8,12 +8,12 @@ from typing import TYPE_CHECKING -from astroid import nodes - from pylint.checkers import BaseChecker from pylint.checkers.utils import only_required_for_messages if TYPE_CHECKING: + from astroid import nodes + from pylint.lint import PyLinter diff --git a/pylint/graph.py b/pylint/graph.py index 4112fadfa1..445ab61209 100644 --- a/pylint/graph.py +++ b/pylint/graph.py @@ -14,8 +14,11 @@ import shutil import subprocess import tempfile -from collections.abc import Sequence -from typing import Any +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from typing import Any + from collections.abc import Sequence def target_info_from_filename(filename: str) -> tuple[str, str, str]: diff --git a/pylint/lint/base_options.py b/pylint/lint/base_options.py index 59a811d9c6..1c91f3fc8e 100644 --- a/pylint/lint/base_options.py +++ b/pylint/lint/base_options.py @@ -28,9 +28,9 @@ _MessageHelpAction, _OutputFormatAction, ) -from pylint.typing import Options if TYPE_CHECKING: + from pylint.typing import Options from pylint.lint import PyLinter, Run diff --git a/pylint/lint/expand_modules.py b/pylint/lint/expand_modules.py index f40bdeea5b..164d8395d5 100644 --- a/pylint/lint/expand_modules.py +++ b/pylint/lint/expand_modules.py @@ -6,13 +6,16 @@ import os import sys -from collections.abc import Sequence from pathlib import Path -from re import Pattern +from typing import TYPE_CHECKING from astroid import modutils -from pylint.typing import ErrorDescriptionDict, ModuleDescriptionDict +if TYPE_CHECKING: + from re import Pattern + from collections.abc import Sequence + + from pylint.typing import ErrorDescriptionDict, ModuleDescriptionDict def _modpath_from_file(filename: str, is_namespace: bool, path: list[str]) -> list[str]: diff --git a/pylint/lint/message_state_handler.py b/pylint/lint/message_state_handler.py index 5c4498af96..2892369eac 100644 --- a/pylint/lint/message_state_handler.py +++ b/pylint/lint/message_state_handler.py @@ -6,7 +6,7 @@ import tokenize from collections import defaultdict -from typing import TYPE_CHECKING, Literal +from typing import TYPE_CHECKING from pylint import exceptions, interfaces from pylint.constants import ( @@ -17,8 +17,7 @@ MSG_TYPES_LONG, ) from pylint.interfaces import HIGH -from pylint.message import MessageDefinition -from pylint.typing import ManagedMessage, MessageDefinitionTuple +from pylint.typing import ManagedMessage from pylint.utils.pragma_parser import ( OPTION_PO, InvalidPragmaError, @@ -27,7 +26,11 @@ ) if TYPE_CHECKING: + from typing import Literal + from pylint.lint.pylinter import PyLinter + from pylint.message import MessageDefinition + from pylint.typing import MessageDefinitionTuple class _MessageStateHandler: diff --git a/pylint/lint/parallel.py b/pylint/lint/parallel.py index af381494c3..07710fb36c 100644 --- a/pylint/lint/parallel.py +++ b/pylint/lint/parallel.py @@ -6,16 +6,13 @@ import functools from collections import defaultdict -from collections.abc import Iterable, Sequence -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING import dill from pylint import reporters from pylint.lint.utils import _augment_sys_path -from pylint.message import Message -from pylint.typing import FileItem -from pylint.utils import LinterStats, merge_stats +from pylint.utils import merge_stats try: import multiprocessing @@ -28,7 +25,13 @@ ProcessPoolExecutor = None # type: ignore[assignment,misc] if TYPE_CHECKING: + from typing import Any + from collections.abc import Iterable, Sequence + from pylint.lint import PyLinter + from pylint.message import Message + from pylint.typing import FileItem + from pylint.utils import LinterStats # PyLinter object used by worker processes when checking files using parallel mode # should only be used by the worker processes diff --git a/pylint/lint/pylinter.py b/pylint/lint/pylinter.py index cc4605b96a..6156f6b2ac 100644 --- a/pylint/lint/pylinter.py +++ b/pylint/lint/pylinter.py @@ -4,8 +4,6 @@ from __future__ import annotations -import argparse -import collections import contextlib import functools import os @@ -13,15 +11,11 @@ import tokenize import traceback from collections import defaultdict -from collections.abc import Callable, Iterable, Iterator, Sequence from io import TextIOWrapper from pathlib import Path -from re import Pattern -from types import ModuleType -from typing import Any, Protocol +from typing import TYPE_CHECKING, Protocol import astroid -from astroid import nodes from pylint import checkers, exceptions, interfaces, reporters from pylint.checkers.base_checker import BaseChecker @@ -52,21 +46,35 @@ get_fatal_error_message, prepare_crash_report, ) -from pylint.message import Message, MessageDefinition, MessageDefinitionStore +from pylint.message import Message, MessageDefinitionStore from pylint.reporters.base_reporter import BaseReporter from pylint.reporters.text import TextReporter from pylint.reporters.ureports import nodes as report_nodes from pylint.typing import ( - DirectoryNamespaceDict, FileItem, - ManagedMessage, - MessageDefinitionTuple, MessageLocationTuple, - ModuleDescriptionDict, - Options, ) from pylint.utils import ASTWalker, FileState, LinterStats, utils +if TYPE_CHECKING: + import argparse + from re import Pattern + from types import ModuleType + from typing import Any + from collections.abc import Callable, Iterable, Iterator, Sequence + + from astroid import nodes + + from pylint.message import MessageDefinition + from pylint.typing import ( + DirectoryNamespaceDict, + ManagedMessage, + MessageDefinitionTuple, + ModuleDescriptionDict, + Options, + ) + + MANAGER = astroid.MANAGER @@ -255,7 +263,7 @@ class PyLinter( _ArgumentsManager, _MessageStateHandler, reporters.ReportsHandlerMixIn, - checkers.BaseChecker, + BaseChecker, ): """Lint Python modules using external checkers. @@ -307,9 +315,7 @@ def __init__( """Dictionary of possible but non-initialized reporters.""" # Attributes for checkers and plugins - self._checkers: defaultdict[str, list[checkers.BaseChecker]] = ( - collections.defaultdict(list) - ) + self._checkers: defaultdict[str, list[BaseChecker]] = defaultdict(list) """Dictionary of registered and initialized checkers.""" self._dynamic_plugins: dict[str, ModuleType | ModuleNotFoundError | bool] = {} """Set of loaded plugin names.""" @@ -331,7 +337,7 @@ def __init__( self._error_mode = False reporters.ReportsHandlerMixIn.__init__(self) - checkers.BaseChecker.__init__(self, self) + BaseChecker.__init__(self, self) # provided reports self.reports = ( ("RP0001", "Messages by category", report_total_messages_stats), @@ -482,7 +488,7 @@ def report_order(self) -> list[BaseChecker]: # checkers manipulation methods ############################################ - def register_checker(self, checker: checkers.BaseChecker) -> None: + def register_checker(self, checker: BaseChecker) -> None: """This method auto registers the checker.""" self._checkers[checker.name].append(checker) for r_id, r_title, r_cb in checker.reports: @@ -1313,4 +1319,4 @@ def _emit_stashed_messages(self) -> None: line=0, confidence=HIGH, ) - self._stashed_messages = collections.defaultdict(list) + self._stashed_messages = defaultdict(list) diff --git a/pylint/lint/report_functions.py b/pylint/lint/report_functions.py index 72734e4688..c4ba35c4fb 100644 --- a/pylint/lint/report_functions.py +++ b/pylint/lint/report_functions.py @@ -4,14 +4,17 @@ from __future__ import annotations -import collections from collections import defaultdict from typing import cast +from typing import TYPE_CHECKING from pylint import checkers, exceptions -from pylint.reporters.ureports.nodes import Section, Table +from pylint.reporters.ureports.nodes import Table from pylint.typing import MessageTypesFullName -from pylint.utils import LinterStats + +if TYPE_CHECKING: + from pylint.utils import LinterStats + from pylint.reporters.ureports.nodes import Section def report_total_messages_stats( @@ -54,7 +57,7 @@ def report_messages_by_module_stats( if len(module_stats) == 1: # don't print this report when we are analysing a single module raise exceptions.EmptyReportError() - by_mod: defaultdict[str, dict[str, int | float]] = collections.defaultdict(dict) + by_mod: defaultdict[str, dict[str, int | float]] = defaultdict(dict) for m_type in ("fatal", "error", "warning", "refactor", "convention"): m_type = cast(MessageTypesFullName, m_type) total = stats.get_global_message_count(m_type) diff --git a/pylint/lint/run.py b/pylint/lint/run.py index 2bbbb337b9..acc8576769 100644 --- a/pylint/lint/run.py +++ b/pylint/lint/run.py @@ -7,9 +7,8 @@ import os import sys import warnings -from collections.abc import Sequence from pathlib import Path -from typing import ClassVar +from typing import TYPE_CHECKING from pylint import config from pylint.checkers.utils import clear_lru_caches @@ -23,7 +22,13 @@ from pylint.constants import full_version from pylint.lint.base_options import _make_run_options from pylint.lint.pylinter import MANAGER, PyLinter -from pylint.reporters.base_reporter import BaseReporter + +if TYPE_CHECKING: + from typing import ClassVar + from collections.abc import Sequence + + from pylint.reporters.base_reporter import BaseReporter + try: import multiprocessing diff --git a/pylint/lint/utils.py b/pylint/lint/utils.py index c5487a8c6d..9064408dd1 100644 --- a/pylint/lint/utils.py +++ b/pylint/lint/utils.py @@ -8,12 +8,15 @@ import platform import sys import traceback -from collections.abc import Iterator, Sequence from datetime import datetime from pathlib import Path +from typing import TYPE_CHECKING from pylint.constants import PYLINT_HOME, full_version +if TYPE_CHECKING: + from collections.abc import Iterator, Sequence + def prepare_crash_report(ex: Exception, filepath: str, crash_file_path: str) -> Path: issue_template_path = ( diff --git a/pylint/message/message.py b/pylint/message/message.py index 6ee8c5f789..62e56d971b 100644 --- a/pylint/message/message.py +++ b/pylint/message/message.py @@ -5,11 +5,15 @@ from __future__ import annotations from dataclasses import asdict, dataclass +from typing import TYPE_CHECKING from pylint.constants import MSG_TYPES -from pylint.interfaces import UNDEFINED, Confidence +from pylint.interfaces import UNDEFINED from pylint.typing import MessageLocationTuple +if TYPE_CHECKING: + from pylint.interfaces import Confidence + @dataclass(unsafe_hash=True) class Message: # pylint: disable=too-many-instance-attributes diff --git a/pylint/message/message_definition.py b/pylint/message/message_definition.py index a318cc83f7..62e866470b 100644 --- a/pylint/message/message_definition.py +++ b/pylint/message/message_definition.py @@ -4,16 +4,17 @@ from __future__ import annotations -import sys from typing import TYPE_CHECKING -from astroid import nodes - from pylint.constants import _SCOPE_EXEMPT, MSG_TYPES, WarningScope from pylint.exceptions import InvalidMessageError from pylint.utils import normalize_text if TYPE_CHECKING: + import sys + + from astroid import nodes + from pylint.checkers import BaseChecker diff --git a/pylint/message/message_definition_store.py b/pylint/message/message_definition_store.py index d56308541a..8ddd651fe1 100644 --- a/pylint/message/message_definition_store.py +++ b/pylint/message/message_definition_store.py @@ -6,16 +6,17 @@ import collections import sys -from collections.abc import Sequence, ValuesView from functools import cache from typing import TYPE_CHECKING from pylint.exceptions import UnknownMessageError -from pylint.message.message_definition import MessageDefinition from pylint.message.message_id_store import MessageIdStore if TYPE_CHECKING: + from collections.abc import Sequence, ValuesView + from pylint.checkers import BaseChecker + from pylint.message.message_definition import MessageDefinition class MessageDefinitionStore: diff --git a/pylint/message/message_id_store.py b/pylint/message/message_id_store.py index b07a9c3f70..4046be1d4a 100644 --- a/pylint/message/message_id_store.py +++ b/pylint/message/message_id_store.py @@ -4,7 +4,7 @@ from __future__ import annotations -from typing import NoReturn +from typing import TYPE_CHECKING from pylint.exceptions import ( DeletedMessageError, @@ -19,6 +19,9 @@ is_moved_symbol, ) +if TYPE_CHECKING: + from typing import NoReturn + class MessageIdStore: """The MessageIdStore store MessageId and make sure that there is a 1-1 relation diff --git a/pylint/pyreverse/diadefslib.py b/pylint/pyreverse/diadefslib.py index 59a2f59560..bd3e42c25f 100644 --- a/pylint/pyreverse/diadefslib.py +++ b/pylint/pyreverse/diadefslib.py @@ -6,18 +6,22 @@ from __future__ import annotations -import argparse -from collections.abc import Generator -from typing import Any +from typing import TYPE_CHECKING import astroid from astroid import nodes from astroid.modutils import is_stdlib_module from pylint.pyreverse.diagrams import ClassDiagram, PackageDiagram -from pylint.pyreverse.inspector import Linker, Project from pylint.pyreverse.utils import LocalsVisitor +if TYPE_CHECKING: + import argparse + from collections.abc import Generator + from typing import Any + + from pylint.pyreverse.inspector import Linker, Project + # diagram generators ########################################################## diff --git a/pylint/pyreverse/diagrams.py b/pylint/pyreverse/diagrams.py index 278102cab8..0b13d2e7df 100644 --- a/pylint/pyreverse/diagrams.py +++ b/pylint/pyreverse/diagrams.py @@ -6,8 +6,7 @@ from __future__ import annotations -from collections.abc import Iterable -from typing import Any +from typing import TYPE_CHECKING import astroid from astroid import nodes, util @@ -15,6 +14,10 @@ from pylint.checkers.utils import decorated_with_property, in_type_checking_block from pylint.pyreverse.utils import FilterMixIn +if TYPE_CHECKING: + from collections.abc import Iterable + from typing import Any + class Figure: """Base class for counter handling.""" diff --git a/pylint/pyreverse/dot_printer.py b/pylint/pyreverse/dot_printer.py index 4baed6c3c2..43adda4983 100644 --- a/pylint/pyreverse/dot_printer.py +++ b/pylint/pyreverse/dot_printer.py @@ -11,12 +11,14 @@ import tempfile from enum import Enum from pathlib import Path - -from astroid import nodes +from typing import TYPE_CHECKING from pylint.pyreverse.printer import EdgeType, Layout, NodeProperties, NodeType, Printer from pylint.pyreverse.utils import get_annotation_label +if TYPE_CHECKING: + from astroid import nodes + class HTMLLabels(Enum): LINEBREAK_LEFT = '<br ALIGN="LEFT"/>' diff --git a/pylint/pyreverse/main.py b/pylint/pyreverse/main.py index 3ba0b6c77d..ed014ea0ae 100644 --- a/pylint/pyreverse/main.py +++ b/pylint/pyreverse/main.py @@ -7,8 +7,7 @@ from __future__ import annotations import sys -from collections.abc import Sequence -from typing import NoReturn +from typing import TYPE_CHECKING from pylint import constants from pylint.config.arguments_manager import _ArgumentsManager @@ -23,7 +22,13 @@ check_if_graphviz_supports_format, insert_default_options, ) -from pylint.typing import Options + +if TYPE_CHECKING: + from collections.abc import Sequence + from typing import NoReturn + + from pylint.typing import Options + DIRECTLY_SUPPORTED_FORMATS = ( "dot", diff --git a/pylint/pyreverse/printer.py b/pylint/pyreverse/printer.py index caa7917ca0..1c31a5ef02 100644 --- a/pylint/pyreverse/printer.py +++ b/pylint/pyreverse/printer.py @@ -9,11 +9,13 @@ from abc import ABC, abstractmethod from enum import Enum from typing import NamedTuple - -from astroid import nodes +from typing import TYPE_CHECKING from pylint.pyreverse.utils import get_annotation_label +if TYPE_CHECKING: + from astroid import nodes + class NodeType(Enum): CLASS = "class" diff --git a/pylint/pyreverse/printer_factory.py b/pylint/pyreverse/printer_factory.py index fdbe480ed5..30d3d7f47f 100644 --- a/pylint/pyreverse/printer_factory.py +++ b/pylint/pyreverse/printer_factory.py @@ -4,10 +4,15 @@ from __future__ import annotations +from typing import TYPE_CHECKING + from pylint.pyreverse.dot_printer import DotPrinter from pylint.pyreverse.mermaidjs_printer import HTMLMermaidJSPrinter, MermaidJSPrinter from pylint.pyreverse.plantuml_printer import PlantUmlPrinter -from pylint.pyreverse.printer import Printer + +if TYPE_CHECKING: + from pylint.pyreverse.printer import Printer + filetype_to_printer: dict[str, type[Printer]] = { "plantuml": PlantUmlPrinter, diff --git a/pylint/pyreverse/utils.py b/pylint/pyreverse/utils.py index 5ad92d3231..b5c73935f5 100644 --- a/pylint/pyreverse/utils.py +++ b/pylint/pyreverse/utils.py @@ -11,14 +11,17 @@ import shutil import subprocess import sys -from collections.abc import Callable -from typing import TYPE_CHECKING, Any, Optional, Union +from typing import TYPE_CHECKING import astroid from astroid import nodes -from astroid.typing import InferenceResult if TYPE_CHECKING: + from collections.abc import Callable + from typing import Any, Optional, Union + + from astroid.typing import InferenceResult + from pylint.pyreverse.diagrams import ClassDiagram, PackageDiagram _CallbackT = Callable[ diff --git a/pylint/pyreverse/writer.py b/pylint/pyreverse/writer.py index 093c459598..ca2ff7e063 100644 --- a/pylint/pyreverse/writer.py +++ b/pylint/pyreverse/writer.py @@ -6,25 +6,30 @@ from __future__ import annotations -import argparse import itertools import os from collections import defaultdict -from collections.abc import Iterable +from typing import TYPE_CHECKING from astroid import modutils, nodes -from pylint.pyreverse.diagrams import ( - ClassDiagram, - ClassEntity, - DiagramEntity, - PackageDiagram, - PackageEntity, -) -from pylint.pyreverse.printer import EdgeType, NodeProperties, NodeType, Printer +from pylint.pyreverse.diagrams import PackageDiagram +from pylint.pyreverse.printer import EdgeType, NodeProperties, NodeType from pylint.pyreverse.printer_factory import get_printer_for_filetype from pylint.pyreverse.utils import is_exception +if TYPE_CHECKING: + import argparse + from collections.abc import Iterable + + from pylint.pyreverse.diagrams import ( + ClassDiagram, + ClassEntity, + DiagramEntity, + PackageEntity, + ) + from pylint.pyreverse.printer import Printer + class DiagramWriter: """Base class for writing project diagrams.""" diff --git a/pylint/reporters/base_reporter.py b/pylint/reporters/base_reporter.py index d370b1910e..593e1a49f9 100644 --- a/pylint/reporters/base_reporter.py +++ b/pylint/reporters/base_reporter.py @@ -6,15 +6,17 @@ import os import sys -from typing import TYPE_CHECKING, TextIO +from typing import TYPE_CHECKING -from pylint.message import Message from pylint.reporters.ureports.nodes import Text -from pylint.utils import LinterStats if TYPE_CHECKING: + from typing import TextIO + from pylint.lint.pylinter import PyLinter + from pylint.message import Message from pylint.reporters.ureports.nodes import Section + from pylint.utils import LinterStats class BaseReporter: diff --git a/pylint/reporters/multi_reporter.py b/pylint/reporters/multi_reporter.py index 0c27293b7a..9d8b44d887 100644 --- a/pylint/reporters/multi_reporter.py +++ b/pylint/reporters/multi_reporter.py @@ -5,17 +5,18 @@ from __future__ import annotations import os -from collections.abc import Callable from copy import copy -from typing import TYPE_CHECKING, TextIO - -from pylint.message import Message -from pylint.reporters.base_reporter import BaseReporter -from pylint.utils import LinterStats +from typing import TYPE_CHECKING if TYPE_CHECKING: + from collections.abc import Callable + from typing import TextIO + from pylint.lint import PyLinter + from pylint.message import Message from pylint.reporters.ureports.nodes import Section + from pylint.reporters.base_reporter import BaseReporter + from pylint.utils import LinterStats class MultiReporter: diff --git a/pylint/reporters/reports_handler_mix_in.py b/pylint/reporters/reports_handler_mix_in.py index 071879ca1e..2f827ffacf 100644 --- a/pylint/reporters/reports_handler_mix_in.py +++ b/pylint/reporters/reports_handler_mix_in.py @@ -5,21 +5,23 @@ from __future__ import annotations import collections -from collections.abc import MutableSequence from typing import TYPE_CHECKING from pylint.exceptions import EmptyReportError from pylint.reporters.ureports.nodes import Section from pylint.typing import ReportsCallable -from pylint.utils import LinterStats if TYPE_CHECKING: + from collections.abc import MutableSequence + from pylint.checkers import BaseChecker from pylint.lint.pylinter import PyLinter + from pylint.utils import LinterStats -ReportsDict = collections.defaultdict[ - "BaseChecker", list[tuple[str, str, ReportsCallable]] -] + ReportsDict = collections.defaultdict[ + BaseChecker, + list[tuple[str, str, ReportsCallable]], + ] class ReportsHandlerMixIn: diff --git a/pylint/reporters/text.py b/pylint/reporters/text.py index 894207ad7d..2685f93e9c 100644 --- a/pylint/reporters/text.py +++ b/pylint/reporters/text.py @@ -15,13 +15,15 @@ import sys import warnings from dataclasses import asdict, fields -from typing import TYPE_CHECKING, NamedTuple, TextIO +from typing import TYPE_CHECKING, NamedTuple from pylint.message import Message from pylint.reporters import BaseReporter from pylint.reporters.ureports.text_writer import TextWriter if TYPE_CHECKING: + from typing import TextIO + from pylint.lint import PyLinter from pylint.reporters.ureports.nodes import Section diff --git a/pylint/reporters/ureports/base_writer.py b/pylint/reporters/ureports/base_writer.py index 9a12123cbd..3cd9bfb682 100644 --- a/pylint/reporters/ureports/base_writer.py +++ b/pylint/reporters/ureports/base_writer.py @@ -11,11 +11,13 @@ from __future__ import annotations import sys -from collections.abc import Iterator from io import StringIO -from typing import TYPE_CHECKING, TextIO +from typing import TYPE_CHECKING if TYPE_CHECKING: + from collections.abc import Iterator + from typing import TextIO + from pylint.reporters.ureports.nodes import ( BaseLayout, EvaluationSection, diff --git a/pylint/reporters/ureports/nodes.py b/pylint/reporters/ureports/nodes.py index c414865121..72c87781d2 100644 --- a/pylint/reporters/ureports/nodes.py +++ b/pylint/reporters/ureports/nodes.py @@ -9,14 +9,17 @@ from __future__ import annotations -from collections.abc import Callable, Iterable, Iterator -from typing import Any, TypeVar +from typing import TYPE_CHECKING -from pylint.reporters.ureports.base_writer import BaseWriter +if TYPE_CHECKING: + from collections.abc import Callable, Iterable, Iterator + from typing import Any, TypeVar -_T = TypeVar("_T") -_VNodeT = TypeVar("_VNodeT", bound="VNode") -VisitLeaveFunction = Callable[[_T, Any, Any], None] + from pylint.reporters.ureports.base_writer import BaseWriter + + _T = TypeVar("_T") + _VNodeT = TypeVar("_VNodeT", bound="VNode") + VisitLeaveFunction = Callable[[_T, Any, Any], None] class VNode: diff --git a/pylint/testutils/_primer/package_to_lint.py b/pylint/testutils/_primer/package_to_lint.py index fb65a90ad9..ca435c4f5e 100644 --- a/pylint/testutils/_primer/package_to_lint.py +++ b/pylint/testutils/_primer/package_to_lint.py @@ -6,12 +6,16 @@ import logging from pathlib import Path -from typing import Literal +from typing import TYPE_CHECKING from git import GitCommandError from git.cmd import Git from git.repo import Repo +if TYPE_CHECKING: + from typing import Literal + + PRIMER_DIRECTORY_PATH = Path("tests") / ".pylint_primer_tests" diff --git a/pylint/testutils/_primer/primer.py b/pylint/testutils/_primer/primer.py index 5fd83f442e..28089cfdeb 100644 --- a/pylint/testutils/_primer/primer.py +++ b/pylint/testutils/_primer/primer.py @@ -7,14 +7,18 @@ import argparse import json import sys -from pathlib import Path +from typing import TYPE_CHECKING -from pylint.testutils._primer import PackageToLint -from pylint.testutils._primer.primer_command import PrimerCommand from pylint.testutils._primer.primer_compare_command import CompareCommand from pylint.testutils._primer.primer_prepare_command import PrepareCommand from pylint.testutils._primer.primer_run_command import RunCommand +if TYPE_CHECKING: + from pathlib import Path + + from pylint.testutils._primer import PackageToLint + from pylint.testutils._primer.primer_command import PrimerCommand + class Primer: """Main class to handle priming of packages.""" diff --git a/pylint/testutils/_primer/primer_command.py b/pylint/testutils/_primer/primer_command.py index 01c2bed368..adf434a7dc 100644 --- a/pylint/testutils/_primer/primer_command.py +++ b/pylint/testutils/_primer/primer_command.py @@ -5,12 +5,14 @@ from __future__ import annotations import abc -import argparse -from pathlib import Path -from typing import TypedDict +from typing import TypedDict, TYPE_CHECKING -from pylint.reporters.json_reporter import OldJsonExport -from pylint.testutils._primer import PackageToLint +if TYPE_CHECKING: + import argparse + from pathlib import Path + + from pylint.reporters.json_reporter import OldJsonExport + from pylint.testutils._primer import PackageToLint class PackageData(TypedDict): diff --git a/pylint/testutils/_primer/primer_compare_command.py b/pylint/testutils/_primer/primer_compare_command.py index 7b245b9e19..c36384b631 100644 --- a/pylint/testutils/_primer/primer_compare_command.py +++ b/pylint/testutils/_primer/primer_compare_command.py @@ -4,15 +4,20 @@ from __future__ import annotations import json -from pathlib import Path, PurePosixPath +from pathlib import PurePosixPath +from typing import TYPE_CHECKING -from pylint.reporters.json_reporter import OldJsonExport from pylint.testutils._primer.primer_command import ( PackageData, - PackageMessages, PrimerCommand, ) +if TYPE_CHECKING: + from pathlib import Path + from pylint.reporters.json_reporter import OldJsonExport + from pylint.testutils._primer.primer_command import PackageMessages + + MAX_GITHUB_COMMENT_LENGTH = 65536 diff --git a/pylint/testutils/_primer/primer_run_command.py b/pylint/testutils/_primer/primer_run_command.py index 96a1440e7c..8efbd738d0 100644 --- a/pylint/testutils/_primer/primer_run_command.py +++ b/pylint/testutils/_primer/primer_run_command.py @@ -8,19 +8,24 @@ import sys import warnings from io import StringIO +from typing import TYPE_CHECKING from git.repo import Repo from pylint.lint import Run -from pylint.message import Message -from pylint.reporters.json_reporter import JSONReporter, OldJsonExport -from pylint.testutils._primer.package_to_lint import PackageToLint +from pylint.reporters.json_reporter import JSONReporter from pylint.testutils._primer.primer_command import ( PackageData, - PackageMessages, PrimerCommand, ) +if TYPE_CHECKING: + from pylint.message import Message + from pylint.reporters.json_reporter import OldJsonExport + from pylint.testutils._primer.package_to_lint import PackageToLint + from pylint.testutils._primer.primer_command import PackageMessages + + GITHUB_CRASH_TEMPLATE_LOCATION = "/home/runner/.cache" CRASH_TEMPLATE_INTRO = "There is a pre-filled template" diff --git a/pylint/testutils/_run.py b/pylint/testutils/_run.py index f42cb8d6a4..85ae0b673b 100644 --- a/pylint/testutils/_run.py +++ b/pylint/testutils/_run.py @@ -9,12 +9,16 @@ from __future__ import annotations -from collections.abc import Sequence +from typing import TYPE_CHECKING from pylint.lint import Run as LintRun -from pylint.reporters.base_reporter import BaseReporter from pylint.testutils.lint_module_test import PYLINTRC +if TYPE_CHECKING: + from collections.abc import Sequence + + from pylint.reporters.base_reporter import BaseReporter + def _add_rcfile_default_pylintrc(args: list[str]) -> list[str]: """Add a default pylintrc with the rcfile option in a list of pylint args.""" diff --git a/pylint/testutils/checker_test_case.py b/pylint/testutils/checker_test_case.py index 951f38c0b9..85115cd178 100644 --- a/pylint/testutils/checker_test_case.py +++ b/pylint/testutils/checker_test_case.py @@ -5,16 +5,20 @@ from __future__ import annotations import contextlib -from collections.abc import Generator, Iterator -from typing import Any - -from astroid import nodes +from typing import TYPE_CHECKING from pylint.testutils.global_test_linter import linter -from pylint.testutils.output_line import MessageTest from pylint.testutils.unittest_linter import UnittestLinter from pylint.utils import ASTWalker +if TYPE_CHECKING: + from collections.abc import Generator, Iterator + from typing import Any + + from astroid import nodes + + from pylint.testutils.output_line import MessageTest + class CheckerTestCase: """A base testcase class for unit testing individual checker classes.""" diff --git a/pylint/testutils/decorator.py b/pylint/testutils/decorator.py index c206921329..69e2f8ea6c 100644 --- a/pylint/testutils/decorator.py +++ b/pylint/testutils/decorator.py @@ -5,10 +5,13 @@ from __future__ import annotations import functools -from collections.abc import Callable -from typing import Any +from typing import TYPE_CHECKING -from pylint.testutils.checker_test_case import CheckerTestCase +if TYPE_CHECKING: + from collections.abc import Callable + from typing import Any + + from pylint.testutils.checker_test_case import CheckerTestCase def set_config(**kwargs: Any) -> Callable[[Callable[..., None]], Callable[..., None]]: diff --git a/pylint/testutils/functional/find_functional_tests.py b/pylint/testutils/functional/find_functional_tests.py index f2e636687b..cb06e12dd0 100644 --- a/pylint/testutils/functional/find_functional_tests.py +++ b/pylint/testutils/functional/find_functional_tests.py @@ -5,11 +5,15 @@ from __future__ import annotations import os -from collections.abc import Iterator from pathlib import Path +from typing import TYPE_CHECKING from pylint.testutils.functional.test_file import FunctionalTestFile +if TYPE_CHECKING: + from collections.abc import Iterator + + REASONABLY_DISPLAYABLE_VERTICALLY = 49 """'Wet finger' number of files that are reasonable to display by an IDE. diff --git a/pylint/testutils/functional/lint_module_output_update.py b/pylint/testutils/functional/lint_module_output_update.py index 38ed465aad..aaf5019651 100644 --- a/pylint/testutils/functional/lint_module_output_update.py +++ b/pylint/testutils/functional/lint_module_output_update.py @@ -6,9 +6,13 @@ import csv import os +from typing import TYPE_CHECKING -from pylint.testutils.lint_module_test import LintModuleTest, MessageCounter -from pylint.testutils.output_line import OutputLine +from pylint.testutils.lint_module_test import LintModuleTest + +if TYPE_CHECKING: + from pylint.testutils.lint_module_test import MessageCounter + from pylint.testutils.output_line import OutputLine class LintModuleOutputUpdate(LintModuleTest): diff --git a/pylint/testutils/functional/test_file.py b/pylint/testutils/functional/test_file.py index 37ba3a5fc6..223c890230 100644 --- a/pylint/testutils/functional/test_file.py +++ b/pylint/testutils/functional/test_file.py @@ -5,9 +5,11 @@ from __future__ import annotations import configparser -from collections.abc import Callable from os.path import basename, exists, join -from typing import TypedDict +from typing import TypedDict, TYPE_CHECKING + +if TYPE_CHECKING: + from collections.abc import Callable def parse_python_version(ver_str: str) -> tuple[int, ...]: diff --git a/pylint/testutils/lint_module_test.py b/pylint/testutils/lint_module_test.py index 37839c8908..efd676bf55 100644 --- a/pylint/testutils/lint_module_test.py +++ b/pylint/testutils/lint_module_test.py @@ -11,27 +11,33 @@ from collections import Counter from io import StringIO from pathlib import Path -from typing import TextIO +from typing import TYPE_CHECKING import pytest -from _pytest.config import Config from pylint import checkers from pylint.config.config_initialization import _config_initialization from pylint.lint import PyLinter -from pylint.message.message import Message from pylint.testutils.constants import _EXPECTED_RE, _OPERATORS, UPDATE_OPTION # need to import from functional.test_file to avoid cyclic import from pylint.testutils.functional.test_file import ( - FunctionalTestFile, NoFileError, parse_python_version, ) from pylint.testutils.output_line import OutputLine from pylint.testutils.reporter_for_tests import FunctionalTestReporter -MessageCounter = Counter[tuple[int, str]] +if TYPE_CHECKING: + from typing import TextIO + + from _pytest.config import Config + + from pylint.message.message import Message + from pylint.testutils.functional.test_file import FunctionalTestFile + + MessageCounter = Counter[tuple[int, str]] + PYLINTRC = Path(__file__).parent / "testing_pylintrc" diff --git a/pylint/testutils/output_line.py b/pylint/testutils/output_line.py index fbe5b3bbce..e79164a4c3 100644 --- a/pylint/testutils/output_line.py +++ b/pylint/testutils/output_line.py @@ -4,15 +4,20 @@ from __future__ import annotations -from collections.abc import Sequence -from typing import Any, NamedTuple, TypeVar +from typing import TYPE_CHECKING, NamedTuple -from astroid import nodes +from pylint.interfaces import UNDEFINED -from pylint.interfaces import UNDEFINED, Confidence -from pylint.message.message import Message +if TYPE_CHECKING: + from collections.abc import Sequence + from typing import Any, TypeVar -_T = TypeVar("_T") + from astroid import nodes + + from pylint.interfaces import Confidence + from pylint.message.message import Message + + _T = TypeVar("_T") class MessageTest(NamedTuple): diff --git a/pylint/testutils/pyreverse.py b/pylint/testutils/pyreverse.py index 115eda416a..abae9f9639 100644 --- a/pylint/testutils/pyreverse.py +++ b/pylint/testutils/pyreverse.py @@ -7,11 +7,13 @@ import argparse import configparser import shlex -from pathlib import Path -from typing import NamedTuple, TypedDict +from typing import TYPE_CHECKING, NamedTuple, TypedDict from pylint.pyreverse.main import DEFAULT_COLOR_PALETTE +if TYPE_CHECKING: + from pathlib import Path + # This class could and should be replaced with a simple dataclass when support for Python < 3.7 is dropped. # A NamedTuple is not possible as some tests need to modify attributes during the test. diff --git a/pylint/testutils/reporter_for_tests.py b/pylint/testutils/reporter_for_tests.py index d3c06eecd2..648a3b6f28 100644 --- a/pylint/testutils/reporter_for_tests.py +++ b/pylint/testutils/reporter_for_tests.py @@ -8,10 +8,10 @@ from os import getcwd, sep from typing import TYPE_CHECKING -from pylint.message import Message from pylint.reporters import BaseReporter if TYPE_CHECKING: + from pylint.message import Message from pylint.reporters.ureports.nodes import Section diff --git a/pylint/testutils/tokenize_str.py b/pylint/testutils/tokenize_str.py index dc9ada72a9..9b822ff40c 100644 --- a/pylint/testutils/tokenize_str.py +++ b/pylint/testutils/tokenize_str.py @@ -6,7 +6,10 @@ import tokenize from io import StringIO -from tokenize import TokenInfo +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from tokenize import TokenInfo def _tokenize_str(code: str) -> list[TokenInfo]: diff --git a/pylint/testutils/unittest_linter.py b/pylint/testutils/unittest_linter.py index a19afec568..7c05cd8641 100644 --- a/pylint/testutils/unittest_linter.py +++ b/pylint/testutils/unittest_linter.py @@ -6,14 +6,19 @@ from __future__ import annotations -from typing import Any, Literal +from typing import TYPE_CHECKING -from astroid import nodes - -from pylint.interfaces import UNDEFINED, Confidence +from pylint.interfaces import UNDEFINED from pylint.lint import PyLinter from pylint.testutils.output_line import MessageTest +if TYPE_CHECKING: + from typing import Any, Literal + + from astroid import nodes + + from pylint.interfaces import Confidence + class UnittestLinter(PyLinter): """A fake linter class to capture checker messages.""" diff --git a/pylint/testutils/utils.py b/pylint/testutils/utils.py index 3036d1fd62..10a74d6069 100644 --- a/pylint/testutils/utils.py +++ b/pylint/testutils/utils.py @@ -7,10 +7,13 @@ import contextlib import os import sys -from collections.abc import Generator, Iterator from copy import copy -from pathlib import Path -from typing import TextIO +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from collections.abc import Generator, Iterator + from pathlib import Path + from typing import TextIO @contextlib.contextmanager diff --git a/pylint/utils/docs.py b/pylint/utils/docs.py index ba592c4a45..4b7d91fabd 100644 --- a/pylint/utils/docs.py +++ b/pylint/utils/docs.py @@ -7,12 +7,14 @@ from __future__ import annotations import sys -from typing import TYPE_CHECKING, Any, TextIO +from typing import TYPE_CHECKING from pylint.constants import MAIN_CHECKER_NAME from pylint.utils.utils import get_rst_section, get_rst_title if TYPE_CHECKING: + from typing import Any, TextIO + from pylint.lint.pylinter import PyLinter diff --git a/pylint/utils/file_state.py b/pylint/utils/file_state.py index 45217bb7ea..142c8db3de 100644 --- a/pylint/utils/file_state.py +++ b/pylint/utils/file_state.py @@ -4,10 +4,8 @@ from __future__ import annotations -import collections from collections import defaultdict -from collections.abc import Iterator -from typing import TYPE_CHECKING, Literal +from typing import TYPE_CHECKING from astroid import nodes @@ -18,6 +16,9 @@ ) if TYPE_CHECKING: + from collections.abc import Iterator + from typing import Literal + from pylint.message import MessageDefinition, MessageDefinitionStore @@ -38,9 +39,7 @@ def __init__( self.base_name = modname self._module_msgs_state: MessageStateDict = {} self._raw_module_msgs_state: MessageStateDict = {} - self._ignored_msgs: defaultdict[tuple[str, int], set[int]] = ( - collections.defaultdict(set) - ) + self._ignored_msgs: defaultdict[tuple[str, int], set[int]] = defaultdict(set) self._suppression_mapping: dict[tuple[str, int], int] = {} self._module = node if node: diff --git a/pylint/utils/linterstats.py b/pylint/utils/linterstats.py index 53afbcfe21..97b0869a5e 100644 --- a/pylint/utils/linterstats.py +++ b/pylint/utils/linterstats.py @@ -4,9 +4,10 @@ from __future__ import annotations -from typing import Literal, TypedDict, cast +from typing import Literal, TypedDict, cast, TYPE_CHECKING -from pylint.typing import MessageTypesFullName +if TYPE_CHECKING: + from pylint.typing import MessageTypesFullName class BadNames(TypedDict): diff --git a/pylint/utils/pragma_parser.py b/pylint/utils/pragma_parser.py index 5e066653e4..aa6fc3448e 100644 --- a/pylint/utils/pragma_parser.py +++ b/pylint/utils/pragma_parser.py @@ -5,8 +5,10 @@ from __future__ import annotations import re -from collections.abc import Generator -from typing import NamedTuple +from typing import NamedTuple, TYPE_CHECKING + +if TYPE_CHECKING: + from collections.abc import Generator # Allow stopping after the first semicolon/hash encountered, # so that an option can be continued with the reasons diff --git a/pylint/utils/utils.py b/pylint/utils/utils.py index 9316bcb7aa..0f8554c4c8 100644 --- a/pylint/utils/utils.py +++ b/pylint/utils/utils.py @@ -14,7 +14,6 @@ HAS_ISORT_5 = False -import argparse import codecs import os import re @@ -23,18 +22,24 @@ import tokenize import warnings from collections import deque -from collections.abc import Iterable, Sequence -from io import BufferedReader, BytesIO from re import Pattern -from typing import TYPE_CHECKING, Any, Literal, TextIO, TypeVar, Union +from typing import TYPE_CHECKING, Literal, TypeVar, Union -from astroid import Module, modutils, nodes +from astroid import Module, modutils from pylint.constants import PY_EXTS -from pylint.typing import OptionDict if TYPE_CHECKING: + import argparse + from collections.abc import Iterable, Sequence + from io import BufferedReader, BytesIO + from typing import Any, TextIO + + from astroid import nodes + from pylint.lint import PyLinter + from pylint.typing import OptionDict + DEFAULT_LINE_LENGTH = 79 From 0977531464ecf62f94fea196cd5f6ce49bdbc56c 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 20:40:09 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pylint/checkers/base/docstring_checker.py | 1 - pylint/checkers/base_checker.py | 2 +- pylint/checkers/unicode.py | 5 ++--- pylint/config/arguments_manager.py | 4 ++-- pylint/config/arguments_provider.py | 4 ++-- pylint/config/config_initialization.py | 2 +- pylint/extensions/docstyle.py | 1 - pylint/graph.py | 2 +- pylint/lint/base_options.py | 2 +- pylint/lint/expand_modules.py | 2 +- pylint/lint/parallel.py | 2 +- pylint/lint/pylinter.py | 7 ++----- pylint/lint/report_functions.py | 5 ++--- pylint/lint/run.py | 2 +- pylint/pyreverse/printer.py | 3 +-- pylint/reporters/multi_reporter.py | 2 +- pylint/testutils/_primer/primer_command.py | 2 +- pylint/testutils/_primer/primer_compare_command.py | 6 ++---- pylint/testutils/_primer/primer_run_command.py | 5 +---- pylint/testutils/functional/test_file.py | 2 +- pylint/testutils/lint_module_test.py | 5 +---- pylint/utils/linterstats.py | 2 +- pylint/utils/pragma_parser.py | 2 +- 23 files changed, 27 insertions(+), 43 deletions(-) diff --git a/pylint/checkers/base/docstring_checker.py b/pylint/checkers/base/docstring_checker.py index 4e90e8c896..7b4ea92a64 100644 --- a/pylint/checkers/base/docstring_checker.py +++ b/pylint/checkers/base/docstring_checker.py @@ -9,7 +9,6 @@ import re from typing import TYPE_CHECKING - import astroid from astroid import nodes diff --git a/pylint/checkers/base_checker.py b/pylint/checkers/base_checker.py index 3d239aebc5..8598b35534 100644 --- a/pylint/checkers/base_checker.py +++ b/pylint/checkers/base_checker.py @@ -23,8 +23,8 @@ from astroid import nodes - from pylint.lint import PyLinter from pylint.interfaces import Confidence + from pylint.lint import PyLinter from pylint.typing import ( MessageDefinitionTuple, OptionDict, diff --git a/pylint/checkers/unicode.py b/pylint/checkers/unicode.py index 5ea226d0ec..02472adc30 100644 --- a/pylint/checkers/unicode.py +++ b/pylint/checkers/unicode.py @@ -19,16 +19,15 @@ from collections import OrderedDict from functools import lru_cache from tokenize import detect_encoding -from typing import TYPE_CHECKING -from typing import NamedTuple +from typing import TYPE_CHECKING, NamedTuple import pylint.interfaces import pylint.lint from pylint import checkers if TYPE_CHECKING: - from collections.abc import Iterable import io + from collections.abc import Iterable from typing import TypeVar from astroid import nodes diff --git a/pylint/config/arguments_manager.py b/pylint/config/arguments_manager.py index c85b5e4ca4..2d33e4b580 100644 --- a/pylint/config/arguments_manager.py +++ b/pylint/config/arguments_manager.py @@ -42,9 +42,9 @@ from collections.abc import Sequence from typing import Any, TextIO - from pylint.typing import DirectoryNamespaceDict, OptionDict - from pylint.config.arguments_provider import _ArgumentsProvider from pylint.config.argument import _Argument + from pylint.config.arguments_provider import _ArgumentsProvider + from pylint.typing import DirectoryNamespaceDict, OptionDict class _ArgumentsManager: diff --git a/pylint/config/arguments_provider.py b/pylint/config/arguments_provider.py index 731cf1ff2d..9f0ebd2ce5 100644 --- a/pylint/config/arguments_provider.py +++ b/pylint/config/arguments_provider.py @@ -9,11 +9,11 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Any from collections.abc import Iterator + from typing import Any - from pylint.typing import OptionDict, Options from pylint.config.arguments_manager import _ArgumentsManager + from pylint.typing import OptionDict, Options class _ArgumentsProvider: diff --git a/pylint/config/config_initialization.py b/pylint/config/config_initialization.py index e80da1ea11..c05573d1cc 100644 --- a/pylint/config/config_initialization.py +++ b/pylint/config/config_initialization.py @@ -19,8 +19,8 @@ from pylint.utils import utils if TYPE_CHECKING: - from pylint.lint import PyLinter from pylint import reporters + from pylint.lint import PyLinter def _config_initialization( diff --git a/pylint/extensions/docstyle.py b/pylint/extensions/docstyle.py index 4650398e85..701c64fcdb 100644 --- a/pylint/extensions/docstyle.py +++ b/pylint/extensions/docstyle.py @@ -7,7 +7,6 @@ import linecache from typing import TYPE_CHECKING - from pylint import checkers from pylint.checkers.utils import only_required_for_messages from pylint.interfaces import HIGH diff --git a/pylint/graph.py b/pylint/graph.py index 445ab61209..a041060ae2 100644 --- a/pylint/graph.py +++ b/pylint/graph.py @@ -17,8 +17,8 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Any from collections.abc import Sequence + from typing import Any def target_info_from_filename(filename: str) -> tuple[str, str, str]: diff --git a/pylint/lint/base_options.py b/pylint/lint/base_options.py index 1c91f3fc8e..a2c57c96f9 100644 --- a/pylint/lint/base_options.py +++ b/pylint/lint/base_options.py @@ -30,8 +30,8 @@ ) if TYPE_CHECKING: - from pylint.typing import Options from pylint.lint import PyLinter, Run + from pylint.typing import Options def _make_linter_options(linter: PyLinter) -> Options: diff --git a/pylint/lint/expand_modules.py b/pylint/lint/expand_modules.py index 164d8395d5..3c26717350 100644 --- a/pylint/lint/expand_modules.py +++ b/pylint/lint/expand_modules.py @@ -12,8 +12,8 @@ from astroid import modutils if TYPE_CHECKING: - from re import Pattern from collections.abc import Sequence + from re import Pattern from pylint.typing import ErrorDescriptionDict, ModuleDescriptionDict diff --git a/pylint/lint/parallel.py b/pylint/lint/parallel.py index 07710fb36c..73f7f67392 100644 --- a/pylint/lint/parallel.py +++ b/pylint/lint/parallel.py @@ -25,8 +25,8 @@ ProcessPoolExecutor = None # type: ignore[assignment,misc] if TYPE_CHECKING: - from typing import Any from collections.abc import Iterable, Sequence + from typing import Any from pylint.lint import PyLinter from pylint.message import Message diff --git a/pylint/lint/pylinter.py b/pylint/lint/pylinter.py index 6156f6b2ac..ee97671d85 100644 --- a/pylint/lint/pylinter.py +++ b/pylint/lint/pylinter.py @@ -50,18 +50,15 @@ from pylint.reporters.base_reporter import BaseReporter from pylint.reporters.text import TextReporter from pylint.reporters.ureports import nodes as report_nodes -from pylint.typing import ( - FileItem, - MessageLocationTuple, -) +from pylint.typing import FileItem, MessageLocationTuple from pylint.utils import ASTWalker, FileState, LinterStats, utils if TYPE_CHECKING: import argparse + from collections.abc import Callable, Iterable, Iterator, Sequence from re import Pattern from types import ModuleType from typing import Any - from collections.abc import Callable, Iterable, Iterator, Sequence from astroid import nodes diff --git a/pylint/lint/report_functions.py b/pylint/lint/report_functions.py index c4ba35c4fb..b49a255d67 100644 --- a/pylint/lint/report_functions.py +++ b/pylint/lint/report_functions.py @@ -5,16 +5,15 @@ from __future__ import annotations from collections import defaultdict -from typing import cast -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, cast from pylint import checkers, exceptions from pylint.reporters.ureports.nodes import Table from pylint.typing import MessageTypesFullName if TYPE_CHECKING: - from pylint.utils import LinterStats from pylint.reporters.ureports.nodes import Section + from pylint.utils import LinterStats def report_total_messages_stats( diff --git a/pylint/lint/run.py b/pylint/lint/run.py index acc8576769..8e70fc4ace 100644 --- a/pylint/lint/run.py +++ b/pylint/lint/run.py @@ -24,8 +24,8 @@ from pylint.lint.pylinter import MANAGER, PyLinter if TYPE_CHECKING: - from typing import ClassVar from collections.abc import Sequence + from typing import ClassVar from pylint.reporters.base_reporter import BaseReporter diff --git a/pylint/pyreverse/printer.py b/pylint/pyreverse/printer.py index 1c31a5ef02..5ab76bcf08 100644 --- a/pylint/pyreverse/printer.py +++ b/pylint/pyreverse/printer.py @@ -8,8 +8,7 @@ from abc import ABC, abstractmethod from enum import Enum -from typing import NamedTuple -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, NamedTuple from pylint.pyreverse.utils import get_annotation_label diff --git a/pylint/reporters/multi_reporter.py b/pylint/reporters/multi_reporter.py index 9d8b44d887..6f010414a5 100644 --- a/pylint/reporters/multi_reporter.py +++ b/pylint/reporters/multi_reporter.py @@ -14,8 +14,8 @@ from pylint.lint import PyLinter from pylint.message import Message - from pylint.reporters.ureports.nodes import Section from pylint.reporters.base_reporter import BaseReporter + from pylint.reporters.ureports.nodes import Section from pylint.utils import LinterStats diff --git a/pylint/testutils/_primer/primer_command.py b/pylint/testutils/_primer/primer_command.py index adf434a7dc..8e51dc05b9 100644 --- a/pylint/testutils/_primer/primer_command.py +++ b/pylint/testutils/_primer/primer_command.py @@ -5,7 +5,7 @@ from __future__ import annotations import abc -from typing import TypedDict, TYPE_CHECKING +from typing import TYPE_CHECKING, TypedDict if TYPE_CHECKING: import argparse diff --git a/pylint/testutils/_primer/primer_compare_command.py b/pylint/testutils/_primer/primer_compare_command.py index c36384b631..1ec02adac1 100644 --- a/pylint/testutils/_primer/primer_compare_command.py +++ b/pylint/testutils/_primer/primer_compare_command.py @@ -7,13 +7,11 @@ from pathlib import PurePosixPath from typing import TYPE_CHECKING -from pylint.testutils._primer.primer_command import ( - PackageData, - PrimerCommand, -) +from pylint.testutils._primer.primer_command import PackageData, PrimerCommand if TYPE_CHECKING: from pathlib import Path + from pylint.reporters.json_reporter import OldJsonExport from pylint.testutils._primer.primer_command import PackageMessages diff --git a/pylint/testutils/_primer/primer_run_command.py b/pylint/testutils/_primer/primer_run_command.py index 8efbd738d0..27ac98d77d 100644 --- a/pylint/testutils/_primer/primer_run_command.py +++ b/pylint/testutils/_primer/primer_run_command.py @@ -14,10 +14,7 @@ from pylint.lint import Run from pylint.reporters.json_reporter import JSONReporter -from pylint.testutils._primer.primer_command import ( - PackageData, - PrimerCommand, -) +from pylint.testutils._primer.primer_command import PackageData, PrimerCommand if TYPE_CHECKING: from pylint.message import Message diff --git a/pylint/testutils/functional/test_file.py b/pylint/testutils/functional/test_file.py index 223c890230..13831eeedf 100644 --- a/pylint/testutils/functional/test_file.py +++ b/pylint/testutils/functional/test_file.py @@ -6,7 +6,7 @@ import configparser from os.path import basename, exists, join -from typing import TypedDict, TYPE_CHECKING +from typing import TYPE_CHECKING, TypedDict if TYPE_CHECKING: from collections.abc import Callable diff --git a/pylint/testutils/lint_module_test.py b/pylint/testutils/lint_module_test.py index efd676bf55..7a06e8dd21 100644 --- a/pylint/testutils/lint_module_test.py +++ b/pylint/testutils/lint_module_test.py @@ -21,10 +21,7 @@ from pylint.testutils.constants import _EXPECTED_RE, _OPERATORS, UPDATE_OPTION # need to import from functional.test_file to avoid cyclic import -from pylint.testutils.functional.test_file import ( - NoFileError, - parse_python_version, -) +from pylint.testutils.functional.test_file import NoFileError, parse_python_version from pylint.testutils.output_line import OutputLine from pylint.testutils.reporter_for_tests import FunctionalTestReporter diff --git a/pylint/utils/linterstats.py b/pylint/utils/linterstats.py index 97b0869a5e..1ea4ddd7f6 100644 --- a/pylint/utils/linterstats.py +++ b/pylint/utils/linterstats.py @@ -4,7 +4,7 @@ from __future__ import annotations -from typing import Literal, TypedDict, cast, TYPE_CHECKING +from typing import TYPE_CHECKING, Literal, TypedDict, cast if TYPE_CHECKING: from pylint.typing import MessageTypesFullName diff --git a/pylint/utils/pragma_parser.py b/pylint/utils/pragma_parser.py index aa6fc3448e..e7df4b57b6 100644 --- a/pylint/utils/pragma_parser.py +++ b/pylint/utils/pragma_parser.py @@ -5,7 +5,7 @@ from __future__ import annotations import re -from typing import NamedTuple, TYPE_CHECKING +from typing import TYPE_CHECKING, NamedTuple if TYPE_CHECKING: from collections.abc import Generator From 8d455abd0617a2666560bf3ed0c062cacc9654d4 Mon Sep 17 00:00:00 2001 From: Nick Drozd <nicholasdrozd@gmail.com> Date: Wed, 25 Sep 2024 17:45:35 -0400 Subject: [PATCH 3/3] Revert one change --- pylint/testutils/_primer/primer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pylint/testutils/_primer/primer.py b/pylint/testutils/_primer/primer.py index 28089cfdeb..425c213eb4 100644 --- a/pylint/testutils/_primer/primer.py +++ b/pylint/testutils/_primer/primer.py @@ -9,6 +9,7 @@ import sys from typing import TYPE_CHECKING +from pylint.testutils._primer import PackageToLint from pylint.testutils._primer.primer_compare_command import CompareCommand from pylint.testutils._primer.primer_prepare_command import PrepareCommand from pylint.testutils._primer.primer_run_command import RunCommand @@ -16,7 +17,6 @@ if TYPE_CHECKING: from pathlib import Path - from pylint.testutils._primer import PackageToLint from pylint.testutils._primer.primer_command import PrimerCommand