diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9df4a797..064fc867 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v5.0.0 hooks: - id: check-yaml - id: debug-statements @@ -8,7 +8,7 @@ repos: - id: trailing-whitespace exclude: ^tests/fixtures/ - repo: https://github.com/asottile/setup-cfg-fmt - rev: v2.5.0 + rev: v2.8.0 hooks: - id: setup-cfg-fmt - repo: https://github.com/asottile/reorder-python-imports @@ -26,12 +26,12 @@ repos: - id: pyupgrade args: [--py39-plus] - repo: https://github.com/psf/black - rev: 23.12.1 + rev: 25.1.0 hooks: - id: black args: [--line-length=79] - repo: https://github.com/PyCQA/flake8 - rev: 7.0.0 + rev: 7.2.0 hooks: - id: flake8 - repo: https://github.com/pre-commit/mirrors-mypy diff --git a/example-plugin/src/flake8_example_plugin/__init__.py b/example-plugin/src/flake8_example_plugin/__init__.py index 47851da6..8de9c4d4 100644 --- a/example-plugin/src/flake8_example_plugin/__init__.py +++ b/example-plugin/src/flake8_example_plugin/__init__.py @@ -1,4 +1,5 @@ """Module for an example Flake8 plugin.""" + from __future__ import annotations from .off_by_default import ExampleTwo diff --git a/example-plugin/src/flake8_example_plugin/off_by_default.py b/example-plugin/src/flake8_example_plugin/off_by_default.py index d140ca1d..56e781f1 100644 --- a/example-plugin/src/flake8_example_plugin/off_by_default.py +++ b/example-plugin/src/flake8_example_plugin/off_by_default.py @@ -1,4 +1,5 @@ """Our first example plugin.""" + from __future__ import annotations diff --git a/example-plugin/src/flake8_example_plugin/on_by_default.py b/example-plugin/src/flake8_example_plugin/on_by_default.py index d2da1268..8f5c8189 100644 --- a/example-plugin/src/flake8_example_plugin/on_by_default.py +++ b/example-plugin/src/flake8_example_plugin/on_by_default.py @@ -1,4 +1,5 @@ """Our first example plugin.""" + from __future__ import annotations diff --git a/setup.cfg b/setup.cfg index 6f63f5a6..79a3b881 100644 --- a/setup.cfg +++ b/setup.cfg @@ -16,7 +16,6 @@ classifiers = Environment :: Console Framework :: Flake8 Intended Audience :: Developers - License :: OSI Approved :: MIT License Programming Language :: Python Programming Language :: Python :: 3 Programming Language :: Python :: 3 :: Only diff --git a/setup.py b/setup.py index 253a22ee..548a6d8a 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,5 @@ """Packaging logic for Flake8.""" + from __future__ import annotations import os diff --git a/src/flake8/__init__.py b/src/flake8/__init__.py index cf91f8b8..0be054dd 100644 --- a/src/flake8/__init__.py +++ b/src/flake8/__init__.py @@ -9,6 +9,7 @@ .. autofunction:: flake8.configure_logging """ + from __future__ import annotations import logging diff --git a/src/flake8/__main__.py b/src/flake8/__main__.py index 8f7e7c9d..d318d666 100644 --- a/src/flake8/__main__.py +++ b/src/flake8/__main__.py @@ -1,4 +1,5 @@ """Module allowing for ``python -m flake8 ...``.""" + from __future__ import annotations from flake8.main.cli import main diff --git a/src/flake8/api/__init__.py b/src/flake8/api/__init__.py index c5f9711a..7993de6a 100644 --- a/src/flake8/api/__init__.py +++ b/src/flake8/api/__init__.py @@ -3,4 +3,5 @@ This is the only submodule in Flake8 with a guaranteed stable API. All other submodules are considered internal only and are subject to change. """ + from __future__ import annotations diff --git a/src/flake8/api/legacy.py b/src/flake8/api/legacy.py index 446df293..b94a771d 100644 --- a/src/flake8/api/legacy.py +++ b/src/flake8/api/legacy.py @@ -3,6 +3,7 @@ Previously, users would import :func:`get_style_guide` from ``flake8.engine``. In 3.0 we no longer have an "engine" module but we maintain the API from it. """ + from __future__ import annotations import argparse diff --git a/src/flake8/checker.py b/src/flake8/checker.py index d1659b7e..eb41c9e2 100644 --- a/src/flake8/checker.py +++ b/src/flake8/checker.py @@ -1,4 +1,5 @@ """Checker Manager and Checker classes.""" + from __future__ import annotations import argparse diff --git a/src/flake8/defaults.py b/src/flake8/defaults.py index 57abda11..d895c54f 100644 --- a/src/flake8/defaults.py +++ b/src/flake8/defaults.py @@ -1,4 +1,5 @@ """Constants that define defaults.""" + from __future__ import annotations import re diff --git a/src/flake8/discover_files.py b/src/flake8/discover_files.py index da28ba5d..aecb85a3 100644 --- a/src/flake8/discover_files.py +++ b/src/flake8/discover_files.py @@ -1,4 +1,5 @@ """Functions related to discovering paths.""" + from __future__ import annotations import logging diff --git a/src/flake8/exceptions.py b/src/flake8/exceptions.py index 18646e7e..533923e0 100644 --- a/src/flake8/exceptions.py +++ b/src/flake8/exceptions.py @@ -1,4 +1,5 @@ """Exception classes for all of Flake8.""" + from __future__ import annotations diff --git a/src/flake8/formatting/__init__.py b/src/flake8/formatting/__init__.py index 732d0b61..f6bae560 100644 --- a/src/flake8/formatting/__init__.py +++ b/src/flake8/formatting/__init__.py @@ -1,2 +1,3 @@ """Submodule containing the default formatters for Flake8.""" + from __future__ import annotations diff --git a/src/flake8/formatting/_windows_color.py b/src/flake8/formatting/_windows_color.py index a06fdb94..6ee96ba8 100644 --- a/src/flake8/formatting/_windows_color.py +++ b/src/flake8/formatting/_windows_color.py @@ -2,6 +2,7 @@ See: https://github.com/pre-commit/pre-commit/blob/cb40e96/pre_commit/color.py """ + from __future__ import annotations import sys diff --git a/src/flake8/formatting/base.py b/src/flake8/formatting/base.py index d986d651..257f4b78 100644 --- a/src/flake8/formatting/base.py +++ b/src/flake8/formatting/base.py @@ -1,4 +1,5 @@ """The base class and interface for all formatting plugins.""" + from __future__ import annotations import argparse diff --git a/src/flake8/formatting/default.py b/src/flake8/formatting/default.py index b5d08ff0..4386476c 100644 --- a/src/flake8/formatting/default.py +++ b/src/flake8/formatting/default.py @@ -1,4 +1,5 @@ """Default formatting class for Flake8.""" + from __future__ import annotations from flake8.formatting import base diff --git a/src/flake8/main/__init__.py b/src/flake8/main/__init__.py index 85bcff42..55528b00 100644 --- a/src/flake8/main/__init__.py +++ b/src/flake8/main/__init__.py @@ -1,2 +1,3 @@ """Module containing the logic for the Flake8 entry-points.""" + from __future__ import annotations diff --git a/src/flake8/main/application.py b/src/flake8/main/application.py index 4704cbd5..ea6b9617 100644 --- a/src/flake8/main/application.py +++ b/src/flake8/main/application.py @@ -1,4 +1,5 @@ """Module containing the application logic for Flake8.""" + from __future__ import annotations import argparse diff --git a/src/flake8/main/cli.py b/src/flake8/main/cli.py index 1a52f36d..d10c7b39 100644 --- a/src/flake8/main/cli.py +++ b/src/flake8/main/cli.py @@ -1,4 +1,5 @@ """Command-line implementation of flake8.""" + from __future__ import annotations import sys diff --git a/src/flake8/main/debug.py b/src/flake8/main/debug.py index c3a8b0b7..389523d3 100644 --- a/src/flake8/main/debug.py +++ b/src/flake8/main/debug.py @@ -1,4 +1,5 @@ """Module containing the logic for our debugging logic.""" + from __future__ import annotations import platform diff --git a/src/flake8/main/options.py b/src/flake8/main/options.py index 9d57321b..80c02a3d 100644 --- a/src/flake8/main/options.py +++ b/src/flake8/main/options.py @@ -1,4 +1,5 @@ """Contains the logic for all of the default options for Flake8.""" + from __future__ import annotations import argparse diff --git a/src/flake8/options/__init__.py b/src/flake8/options/__init__.py index 3578223b..b98a2e7b 100644 --- a/src/flake8/options/__init__.py +++ b/src/flake8/options/__init__.py @@ -10,4 +10,5 @@ to aggregate configuration into one object used by plugins and Flake8. """ + from __future__ import annotations diff --git a/src/flake8/options/aggregator.py b/src/flake8/options/aggregator.py index 999161ab..299b6674 100644 --- a/src/flake8/options/aggregator.py +++ b/src/flake8/options/aggregator.py @@ -3,6 +3,7 @@ This holds the logic that uses the collected and merged config files and applies the user-specified command-line configuration on top of it. """ + from __future__ import annotations import argparse diff --git a/src/flake8/options/config.py b/src/flake8/options/config.py index b51949c2..73d33fbb 100644 --- a/src/flake8/options/config.py +++ b/src/flake8/options/config.py @@ -1,4 +1,5 @@ """Config handling logic for Flake8.""" + from __future__ import annotations import configparser diff --git a/src/flake8/options/manager.py b/src/flake8/options/manager.py index cb195fe2..cc6d5f3b 100644 --- a/src/flake8/options/manager.py +++ b/src/flake8/options/manager.py @@ -1,4 +1,5 @@ """Option handling and Option management logic.""" + from __future__ import annotations import argparse diff --git a/src/flake8/options/parse_args.py b/src/flake8/options/parse_args.py index ff5e08f4..bdb1930a 100644 --- a/src/flake8/options/parse_args.py +++ b/src/flake8/options/parse_args.py @@ -1,4 +1,5 @@ """Procedure for parsing args, config, loading plugins.""" + from __future__ import annotations import argparse diff --git a/src/flake8/plugins/__init__.py b/src/flake8/plugins/__init__.py index b5403133..da6b43da 100644 --- a/src/flake8/plugins/__init__.py +++ b/src/flake8/plugins/__init__.py @@ -1,2 +1,3 @@ """Submodule of built-in plugins and plugin managers.""" + from __future__ import annotations diff --git a/src/flake8/plugins/finder.py b/src/flake8/plugins/finder.py index 88b66a08..7257b540 100644 --- a/src/flake8/plugins/finder.py +++ b/src/flake8/plugins/finder.py @@ -1,4 +1,5 @@ """Functions related to finding and loading plugins.""" + from __future__ import annotations import configparser diff --git a/src/flake8/plugins/pycodestyle.py b/src/flake8/plugins/pycodestyle.py index cd760dc6..fb04f471 100644 --- a/src/flake8/plugins/pycodestyle.py +++ b/src/flake8/plugins/pycodestyle.py @@ -1,4 +1,5 @@ """Generated using ./bin/gen-pycodestyle-plugin.""" + # fmt: off from __future__ import annotations diff --git a/src/flake8/plugins/pyflakes.py b/src/flake8/plugins/pyflakes.py index 3620a27b..3d25e863 100644 --- a/src/flake8/plugins/pyflakes.py +++ b/src/flake8/plugins/pyflakes.py @@ -1,4 +1,5 @@ """Plugin built-in to Flake8 to treat pyflakes as a plugin.""" + from __future__ import annotations import argparse diff --git a/src/flake8/plugins/reporter.py b/src/flake8/plugins/reporter.py index a5749c03..75db99f4 100644 --- a/src/flake8/plugins/reporter.py +++ b/src/flake8/plugins/reporter.py @@ -1,4 +1,5 @@ """Functions for constructing the requested report plugin.""" + from __future__ import annotations import argparse diff --git a/src/flake8/processor.py b/src/flake8/processor.py index 610964dc..49148594 100644 --- a/src/flake8/processor.py +++ b/src/flake8/processor.py @@ -1,4 +1,5 @@ """Module containing our file processor that tokenizes a file for checks.""" + from __future__ import annotations import argparse @@ -369,9 +370,9 @@ def strip_utf_bom(self) -> None: return # If the first byte of the file is a UTF-8 BOM, strip it - if self.lines[0][:1] == "\uFEFF": + if self.lines[0][:1] == "\ufeff": self.lines[0] = self.lines[0][1:] - elif self.lines[0][:3] == "\xEF\xBB\xBF": + elif self.lines[0][:3] == "\xef\xbb\xbf": self.lines[0] = self.lines[0][3:] diff --git a/src/flake8/statistics.py b/src/flake8/statistics.py index 5a222548..469d831b 100644 --- a/src/flake8/statistics.py +++ b/src/flake8/statistics.py @@ -1,4 +1,5 @@ """Statistic collection logic for Flake8.""" + from __future__ import annotations from collections.abc import Generator diff --git a/src/flake8/style_guide.py b/src/flake8/style_guide.py index f72e6d87..49f4daa9 100644 --- a/src/flake8/style_guide.py +++ b/src/flake8/style_guide.py @@ -1,4 +1,5 @@ """Implementation of the StyleGuide used by Flake8.""" + from __future__ import annotations import argparse diff --git a/src/flake8/utils.py b/src/flake8/utils.py index 67db33fb..ca97d315 100644 --- a/src/flake8/utils.py +++ b/src/flake8/utils.py @@ -1,4 +1,5 @@ """Utility methods for flake8.""" + from __future__ import annotations import fnmatch as _fnmatch diff --git a/src/flake8/violation.py b/src/flake8/violation.py index ae1631ac..d9fbef96 100644 --- a/src/flake8/violation.py +++ b/src/flake8/violation.py @@ -1,4 +1,5 @@ """Contains the Violation error class used internally.""" + from __future__ import annotations import functools diff --git a/tests/__init__.py b/tests/__init__.py index ee1f2a01..fc6434e4 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,2 +1,3 @@ """This is here because mypy doesn't understand PEP 420.""" + from __future__ import annotations diff --git a/tests/conftest.py b/tests/conftest.py index ac413fbb..40b6c6a5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,5 @@ """Test configuration for py.test.""" + from __future__ import annotations import sys diff --git a/tests/integration/subdir/aplugin.py b/tests/integration/subdir/aplugin.py index 97b06a90..11450a9d 100644 --- a/tests/integration/subdir/aplugin.py +++ b/tests/integration/subdir/aplugin.py @@ -1,4 +1,5 @@ """Module that is off sys.path by default, for testing local-plugin-paths.""" + from __future__ import annotations diff --git a/tests/integration/test_aggregator.py b/tests/integration/test_aggregator.py index 006ac5fa..a8f5f188 100644 --- a/tests/integration/test_aggregator.py +++ b/tests/integration/test_aggregator.py @@ -1,4 +1,5 @@ """Test aggregation of config files and command-line options.""" + from __future__ import annotations import os diff --git a/tests/integration/test_api_legacy.py b/tests/integration/test_api_legacy.py index b386bd5d..d30fb4a9 100644 --- a/tests/integration/test_api_legacy.py +++ b/tests/integration/test_api_legacy.py @@ -1,4 +1,5 @@ """Integration tests for the legacy api.""" + from __future__ import annotations from flake8.api import legacy diff --git a/tests/integration/test_checker.py b/tests/integration/test_checker.py index a585f5ac..2da53a83 100644 --- a/tests/integration/test_checker.py +++ b/tests/integration/test_checker.py @@ -1,4 +1,5 @@ """Integration tests for the checker submodule.""" + from __future__ import annotations import importlib.metadata diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py index 68b93cb3..6fa1741d 100644 --- a/tests/integration/test_main.py +++ b/tests/integration/test_main.py @@ -1,4 +1,5 @@ """Integration tests for the main entrypoint of flake8.""" + from __future__ import annotations import json diff --git a/tests/integration/test_plugins.py b/tests/integration/test_plugins.py index 90ca555a..c7225571 100644 --- a/tests/integration/test_plugins.py +++ b/tests/integration/test_plugins.py @@ -1,4 +1,5 @@ """Integration tests for plugin loading.""" + from __future__ import annotations import sys diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py index 0f8386a4..a1e58adf 100644 --- a/tests/unit/conftest.py +++ b/tests/unit/conftest.py @@ -1,4 +1,5 @@ """Shared fixtures between unit tests.""" + from __future__ import annotations import argparse diff --git a/tests/unit/test_application.py b/tests/unit/test_application.py index 04147ec8..f0a37966 100644 --- a/tests/unit/test_application.py +++ b/tests/unit/test_application.py @@ -1,4 +1,5 @@ """Tests for the Application class.""" + from __future__ import annotations import argparse diff --git a/tests/unit/test_base_formatter.py b/tests/unit/test_base_formatter.py index 5b573352..b7d259e2 100644 --- a/tests/unit/test_base_formatter.py +++ b/tests/unit/test_base_formatter.py @@ -1,4 +1,5 @@ """Tests for the BaseFormatter object.""" + from __future__ import annotations import argparse diff --git a/tests/unit/test_checker_manager.py b/tests/unit/test_checker_manager.py index 593822b6..8b68f407 100644 --- a/tests/unit/test_checker_manager.py +++ b/tests/unit/test_checker_manager.py @@ -1,4 +1,5 @@ """Tests for the Manager object for FileCheckers.""" + from __future__ import annotations import errno diff --git a/tests/unit/test_decision_engine.py b/tests/unit/test_decision_engine.py index d543d5ec..95ec1ea3 100644 --- a/tests/unit/test_decision_engine.py +++ b/tests/unit/test_decision_engine.py @@ -1,4 +1,5 @@ """Tests for the flake8.style_guide.DecisionEngine class.""" + from __future__ import annotations import argparse diff --git a/tests/unit/test_exceptions.py b/tests/unit/test_exceptions.py index 99b298bc..6998c04d 100644 --- a/tests/unit/test_exceptions.py +++ b/tests/unit/test_exceptions.py @@ -1,4 +1,5 @@ """Tests for the flake8.exceptions module.""" + from __future__ import annotations import pickle diff --git a/tests/unit/test_file_checker.py b/tests/unit/test_file_checker.py index 627a9361..30983829 100644 --- a/tests/unit/test_file_checker.py +++ b/tests/unit/test_file_checker.py @@ -1,4 +1,5 @@ """Unit tests for the FileChecker class.""" + from __future__ import annotations import argparse diff --git a/tests/unit/test_file_processor.py b/tests/unit/test_file_processor.py index a90c6284..30516a5e 100644 --- a/tests/unit/test_file_processor.py +++ b/tests/unit/test_file_processor.py @@ -1,4 +1,5 @@ """Tests for the FileProcessor class.""" + from __future__ import annotations import ast @@ -52,8 +53,8 @@ def test_read_lines_unknown_encoding(tmpdir, default_options): @pytest.mark.parametrize( "first_line", [ - '\xEF\xBB\xBF"""Module docstring."""\n', - '\uFEFF"""Module docstring."""\n', + '\xef\xbb\xbf"""Module docstring."""\n', + '\ufeff"""Module docstring."""\n', ], ) def test_strip_utf_bom(first_line, default_options): @@ -67,8 +68,8 @@ def test_strip_utf_bom(first_line, default_options): @pytest.mark.parametrize( "lines, expected", [ - (['\xEF\xBB\xBF"""Module docstring."""\n'], False), - (['\uFEFF"""Module docstring."""\n'], False), + (['\xef\xbb\xbf"""Module docstring."""\n'], False), + (['\ufeff"""Module docstring."""\n'], False), (["#!/usr/bin/python", "# flake8 is great", "a = 1"], False), (["#!/usr/bin/python", "# flake8: noqa", "a = 1"], True), (["#!/usr/bin/python", "# flake8:noqa", "a = 1"], True), diff --git a/tests/unit/test_filenameonly_formatter.py b/tests/unit/test_filenameonly_formatter.py index 77f75b94..2ccf23f7 100644 --- a/tests/unit/test_filenameonly_formatter.py +++ b/tests/unit/test_filenameonly_formatter.py @@ -1,4 +1,5 @@ """Tests for the FilenameOnly formatter object.""" + from __future__ import annotations import argparse diff --git a/tests/unit/test_legacy_api.py b/tests/unit/test_legacy_api.py index c6af6301..aa408103 100644 --- a/tests/unit/test_legacy_api.py +++ b/tests/unit/test_legacy_api.py @@ -1,4 +1,5 @@ """Tests for Flake8's legacy API.""" + from __future__ import annotations from unittest import mock diff --git a/tests/unit/test_nothing_formatter.py b/tests/unit/test_nothing_formatter.py index 76929fd7..b6c6e23d 100644 --- a/tests/unit/test_nothing_formatter.py +++ b/tests/unit/test_nothing_formatter.py @@ -1,4 +1,5 @@ """Tests for the Nothing formatter obbject.""" + from __future__ import annotations import argparse diff --git a/tests/unit/test_option.py b/tests/unit/test_option.py index 4b3070dc..8e008b7d 100644 --- a/tests/unit/test_option.py +++ b/tests/unit/test_option.py @@ -1,4 +1,5 @@ """Unit tests for flake8.options.manager.Option.""" + from __future__ import annotations import functools diff --git a/tests/unit/test_option_manager.py b/tests/unit/test_option_manager.py index 92266f3a..87a76ff5 100644 --- a/tests/unit/test_option_manager.py +++ b/tests/unit/test_option_manager.py @@ -1,4 +1,5 @@ """Unit tests for flake.options.manager.OptionManager.""" + from __future__ import annotations import argparse diff --git a/tests/unit/test_pyflakes_codes.py b/tests/unit/test_pyflakes_codes.py index 444008a2..f9bca9b9 100644 --- a/tests/unit/test_pyflakes_codes.py +++ b/tests/unit/test_pyflakes_codes.py @@ -1,4 +1,5 @@ """Tests of pyflakes monkey patches.""" + from __future__ import annotations import ast diff --git a/tests/unit/test_statistics.py b/tests/unit/test_statistics.py index 261f360e..9f606664 100644 --- a/tests/unit/test_statistics.py +++ b/tests/unit/test_statistics.py @@ -1,4 +1,5 @@ """Tests for the statistics module in Flake8.""" + from __future__ import annotations import pytest diff --git a/tests/unit/test_style_guide.py b/tests/unit/test_style_guide.py index 94fcb260..c8eae3d6 100644 --- a/tests/unit/test_style_guide.py +++ b/tests/unit/test_style_guide.py @@ -1,4 +1,5 @@ """Tests for the flake8.style_guide.StyleGuide class.""" + from __future__ import annotations import argparse diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 82eef63e..773b7c9d 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -1,4 +1,5 @@ """Tests for flake8's utils module.""" + from __future__ import annotations import io diff --git a/tests/unit/test_violation.py b/tests/unit/test_violation.py index 1b4852be..d7f0b4be 100644 --- a/tests/unit/test_violation.py +++ b/tests/unit/test_violation.py @@ -1,4 +1,5 @@ """Tests for the flake8.violation.Violation class.""" + from __future__ import annotations from unittest import mock