diff --git a/gallery/gallery.py b/gallery/gallery.py index ba5d6f65fbe..228cd1cc7e2 100755 --- a/gallery/gallery.py +++ b/gallery/gallery.py @@ -10,7 +10,7 @@ from concurrent.futures import ThreadPoolExecutor from functools import lru_cache, partial from pathlib import Path -from typing import Generator, List, NamedTuple, Optional, Tuple, Union, cast +from typing import Generator, NamedTuple, Optional, Union, cast from urllib.request import urlopen, urlretrieve PYPI_INSTANCE = "https://pypi.org/pypi" @@ -54,7 +54,7 @@ def get_pypi_download_url(package: str, version: Optional[str]) -> str: return cast(str, source["url"]) -def get_top_packages() -> List[str]: +def get_top_packages() -> list[str]: with urlopen(PYPI_TOP_PACKAGES) as page: result = json.load(page) @@ -150,7 +150,7 @@ def git_switch_branch( subprocess.run(args, cwd=repo) -def init_repos(options: Namespace) -> Tuple[Path, ...]: +def init_repos(options: Namespace) -> tuple[Path, ...]: options.output.mkdir(exist_ok=True) if options.top_packages: @@ -206,7 +206,7 @@ def format_repo_with_version( git_switch_branch(black_version.version, repo=black_repo) git_switch_branch(current_branch, repo=repo, new=True, from_branch=from_branch) - format_cmd: List[Union[Path, str]] = [ + format_cmd: list[Union[Path, str]] = [ black_runner(black_version.version, black_repo), (black_repo / "black.py").resolve(), ".", @@ -222,7 +222,7 @@ def format_repo_with_version( return current_branch -def format_repos(repos: Tuple[Path, ...], options: Namespace) -> None: +def format_repos(repos: tuple[Path, ...], options: Namespace) -> None: black_versions = tuple( BlackVersion(*version.split(":")) for version in options.versions ) diff --git a/scripts/make_width_table.py b/scripts/make_width_table.py index 1b53c1b2cc9..10c758abc09 100644 --- a/scripts/make_width_table.py +++ b/scripts/make_width_table.py @@ -18,12 +18,12 @@ import sys from os.path import basename, dirname, join -from typing import Iterable, Tuple +from typing import Iterable import wcwidth # type: ignore[import-not-found] -def make_width_table() -> Iterable[Tuple[int, int, int]]: +def make_width_table() -> Iterable[tuple[int, int, int]]: start_codepoint = -1 end_codepoint = -1 range_width = -2 @@ -53,9 +53,9 @@ def main() -> None: f.write(f"""# Generated by {basename(__file__)} # wcwidth {wcwidth.__version__} # Unicode {wcwidth.list_versions()[-1]} -from typing import Final, List, Tuple +from typing import Final -WIDTH_TABLE: Final[List[Tuple[int, int, int]]] = [ +WIDTH_TABLE: Final[list[tuple[int, int, int]]] = [ """) for triple in make_width_table(): f.write(f" {triple!r},\n") diff --git a/tests/optional.py b/tests/optional.py index 142da844898..018d602f284 100644 --- a/tests/optional.py +++ b/tests/optional.py @@ -18,7 +18,7 @@ import logging import re from functools import lru_cache -from typing import TYPE_CHECKING, FrozenSet, List, Set +from typing import TYPE_CHECKING import pytest @@ -46,8 +46,8 @@ from _pytest.nodes import Node -ALL_POSSIBLE_OPTIONAL_MARKERS = StashKey[FrozenSet[str]]() -ENABLED_OPTIONAL_MARKERS = StashKey[FrozenSet[str]]() +ALL_POSSIBLE_OPTIONAL_MARKERS = StashKey[frozenset[str]]() +ENABLED_OPTIONAL_MARKERS = StashKey[frozenset[str]]() def pytest_addoption(parser: "Parser") -> None: @@ -69,7 +69,7 @@ def pytest_configure(config: "Config") -> None: """ ot_ini = config.inicfg.get("optional-tests") or [] ot_markers = set() - ot_run: Set[str] = set() + ot_run: set[str] = set() if isinstance(ot_ini, str): ot_ini = ot_ini.strip().split("\n") marker_re = re.compile(r"^\s*(?Pno_)?(?P\w+)(:\s*(?P.*))?") @@ -103,7 +103,7 @@ def pytest_configure(config: "Config") -> None: store[ENABLED_OPTIONAL_MARKERS] = frozenset(ot_run) -def pytest_collection_modifyitems(config: "Config", items: "List[Node]") -> None: +def pytest_collection_modifyitems(config: "Config", items: "list[Node]") -> None: store = config._store all_possible_optional_markers = store[ALL_POSSIBLE_OPTIONAL_MARKERS] enabled_optional_markers = store[ENABLED_OPTIONAL_MARKERS] @@ -120,7 +120,7 @@ def pytest_collection_modifyitems(config: "Config", items: "List[Node]") -> None @lru_cache -def skip_mark(tests: FrozenSet[str]) -> "MarkDecorator": +def skip_mark(tests: frozenset[str]) -> "MarkDecorator": names = ", ".join(sorted(tests)) return pytest.mark.skip(reason=f"Marked with disabled optional tests ({names})") diff --git a/tests/test_black.py b/tests/test_black.py index c448c602713..b26a5659a6f 100644 --- a/tests/test_black.py +++ b/tests/test_black.py @@ -17,19 +17,7 @@ from pathlib import Path, WindowsPath from platform import system from tempfile import TemporaryDirectory -from typing import ( - Any, - Callable, - Dict, - Iterator, - List, - Optional, - Sequence, - Set, - Type, - TypeVar, - Union, -) +from typing import Any, Callable, Iterator, Optional, Sequence, TypeVar, Union from unittest.mock import MagicMock, patch import click @@ -107,11 +95,11 @@ class FakeContext(click.Context): """A fake click Context for when calling functions that need it.""" def __init__(self) -> None: - self.default_map: Dict[str, Any] = {} - self.params: Dict[str, Any] = {} + self.default_map: dict[str, Any] = {} + self.params: dict[str, Any] = {} self.command: click.Command = black.main # Dummy root, since most of the tests don't care about it - self.obj: Dict[str, Any] = {"root": PROJECT_ROOT} + self.obj: dict[str, Any] = {"root": PROJECT_ROOT} class FakeParameter(click.Parameter): @@ -129,7 +117,7 @@ def __init__(self) -> None: def invokeBlack( - args: List[str], exit_code: int = 0, ignore_config: bool = True + args: list[str], exit_code: int = 0, ignore_config: bool = True ) -> None: runner = BlackRunner() if ignore_config: @@ -933,7 +921,7 @@ def test_get_features_used(self) -> None: "with ((a, ((b as c)))): pass", {Feature.PARENTHESIZED_CONTEXT_MANAGERS} ) - def check_features_used(self, source: str, expected: Set[Feature]) -> None: + def check_features_used(self, source: str, expected: set[Feature]) -> None: node = black.lib2to3_parse(source) actual = black.get_features_used(node) msg = f"Expected {expected} but got {actual} for {source!r}" @@ -1365,7 +1353,7 @@ def test_reformat_one_with_stdin_empty(self) -> None: ] def _new_wrapper( - output: io.StringIO, io_TextIOWrapper: Type[io.TextIOWrapper] + output: io.StringIO, io_TextIOWrapper: type[io.TextIOWrapper] ) -> Callable[[Any, Any], io.TextIOWrapper]: def get_output(*args: Any, **kwargs: Any) -> io.TextIOWrapper: if args == (sys.stdout.buffer,): @@ -2350,7 +2338,7 @@ def test_read_cache_line_lengths(self) -> None: def test_cache_key(self) -> None: # Test that all members of the mode enum affect the cache key. for field in fields(Mode): - values: List[Any] + values: list[Any] if field.name == "target_versions": values = [ {TargetVersion.PY312}, @@ -2463,7 +2451,7 @@ def test_gitignore_exclude(self) -> None: gitignore = PathSpec.from_lines( "gitwildmatch", ["exclude/", ".definitely_exclude"] ) - sources: List[Path] = [] + sources: list[Path] = [] expected = [ Path(path / "b/dont_exclude/a.py"), Path(path / "b/dont_exclude/a.pyi"), @@ -2491,7 +2479,7 @@ def test_nested_gitignore(self) -> None: exclude = re.compile(r"") root_gitignore = black.files.get_gitignore(path) report = black.Report() - expected: List[Path] = [ + expected: list[Path] = [ Path(path / "x.py"), Path(path / "root/b.py"), Path(path / "root/c.py"), diff --git a/tests/test_docs.py b/tests/test_docs.py index 8050e0f73c6..7f04a6d3e29 100644 --- a/tests/test_docs.py +++ b/tests/test_docs.py @@ -7,7 +7,7 @@ import re from itertools import islice from pathlib import Path -from typing import Optional, Sequence, Set +from typing import Optional, Sequence import pytest @@ -17,7 +17,7 @@ def check_feature_list( - lines: Sequence[str], expected_feature_names: Set[str], label: str + lines: Sequence[str], expected_feature_names: set[str], label: str ) -> Optional[str]: start_index = lines.index(f"(labels/{label}-features)=\n") if start_index == -1: diff --git a/tests/test_ranges.py b/tests/test_ranges.py index a3028babf50..0ed0e989123 100644 --- a/tests/test_ranges.py +++ b/tests/test_ranges.py @@ -1,7 +1,5 @@ """Test the black.ranges module.""" -from typing import List, Tuple - import pytest from black.ranges import adjusted_lines, sanitized_lines @@ -11,7 +9,7 @@ "lines", [[(1, 1)], [(1, 3)], [(1, 1), (3, 4)]], ) -def test_no_diff(lines: List[Tuple[int, int]]) -> None: +def test_no_diff(lines: list[tuple[int, int]]) -> None: source = """\ import re @@ -32,7 +30,7 @@ def func(): [(0, 8), (3, 1)], ], ) -def test_invalid_lines(lines: List[Tuple[int, int]]) -> None: +def test_invalid_lines(lines: list[tuple[int, int]]) -> None: original_source = """\ import re def foo(arg): @@ -83,7 +81,7 @@ def func(arg1, arg2, arg3): ], ) def test_removals( - lines: List[Tuple[int, int]], adjusted: List[Tuple[int, int]] + lines: list[tuple[int, int]], adjusted: list[tuple[int, int]] ) -> None: original_source = """\ 1. first line @@ -118,7 +116,7 @@ def test_removals( ], ) def test_additions( - lines: List[Tuple[int, int]], adjusted: List[Tuple[int, int]] + lines: list[tuple[int, int]], adjusted: list[tuple[int, int]] ) -> None: original_source = """\ 1. first line @@ -154,7 +152,7 @@ def test_additions( ([(9, 10), (1, 1)], [(1, 1), (9, 9)]), ], ) -def test_diffs(lines: List[Tuple[int, int]], adjusted: List[Tuple[int, int]]) -> None: +def test_diffs(lines: list[tuple[int, int]], adjusted: list[tuple[int, int]]) -> None: original_source = """\ 1. import re 2. def foo(arg): @@ -231,7 +229,7 @@ def test_diffs(lines: List[Tuple[int, int]], adjusted: List[Tuple[int, int]]) -> ], ) def test_sanitize( - lines: List[Tuple[int, int]], sanitized: List[Tuple[int, int]] + lines: list[tuple[int, int]], sanitized: list[tuple[int, int]] ) -> None: source = """\ 1. import re diff --git a/tests/test_tokenize.py b/tests/test_tokenize.py index 3798a9b6a92..71773069546 100644 --- a/tests/test_tokenize.py +++ b/tests/test_tokenize.py @@ -4,7 +4,6 @@ import sys import textwrap from dataclasses import dataclass -from typing import List import black from blib2to3.pgen2 import token, tokenize @@ -18,10 +17,10 @@ class Token: end: tokenize.Coord -def get_tokens(text: str) -> List[Token]: +def get_tokens(text: str) -> list[Token]: """Return the tokens produced by the tokenizer.""" readline = io.StringIO(text).readline - tokens: List[Token] = [] + tokens: list[Token] = [] def tokeneater( type: int, string: str, start: tokenize.Coord, end: tokenize.Coord, line: str @@ -32,7 +31,7 @@ def tokeneater( return tokens -def assert_tokenizes(text: str, tokens: List[Token]) -> None: +def assert_tokenizes(text: str, tokens: list[Token]) -> None: """Assert that the tokenizer produces the expected tokens.""" actual_tokens = get_tokens(text) assert actual_tokens == tokens diff --git a/tests/test_trans.py b/tests/test_trans.py index 784e852e12a..224659ec2c5 100644 --- a/tests/test_trans.py +++ b/tests/test_trans.py @@ -1,11 +1,9 @@ -from typing import List, Tuple - from black.trans import iter_fexpr_spans def test_fexpr_spans() -> None: def check( - string: str, expected_spans: List[Tuple[int, int]], expected_slices: List[str] + string: str, expected_spans: list[tuple[int, int]], expected_slices: list[str] ) -> None: spans = list(iter_fexpr_spans(string)) diff --git a/tests/util.py b/tests/util.py index 46b8b925642..d0b7ff79d47 100644 --- a/tests/util.py +++ b/tests/util.py @@ -8,7 +8,7 @@ from dataclasses import dataclass, field, replace from functools import partial from pathlib import Path -from typing import Any, Collection, Iterator, List, Optional, Tuple +from typing import Any, Collection, Iterator, Optional import black from black.const import DEFAULT_LINE_LENGTH @@ -44,8 +44,8 @@ class TestCaseArgs: mode: black.Mode = field(default_factory=black.Mode) fast: bool = False - minimum_version: Optional[Tuple[int, int]] = None - lines: Collection[Tuple[int, int]] = () + minimum_version: Optional[tuple[int, int]] = None + lines: Collection[tuple[int, int]] = () no_preview_line_length_1: bool = False @@ -95,8 +95,8 @@ def assert_format( mode: black.Mode = DEFAULT_MODE, *, fast: bool = False, - minimum_version: Optional[Tuple[int, int]] = None, - lines: Collection[Tuple[int, int]] = (), + minimum_version: Optional[tuple[int, int]] = None, + lines: Collection[tuple[int, int]] = (), no_preview_line_length_1: bool = False, ) -> None: """Convenience function to check that Black formats as expected. @@ -164,8 +164,8 @@ def _assert_format_inner( mode: black.Mode = DEFAULT_MODE, *, fast: bool = False, - minimum_version: Optional[Tuple[int, int]] = None, - lines: Collection[Tuple[int, int]] = (), + minimum_version: Optional[tuple[int, int]] = None, + lines: Collection[tuple[int, int]] = (), ) -> None: actual = black.format_str(source, mode=mode, lines=lines) if expected is not None: @@ -195,7 +195,7 @@ def get_base_dir(data: bool) -> Path: return DATA_DIR if data else PROJECT_ROOT -def all_data_cases(subdir_name: str, data: bool = True) -> List[str]: +def all_data_cases(subdir_name: str, data: bool = True) -> list[str]: cases_dir = get_base_dir(data) / subdir_name assert cases_dir.is_dir() return [case_path.stem for case_path in cases_dir.iterdir()] @@ -214,18 +214,18 @@ def get_case_path( def read_data_with_mode( subdir_name: str, name: str, data: bool = True -) -> Tuple[TestCaseArgs, str, str]: +) -> tuple[TestCaseArgs, str, str]: """read_data_with_mode('test_name') -> Mode(), 'input', 'output'""" return read_data_from_file(get_case_path(subdir_name, name, data)) -def read_data(subdir_name: str, name: str, data: bool = True) -> Tuple[str, str]: +def read_data(subdir_name: str, name: str, data: bool = True) -> tuple[str, str]: """read_data('test_name') -> 'input', 'output'""" _, input, output = read_data_with_mode(subdir_name, name, data) return input, output -def _parse_minimum_version(version: str) -> Tuple[int, int]: +def _parse_minimum_version(version: str) -> tuple[int, int]: major, minor = version.split(".") return int(major), int(minor) @@ -302,11 +302,11 @@ def parse_mode(flags_line: str) -> TestCaseArgs: ) -def read_data_from_file(file_name: Path) -> Tuple[TestCaseArgs, str, str]: +def read_data_from_file(file_name: Path) -> tuple[TestCaseArgs, str, str]: with open(file_name, encoding="utf8") as test: lines = test.readlines() - _input: List[str] = [] - _output: List[str] = [] + _input: list[str] = [] + _output: list[str] = [] result = _input mode = TestCaseArgs() for line in lines: