Fix allcaptures()/allspans() return type in regex stubs - #16319
Open
afonsojanu wants to merge 1 commit into
Open
Fix allcaptures()/allspans() return type in regex stubs#16319afonsojanu wants to merge 1 commit into
afonsojanu wants to merge 1 commit into
Conversation
Both were typed as fixed one-element tuples, tuple[list[AnyStr]] and tuple[list[tuple[int, int]]], even though the runtime always returns one entry per capture group, a count that varies with the pattern. A type checker refuses to unpack or index past the first element of a fixed-length tuple, so any code doing that against the real, variable return value failed to type-check even though it ran correctly. Changed both to the variable-length tuple form, matching what the neighboring captures() method already uses for the same shape. Fixes python#566
Contributor
|
According to mypy_primer, this change has no effect on the checked open source code. 🤖🎉 |
Contributor
|
Thank you! LGTM, but could you remove the tests? In typeshed, we only add regression tests for functions and classes which are known to have caused complex problems in the past, or where stubs are difficult to get right. 100% test coverage for typeshed is neither necessary nor desirable, as it would lead to code duplication. See And for the record, the issue number refers to the following problem in the library itself: mrabarnett/mrab-regex#566 |
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.
Fixes #566
allcaptures()andallspans()were typed as fixed one-element tuples (tuple[list[AnyStr]]andtuple[list[tuple[int, int]]]), but at runtime they always return one entry per capture group in the pattern, plus the whole match, which is a count that varies from pattern to pattern. A fixed-length-1 tuple is exactly wrong for that shape: a type checker refuses to unpack or index past the first element even though the real return value routinely has more than one.Changed both to the variable-length tuple form, matching what
captures()right above them in the same stub already uses for the identical shape.Added a regression test asserting the corrected static type on both methods, and confirmed it fails with the exact error the issue reports (an
assert-typemismatch against the old fixed-length type) when the stub change is reverted.python tests/runtests.py --run-stubtest stubs/regex: pre-commit, structure check, Pyright, ty, pyrefly, mypy, stubtest, and both regression tests all pass.