[pyupgrade] Expand docs on reusable TypeVars and scoping (UP046)#24153
Merged
ntBre merged 5 commits intoApr 22, 2026
Merged
Conversation
Expand the "Why is this bad?" section to explain that old-style TypeVars are confusingly allocated at module scope while only meaningful within their generic context, which PEP 695 eliminates. Add a second example showing how reusable TypeVars shared across multiple classes can be migrated using PEP 695 type aliases for the bound. Closes astral-sh#18894 Signed-off-by: majiayu000 <[email protected]>
- Link "source of confusion" to PEP 695's Points of Confusion section - Clarify that shared TypeVars get scoped parameters per class - Add note on semantic equivalence of old vs new style Signed-off-by: majiayu000 <[email protected]>
|
ntBre
reviewed
Mar 24, 2026
Contributor
ntBre
left a comment
There was a problem hiding this comment.
Thanks! This overall looks good to me, I just had a couple of minor suggestions about the text, and it looks like there's a formatting issue in CI.
- Pluralize "Example" to "Examples" heading - Restructure reusable TypeVar text for clearer reading order Signed-off-by: majiayu000 <[email protected]>
pyupgrade] Expand docs on reusable TypeVars and scoping (UP046)
This was referenced Apr 27, 2026
nicopauss
pushed a commit
to Intersec/lib-common
that referenced
this pull request
Jun 4, 2026
##### [\`v0.15.12\`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01512) Released on 2026-04-24. ##### Preview features - Implement `#ruff:file-ignore` file-level suppressions ([#23599](astral-sh/ruff#23599)) - Implement `#ruff:ignore` logical-line suppressions ([#23404](astral-sh/ruff#23404)) - Revert preview changes to displayed diagnostic severity in LSP ([#24789](astral-sh/ruff#24789)) - \[`airflow`] Implement `task-branch-as-short-circuit` (`AIR004`) ([#23579](astral-sh/ruff#23579)) - \[`flake8-bugbear`] Fix `break`/`continue` handling in `loop-iterator-mutation` (`B909`) ([#24440](astral-sh/ruff#24440)) - \[`pylint`] Fix `PLC2701` for type parameter scopes ([#24576](astral-sh/ruff#24576)) ##### Rule changes - \[`pandas-vet`] Suggest `.array` as well in `PD011` ([#24805](astral-sh/ruff#24805)) ##### CLI - Respect default Unix permissions for cache files ([#24794](astral-sh/ruff#24794)) ##### Documentation - \[`pylint`] Fix `PLR0124` description not to claim self-comparison always returns the same value ([#24749](astral-sh/ruff#24749)) - \[`pyupgrade`] Expand docs on reusable `TypeVar`s and scoping (`UP046`) ([#24153](astral-sh/ruff#24153)) - Improve rules table accessibility ([#24711](astral-sh/ruff#24711)) ##### Contributors - [@dylwil3](https://github.com/dylwil3) - [@AlexWaygood](https://github.com/AlexWaygood) - [@woodruffw](https://github.com/woodruffw) - [@avasis-ai](https://github.com/avasis-ai) - [@Dev-iL](https://github.com/Dev-iL) - [@denyszhak](https://github.com/denyszhak) - [@ShipItAndPray](https://github.com/ShipItAndPray) - [@anishgirianish](https://github.com/anishgirianish) - [@augustelalande](https://github.com/augustelalande) - [@amyreese](https://github.com/amyreese) - [@majiayu000](https://github.com/majiayu000) ##### [\`v0.15.11\`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#01511) Released on 2026-04-16. ##### Preview features - \[`ruff`] Ignore `RUF029` when function is decorated with `asynccontextmanager` ([#24642](astral-sh/ruff#24642)) - \[`airflow`] Implement `airflow-xcom-pull-in-template-string` (`AIR201`) ([#23583](astral-sh/ruff#23583)) - \[`flake8-bandit`] Fix `S103` false positives and negatives in mask analysis ([#24424](astral-sh/ruff#24424)) ##### Bug fixes - \[`flake8-async`] Omit overridden methods for `ASYNC109` ([#24648](astral-sh/ruff#24648)) ##### Documentation - \[`flake8-async`] Add override mention to `ASYNC109` docs ([#24666](astral-sh/ruff#24666)) - Update Neovim config examples to use `vim.lsp.config` ([#24577](astral-sh/ruff#24577)) ##### Contributors - [@augustelalande](https://github.com/augustelalande) - [@anishgirianish](https://github.com/anishgirianish) - [@benberryallwood](https://github.com/benberryallwood) - [@charliermarsh](https://github.com/charliermarsh) - [@Dev-iL](https://github.com/Dev-iL) Renovate-Branch: renovate/2024.6-ruff-0.15.x Change-Id: I2c5de44f14ce3133db71161eae18c7b43f7ba09b Priv-Id: 9c1a7f10043a2db2338a90de9a62a4d7989df14d
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
TypeVarvariables are allocated at module scope but semantically meaningful only within their generic context, and that PEP 695 eliminates this confusion.TypeVars shared across multiple classes can be migrated to PEP 695 syntax using type aliases for the bound.Based on the discussion in #18894 and the suggestions from @AlexWaygood.
Closes #18894
Test plan
Documentation-only change. Verified with
cargo dev generate-all,cargo clippy, andcargo build.