|
1 | 1 | #!/usr/bin/env python3 |
2 | 2 | from __future__ import annotations |
3 | 3 |
|
| 4 | +import collections |
4 | 5 | import os |
5 | 6 | import sys |
6 | | -from collections import defaultdict |
7 | 7 |
|
8 | 8 | import flake8_typing_imports |
9 | 9 | import mypy_extensions |
@@ -50,53 +50,50 @@ def main() -> int: |
50 | 50 | for attr in attrs: |
51 | 51 | min_contiguous_versions.setdefault(attr, v) |
52 | 52 |
|
53 | | - symbols: dict[flake8_typing_imports.Version, set[str]] = defaultdict(set) |
| 53 | + symbols = collections.defaultdict(set) |
54 | 54 | for a, v in min_contiguous_versions.items(): |
55 | 55 | symbols[v].add(a) |
56 | 56 |
|
57 | 57 | # --pyXX-plus assumes the min --pyXX so group symbols by their |
58 | 58 | # rounded up major version |
59 | | - symbols_rounded_up: dict[tuple[int, int], set[str]] = defaultdict(set) |
| 59 | + symbols_rounded_up: dict[tuple[int, int], set[str]] |
| 60 | + symbols_rounded_up = collections.defaultdict(set) |
60 | 61 | for v, attrs in sorted(symbols.items()): |
61 | 62 | symbols_rounded_up[v.major, v.minor + int(v.patch != 0)] |= attrs |
62 | 63 |
|
63 | 64 | # combine 3.5 and 3.6 because this lib is 3.7+ |
64 | 65 | symbols_rounded_up[(3, 6)] |= symbols_rounded_up.pop((3, 5)) |
65 | 66 |
|
66 | | - deltas: dict[tuple[int, int], set[str]] = defaultdict(set) |
| 67 | + deltas = collections.defaultdict(set) |
67 | 68 | prev: set[str] = set() |
68 | 69 | for v, attrs in sorted(symbols_rounded_up.items()): |
69 | 70 | deltas[v] = attrs - prev |
70 | 71 | prev = attrs |
71 | 72 |
|
72 | | - mypy_extensions_added: dict[tuple[int, int], set[str]] = {} |
73 | | - typing_extensions_added: dict[tuple[int, int], set[str]] = defaultdict(set) |
| 73 | + replaces: dict[tuple[int, int], set[str]] = collections.defaultdict(set) |
74 | 74 | for v, attrs in deltas.items(): |
75 | | - mypy_extensions_added[v] = attrs & mypy_extensions_all |
76 | | - typing_extensions_added[v] = attrs & typing_extensions_all |
| 75 | + replaces[v] |= { |
| 76 | + f'mypy_extensions=typing:{s}' |
| 77 | + for s in attrs & mypy_extensions_all |
| 78 | + } | { |
| 79 | + f'typing_extensions=typing:{s}' |
| 80 | + for s in attrs & typing_extensions_all |
| 81 | + } |
77 | 82 | for v, attrs in CUSTOM_TYPING_EXT_SYMBOLS.items(): |
78 | | - typing_extensions_added[v] |= attrs |
| 83 | + replaces[v] |= {f'typing_extensions=typing:{s}' for s in attrs} |
79 | 84 |
|
80 | 85 | print(f'# GENERATED VIA {os.path.basename(sys.argv[0])}') |
81 | 86 | print('# Using:') |
82 | 87 | print(f'# flake8-typing-imports=={flake8_typing_imports_version}') |
83 | | - print(f'# mypy_extensions=={mypy_extensions_version}') |
84 | | - print(f'# typing_extensions=={typing_extensions_version}') |
| 88 | + print(f'# mypy-extensions=={mypy_extensions_version}') |
| 89 | + print(f'# typing-extensions=={typing_extensions_version}') |
85 | 90 |
|
86 | | - for k, v in sorted(mypy_extensions_added.items()): |
| 91 | + for k, v in sorted(replaces.items()): |
87 | 92 | if not v: |
88 | 93 | continue |
89 | 94 | print(f'REPLACES[{k}].update((') |
90 | | - for symbol in sorted(v): |
91 | | - print(f" 'mypy_extensions=typing:{symbol}',") |
92 | | - print('))') |
93 | | - |
94 | | - for k, v in sorted(typing_extensions_added.items()): |
95 | | - if not v: |
96 | | - continue |
97 | | - print(f'REPLACES[{k}].update((') |
98 | | - for symbol in sorted(v): |
99 | | - print(f" 'typing_extensions=typing:{symbol}',") |
| 95 | + for replace in sorted(v): |
| 96 | + print(f' {replace!r},') |
100 | 97 | print('))') |
101 | 98 |
|
102 | 99 | print('# END GENERATED') |
|
0 commit comments