stubgen: Fix infer_sig_from_docstring to capture positional-only and keyword-only argument separators #20164
+160
−40
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.
The
DocStringParserwas previously discarding/and*separators when parsing function signatures from docstrings, leading to inaccurate stub generation for functions with positional-only or keyword-only arguments.Changes:
/and*as ArgSig entries in parsed function signaturesDocStringParseris used byinfer_sig_from_docstringwhich is the primary entry-point for all docstring parsing. Stripping positional-only and kw-only separators is a form of data loss: it means that anySignatureGeneratorthat intends to use these parsed signatures (such asmypy.stubgenc.DocstringSignatureGenerator) will generate inaccurate stubs.Additionally, any signatures that possessed
/or*failed to parse multiple overloads. I added tests that confirm multiple overloads could be successfully parsed byinfer_sig_from_docstring, and fixed the problems related to/or*args.