2.2 KiB
2.2 KiB
Typing Review Workflow
This workflow is distilled from practical typing modernization passes and is designed for latest-syntax-first upgrades.
Step-by-Step Process
- Identify the Python baseline from project config (
requires-python, lint target version, toolchain constraints). - Scan target files for legacy typing patterns and repeated opportunities.
- Apply highest-value modern syntax updates first:
typing.List/typing.Dict-> built-in generics.Optional[T]/Union[A, B]->T | None/A | B.
- Upgrade generic declarations to PEP 695 syntax where baseline allows:
TypeVarmodule globals -> local type parameters in classes/functions.
- Tighten domain contracts where clear:
- replace unconstrained
strwithLiteral[...]for finite known values. - use
Selffor fluent APIs.
- replace unconstrained
- Keep edits minimal and avoid behavior changes unless requested.
- Validate with lint and editor diagnostics.
- Report applied changes, hard-blocker deferrals, and sources consulted.
Decision Points and Branching
- If Python baseline is below 3.12:
- use the newest syntax available under that baseline, and document exactly what blocked PEP 695.
- If a legacy annotation is public API and downstream tooling compatibility is unknown:
- still modernize syntax unless there is a confirmed breakage risk with a named downstream constraint.
- If replacing
TypeVarwith PEP 695 affects readability debates only:- still prefer PEP 695; readability preference alone is not a blocker.
- If a stricter type (for example
Literal) may reject existing runtime inputs:- apply only when the input contract is already finite; otherwise defer with a contract-change note.
Quality Criteria
- All edits are syntax-valid for the target Python versions.
- Lint and diagnostics pass for edited files.
- Runtime behavior is unchanged for modernization-only tasks.
- Recommendations cite authoritative sources.
- Output clearly separates "changed now" from hard-blocked follow-up items.
Suggested Validation Commands
uv run ruff check <paths>uv run pytest -q(or targeted tests where available)
Use repository-preferred test invocation conventions when they differ.