diff options
author | Marc Mueller <30130371+cdce8p@users.noreply.github.com> | 2023-04-24 22:36:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-24 22:36:24 +0200 |
commit | 3ff19e4ca34fde316881d916f9df22d3104d6464 (patch) | |
tree | 22a51fd2384d9b1fe1f3fd005752155031dfd036 /pylint | |
parent | b36a6169069ad9694b63596eeaf2c95ce1c517f9 (diff) | |
download | pylint-git-3ff19e4ca34fde316881d916f9df22d3104d6464.tar.gz |
Drop support for Python 3.7 (#8609)
* Drop support for Python 3.7
* Update py-version + classifier
* Update functional tests
Diffstat (limited to 'pylint')
28 files changed, 41 insertions, 183 deletions
diff --git a/pylint/checkers/__init__.py b/pylint/checkers/__init__.py index 8af4bae67..0f9985918 100644 --- a/pylint/checkers/__init__.py +++ b/pylint/checkers/__init__.py @@ -42,8 +42,7 @@ messages nor reports. XXX not true, emit a 07 report ! from __future__ import annotations -import sys -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Literal from pylint.checkers.base_checker import ( BaseChecker, @@ -53,11 +52,6 @@ from pylint.checkers.base_checker import ( from pylint.checkers.deprecated import DeprecatedMixin from pylint.utils import LinterStats, diff_string, register_plugins -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - if TYPE_CHECKING: from pylint.lint import PyLinter diff --git a/pylint/checkers/base/basic_checker.py b/pylint/checkers/base/basic_checker.py index dd46d8553..627f3c603 100644 --- a/pylint/checkers/base/basic_checker.py +++ b/pylint/checkers/base/basic_checker.py @@ -8,9 +8,8 @@ from __future__ import annotations import collections import itertools -import sys from collections.abc import Iterator -from typing import TYPE_CHECKING, cast +from typing import TYPE_CHECKING, Literal, cast import astroid from astroid import nodes, objects, util @@ -24,11 +23,6 @@ from pylint.utils import LinterStats if TYPE_CHECKING: from pylint.lint.pylinter import PyLinter -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - class _BasicChecker(BaseChecker): """Permits separating multiple checks with the same checker name into diff --git a/pylint/checkers/base/docstring_checker.py b/pylint/checkers/base/docstring_checker.py index 5a681eeb3..91b3e7d4a 100644 --- a/pylint/checkers/base/docstring_checker.py +++ b/pylint/checkers/base/docstring_checker.py @@ -7,7 +7,7 @@ from __future__ import annotations import re -import sys +from typing import Literal import astroid from astroid import nodes @@ -21,11 +21,6 @@ from pylint.checkers.utils import ( is_property_setter, ) -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - # do not require a doc string on private/system methods NO_REQUIRED_DOC_RGX = re.compile("^_") diff --git a/pylint/checkers/classes/class_checker.py b/pylint/checkers/classes/class_checker.py index 9b0bd50b1..77a795bcb 100644 --- a/pylint/checkers/classes/class_checker.py +++ b/pylint/checkers/classes/class_checker.py @@ -7,9 +7,9 @@ from __future__ import annotations import collections -import sys 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, Union @@ -47,11 +47,6 @@ if TYPE_CHECKING: from pylint.lint.pylinter import PyLinter -if sys.version_info >= (3, 8): - from functools import cached_property -else: - from astroid.decorators import cachedproperty as cached_property - _AccessNodes = Union[nodes.Attribute, nodes.AssignAttr] INVALID_BASE_CLASSES = {"bool", "range", "slice", "memoryview"} diff --git a/pylint/checkers/format.py b/pylint/checkers/format.py index 62466a4fd..3e3cd3227 100644 --- a/pylint/checkers/format.py +++ b/pylint/checkers/format.py @@ -13,11 +13,10 @@ Some parts of the process_token method is based from The Tab Nanny std module. from __future__ import annotations -import sys import tokenize from functools import reduce from re import Match -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Literal from astroid import nodes @@ -31,10 +30,6 @@ from pylint.utils.pragma_parser import OPTION_PO, PragmaParserError, parse_pragm if TYPE_CHECKING: from pylint.lint import PyLinter -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal _KEYWORD_TOKENS = { "assert", diff --git a/pylint/checkers/imports.py b/pylint/checkers/imports.py index 6cc5d2164..42649f3d9 100644 --- a/pylint/checkers/imports.py +++ b/pylint/checkers/imports.py @@ -12,6 +12,7 @@ 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, Dict, List, Union import astroid @@ -38,11 +39,6 @@ from pylint.utils.linterstats import LinterStats if TYPE_CHECKING: from pylint.lint import PyLinter -if sys.version_info >= (3, 8): - from functools import cached_property -else: - from astroid.decorators import cachedproperty as cached_property - # The dictionary with Any should actually be a _ImportTree again # but mypy doesn't support recursive types yet diff --git a/pylint/checkers/logging.py b/pylint/checkers/logging.py index e5fb1ae09..461047bdf 100644 --- a/pylint/checkers/logging.py +++ b/pylint/checkers/logging.py @@ -7,8 +7,7 @@ from __future__ import annotations import string -import sys -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Literal import astroid from astroid import bases, nodes @@ -19,11 +18,6 @@ from pylint.checkers import utils from pylint.checkers.utils import infer_all from pylint.typing import MessageDefinitionTuple -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - if TYPE_CHECKING: from pylint.lint import PyLinter diff --git a/pylint/checkers/raw_metrics.py b/pylint/checkers/raw_metrics.py index 301e9d2e2..ef4535345 100644 --- a/pylint/checkers/raw_metrics.py +++ b/pylint/checkers/raw_metrics.py @@ -4,19 +4,13 @@ from __future__ import annotations -import sys import tokenize -from typing import TYPE_CHECKING, Any, cast +from typing import TYPE_CHECKING, Any, Literal, cast from pylint.checkers import BaseTokenChecker from pylint.reporters.ureports.nodes import Paragraph, Section, Table, Text from pylint.utils import LinterStats, diff_string -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - if TYPE_CHECKING: from pylint.lint import PyLinter diff --git a/pylint/checkers/refactoring/refactoring_checker.py b/pylint/checkers/refactoring/refactoring_checker.py index 890b0e64d..5d0a2dd7a 100644 --- a/pylint/checkers/refactoring/refactoring_checker.py +++ b/pylint/checkers/refactoring/refactoring_checker.py @@ -7,10 +7,9 @@ from __future__ import annotations import collections import copy import itertools -import sys import tokenize from collections.abc import Iterator -from functools import reduce +from functools import cached_property, reduce from re import Pattern from typing import TYPE_CHECKING, Any, NamedTuple, Union, cast @@ -27,10 +26,6 @@ from pylint.interfaces import HIGH, INFERENCE, Confidence if TYPE_CHECKING: from pylint.lint import PyLinter -if sys.version_info >= (3, 8): - from functools import cached_property -else: - from astroid.decorators import cachedproperty as cached_property NodesWithNestedBlocks = Union[ nodes.TryExcept, nodes.TryFinally, nodes.While, nodes.For, nodes.If diff --git a/pylint/checkers/spelling.py b/pylint/checkers/spelling.py index 8ba4df4d5..91161c60d 100644 --- a/pylint/checkers/spelling.py +++ b/pylint/checkers/spelling.py @@ -7,21 +7,15 @@ from __future__ import annotations import re -import sys import tokenize from re import Pattern -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, Literal from astroid import nodes from pylint.checkers import BaseTokenChecker from pylint.checkers.utils import only_required_for_messages -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - if TYPE_CHECKING: from pylint.lint import PyLinter diff --git a/pylint/checkers/strings.py b/pylint/checkers/strings.py index ce122e754..2cc780da5 100644 --- a/pylint/checkers/strings.py +++ b/pylint/checkers/strings.py @@ -8,11 +8,10 @@ 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 +from typing import TYPE_CHECKING, Literal import astroid from astroid import bases, nodes, util @@ -26,11 +25,6 @@ from pylint.typing import MessageDefinitionTuple if TYPE_CHECKING: from pylint.lint import PyLinter -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - _AST_NODE_STR_TYPES = ("__builtin__.unicode", "__builtin__.str", "builtins.str") # Prefixes for both strings and bytes literals per diff --git a/pylint/checkers/typecheck.py b/pylint/checkers/typecheck.py index 0298c81dc..fe29879c5 100644 --- a/pylint/checkers/typecheck.py +++ b/pylint/checkers/typecheck.py @@ -14,9 +14,9 @@ import shlex import sys import types from collections.abc import Callable, Iterable, Iterator, Sequence -from functools import singledispatch +from functools import cached_property, singledispatch from re import Pattern -from typing import TYPE_CHECKING, Any, TypeVar, Union +from typing import TYPE_CHECKING, Any, Literal, TypeVar, Union import astroid import astroid.exceptions @@ -53,13 +53,6 @@ from pylint.constants import PY310_PLUS from pylint.interfaces import HIGH, INFERENCE from pylint.typing import MessageDefinitionTuple -if sys.version_info >= (3, 8): - from functools import cached_property - from typing import Literal -else: - from astroid.decorators import cachedproperty as cached_property - from typing_extensions import Literal - if TYPE_CHECKING: from pylint.lint import PyLinter diff --git a/pylint/checkers/utils.py b/pylint/checkers/utils.py index 95a0e7b7b..6b66ad620 100644 --- a/pylint/checkers/utils.py +++ b/pylint/checkers/utils.py @@ -1942,7 +1942,7 @@ def is_typing_member(node: nodes.NodeNG, names_to_check: tuple[str, ...]) -> boo return False -@lru_cache() +@lru_cache def in_for_else_branch(parent: nodes.NodeNG, stmt: nodes.Statement) -> bool: """Returns True if stmt is inside the else branch for a parent For stmt.""" return isinstance(parent, nodes.For) and any( diff --git a/pylint/checkers/variables.py b/pylint/checkers/variables.py index e1b82bb41..08797c93c 100644 --- a/pylint/checkers/variables.py +++ b/pylint/checkers/variables.py @@ -11,10 +11,10 @@ import copy import itertools import os import re -import sys 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 import astroid @@ -34,11 +34,6 @@ from pylint.constants import PY39_PLUS, TYPING_NEVER, TYPING_NORETURN from pylint.interfaces import CONTROL_FLOW, HIGH, INFERENCE, INFERENCE_FAILURE from pylint.typing import MessageDefinitionTuple -if sys.version_info >= (3, 8): - from functools import cached_property -else: - from astroid.decorators import cachedproperty as cached_property - if TYPE_CHECKING: from pylint.lint import PyLinter diff --git a/pylint/config/_pylint_config/utils.py b/pylint/config/_pylint_config/utils.py index 70b2a8092..f9185e8b1 100644 --- a/pylint/config/_pylint_config/utils.py +++ b/pylint/config/_pylint_config/utils.py @@ -9,12 +9,7 @@ from __future__ import annotations import sys from collections.abc import Callable from pathlib import Path -from typing import TypeVar - -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal +from typing import Literal, TypeVar if sys.version_info >= (3, 10): from typing import ParamSpec diff --git a/pylint/config/argument.py b/pylint/config/argument.py index 697629c13..d826cbd3e 100644 --- a/pylint/config/argument.py +++ b/pylint/config/argument.py @@ -13,10 +13,9 @@ import argparse import os import pathlib import re -import sys from collections.abc import Callable from glob import glob -from typing import Any, Pattern, Sequence, Tuple, Union +from typing import Any, Literal, Pattern, Sequence, Tuple, Union from pylint import interfaces from pylint import utils as pylint_utils @@ -24,12 +23,6 @@ from pylint.config.callback_actions import _CallbackAction, _ExtendAction from pylint.config.deprecation_actions import _NewNamesAction, _OldNamesAction from pylint.constants import PY38_PLUS -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - - _ArgumentTypes = Union[ str, int, diff --git a/pylint/lint/message_state_handler.py b/pylint/lint/message_state_handler.py index 96d2412c5..26028f0fa 100644 --- a/pylint/lint/message_state_handler.py +++ b/pylint/lint/message_state_handler.py @@ -4,10 +4,9 @@ from __future__ import annotations -import sys import tokenize from collections import defaultdict -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Literal from pylint import exceptions, interfaces from pylint.constants import ( @@ -27,12 +26,6 @@ from pylint.utils.pragma_parser import ( parse_pragma, ) -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - - if TYPE_CHECKING: from pylint.lint.pylinter import PyLinter diff --git a/pylint/lint/pylinter.py b/pylint/lint/pylinter.py index a0441e300..ed607aca5 100644 --- a/pylint/lint/pylinter.py +++ b/pylint/lint/pylinter.py @@ -18,7 +18,7 @@ from io import TextIOWrapper from pathlib import Path from re import Pattern from types import ModuleType -from typing import Any +from typing import Any, Protocol import astroid from astroid import nodes @@ -68,12 +68,6 @@ from pylint.typing import ( ) from pylint.utils import ASTWalker, FileState, LinterStats, utils -if sys.version_info >= (3, 8): - from typing import Protocol -else: - from typing_extensions import Protocol - - MANAGER = astroid.MANAGER diff --git a/pylint/reporters/json_reporter.py b/pylint/reporters/json_reporter.py index 74fa6672b..176946e72 100644 --- a/pylint/reporters/json_reporter.py +++ b/pylint/reporters/json_reporter.py @@ -7,19 +7,13 @@ from __future__ import annotations import json -import sys -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, TypedDict from pylint.interfaces import UNDEFINED from pylint.message import Message from pylint.reporters.base_reporter import BaseReporter from pylint.typing import MessageLocationTuple -if sys.version_info >= (3, 8): - from typing import TypedDict -else: - from typing_extensions import TypedDict - if TYPE_CHECKING: from pylint.lint.pylinter import PyLinter from pylint.reporters.ureports.nodes import Section diff --git a/pylint/testutils/_primer/package_to_lint.py b/pylint/testutils/_primer/package_to_lint.py index 11df63bd2..1f596f02b 100644 --- a/pylint/testutils/_primer/package_to_lint.py +++ b/pylint/testutils/_primer/package_to_lint.py @@ -5,18 +5,13 @@ from __future__ import annotations import logging -import sys from pathlib import Path +from typing import Literal from git import GitCommandError from git.cmd import Git from git.repo import Repo -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - PRIMER_DIRECTORY_PATH = Path("tests") / ".pylint_primer_tests" diff --git a/pylint/testutils/_primer/primer_command.py b/pylint/testutils/_primer/primer_command.py index 08adedd4c..817c1a0d3 100644 --- a/pylint/testutils/_primer/primer_command.py +++ b/pylint/testutils/_primer/primer_command.py @@ -6,18 +6,12 @@ from __future__ import annotations import abc import argparse -import sys from pathlib import Path -from typing import Dict +from typing import Dict, TypedDict from pylint.reporters.json_reporter import OldJsonExport from pylint.testutils._primer import PackageToLint -if sys.version_info >= (3, 8): - from typing import TypedDict -else: - from typing_extensions import TypedDict - class PackageData(TypedDict): commit: str diff --git a/pylint/testutils/functional/test_file.py b/pylint/testutils/functional/test_file.py index 5b2e4efb6..16593b5c4 100644 --- a/pylint/testutils/functional/test_file.py +++ b/pylint/testutils/functional/test_file.py @@ -5,9 +5,9 @@ from __future__ import annotations import configparser -import sys from collections.abc import Callable from os.path import basename, exists, join +from typing import TypedDict def parse_python_version(ver_str: str) -> tuple[int, ...]: @@ -19,12 +19,6 @@ class NoFileError(Exception): pass -if sys.version_info >= (3, 8): - from typing import TypedDict -else: - from typing_extensions import TypedDict - - class TestFileOptions(TypedDict): min_pyver: tuple[int, ...] max_pyver: tuple[int, ...] diff --git a/pylint/testutils/pyreverse.py b/pylint/testutils/pyreverse.py index 24fddad77..c621f9e7a 100644 --- a/pylint/testutils/pyreverse.py +++ b/pylint/testutils/pyreverse.py @@ -7,17 +7,11 @@ from __future__ import annotations import argparse import configparser import shlex -import sys from pathlib import Path -from typing import NamedTuple +from typing import NamedTuple, TypedDict from pylint.pyreverse.main import DEFAULT_COLOR_PALETTE -if sys.version_info >= (3, 8): - from typing import TypedDict -else: - from typing_extensions import TypedDict - # 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/unittest_linter.py b/pylint/testutils/unittest_linter.py index 84fc53bc8..a19afec56 100644 --- a/pylint/testutils/unittest_linter.py +++ b/pylint/testutils/unittest_linter.py @@ -6,8 +6,7 @@ from __future__ import annotations -import sys -from typing import Any +from typing import Any, Literal from astroid import nodes @@ -15,11 +14,6 @@ from pylint.interfaces import UNDEFINED, Confidence from pylint.lint import PyLinter from pylint.testutils.output_line import MessageTest -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - class UnittestLinter(PyLinter): """A fake linter class to capture checker messages.""" diff --git a/pylint/typing.py b/pylint/typing.py index ac0beaaec..da11112b4 100644 --- a/pylint/typing.py +++ b/pylint/typing.py @@ -7,7 +7,6 @@ from __future__ import annotations import argparse -import sys from pathlib import Path from typing import ( TYPE_CHECKING, @@ -15,19 +14,17 @@ from typing import ( Callable, Dict, Iterable, + Literal, NamedTuple, Optional, Pattern, + Protocol, Tuple, Type, + TypedDict, Union, ) -if sys.version_info >= (3, 8): - from typing import Literal, Protocol, TypedDict -else: - from typing_extensions import Literal, Protocol, TypedDict - if TYPE_CHECKING: from pylint.config.callback_actions import _CallbackAction from pylint.pyreverse.inspector import Project diff --git a/pylint/utils/file_state.py b/pylint/utils/file_state.py index 54b98e4be..9ae5fb077 100644 --- a/pylint/utils/file_state.py +++ b/pylint/utils/file_state.py @@ -5,10 +5,9 @@ from __future__ import annotations import collections -import sys from collections import defaultdict from collections.abc import Iterator -from typing import TYPE_CHECKING, Dict +from typing import TYPE_CHECKING, Dict, Literal from astroid import nodes @@ -18,11 +17,6 @@ from pylint.constants import ( WarningScope, ) -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - if TYPE_CHECKING: from pylint.message import MessageDefinition, MessageDefinitionStore diff --git a/pylint/utils/linterstats.py b/pylint/utils/linterstats.py index 01120115f..e7a088b7b 100644 --- a/pylint/utils/linterstats.py +++ b/pylint/utils/linterstats.py @@ -4,16 +4,10 @@ from __future__ import annotations -import sys -from typing import cast +from typing import Literal, TypedDict, cast from pylint.typing import MessageTypesFullName -if sys.version_info >= (3, 8): - from typing import Literal, TypedDict -else: - from typing_extensions import Literal, TypedDict - class BadNames(TypedDict): """TypedDict to store counts of node types with bad names.""" diff --git a/pylint/utils/utils.py b/pylint/utils/utils.py index 315811ebf..543d7cbb3 100644 --- a/pylint/utils/utils.py +++ b/pylint/utils/utils.py @@ -24,18 +24,23 @@ import tokenize import warnings from collections.abc import Sequence from io import BufferedReader, BytesIO -from typing import TYPE_CHECKING, Any, List, Pattern, TextIO, Tuple, TypeVar, Union +from typing import ( + TYPE_CHECKING, + Any, + List, + Literal, + Pattern, + TextIO, + Tuple, + TypeVar, + Union, +) from astroid import Module, modutils, nodes from pylint.constants import PY_EXTS from pylint.typing import OptionDict -if sys.version_info >= (3, 8): - from typing import Literal -else: - from typing_extensions import Literal - if TYPE_CHECKING: from pylint.lint import PyLinter |