mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix #7756: py domain: The default value for posonlyarg is not shown
This commit is contained in:
1
CHANGES
1
CHANGES
@@ -127,6 +127,7 @@ Bugs fixed
|
||||
* #7646: handle errors on event handlers
|
||||
* #4187: LaTeX: EN DASH disappears from PDF bookmarks in Japanese documents
|
||||
* #7701: LaTeX: Anonymous indirect hyperlink target causes duplicated labels
|
||||
* #7756: py domain: The default value for positional only argument is not shown
|
||||
* C++, fix rendering and xrefs in nested names explicitly starting
|
||||
in global scope, e.g., ``::A::B``.
|
||||
* C, fix rendering and xrefs in nested names explicitly starting
|
||||
|
||||
@@ -518,19 +518,34 @@ def signature_from_str(signature: str) -> inspect.Signature:
|
||||
|
||||
# parameters
|
||||
args = definition.args
|
||||
defaults = list(args.defaults)
|
||||
params = []
|
||||
if hasattr(args, "posonlyargs"):
|
||||
posonlyargs = len(args.posonlyargs) # type: ignore
|
||||
positionals = posonlyargs + len(args.args)
|
||||
else:
|
||||
posonlyargs = 0
|
||||
positionals = len(args.args)
|
||||
|
||||
for _ in range(len(defaults), positionals):
|
||||
defaults.insert(0, Parameter.empty)
|
||||
|
||||
if hasattr(args, "posonlyargs"):
|
||||
for arg in args.posonlyargs: # type: ignore
|
||||
for i, arg in enumerate(args.posonlyargs): # type: ignore
|
||||
if defaults[i] is Parameter.empty:
|
||||
default = Parameter.empty
|
||||
else:
|
||||
default = ast_unparse(defaults[i])
|
||||
|
||||
annotation = ast_unparse(arg.annotation) or Parameter.empty
|
||||
params.append(Parameter(arg.arg, Parameter.POSITIONAL_ONLY,
|
||||
annotation=annotation))
|
||||
default=default, annotation=annotation))
|
||||
|
||||
for i, arg in enumerate(args.args):
|
||||
if len(args.args) - i <= len(args.defaults):
|
||||
default = ast_unparse(args.defaults[-len(args.args) + i])
|
||||
else:
|
||||
if defaults[i + posonlyargs] is Parameter.empty:
|
||||
default = Parameter.empty
|
||||
else:
|
||||
default = ast_unparse(defaults[i + posonlyargs])
|
||||
|
||||
annotation = ast_unparse(arg.annotation) or Parameter.empty
|
||||
params.append(Parameter(arg.arg, Parameter.POSITIONAL_OR_KEYWORD,
|
||||
|
||||
@@ -335,10 +335,14 @@ def test_signature_from_str_kwonly_args():
|
||||
@pytest.mark.skipif(sys.version_info < (3, 8),
|
||||
reason='python-3.8 or above is required')
|
||||
def test_signature_from_str_positionaly_only_args():
|
||||
sig = inspect.signature_from_str('(a, /, b)')
|
||||
assert list(sig.parameters.keys()) == ['a', 'b']
|
||||
sig = inspect.signature_from_str('(a, b=0, /, c=1)')
|
||||
assert list(sig.parameters.keys()) == ['a', 'b', 'c']
|
||||
assert sig.parameters['a'].kind == Parameter.POSITIONAL_ONLY
|
||||
assert sig.parameters['b'].kind == Parameter.POSITIONAL_OR_KEYWORD
|
||||
assert sig.parameters['a'].default == Parameter.empty
|
||||
assert sig.parameters['b'].kind == Parameter.POSITIONAL_ONLY
|
||||
assert sig.parameters['b'].default == '0'
|
||||
assert sig.parameters['c'].kind == Parameter.POSITIONAL_OR_KEYWORD
|
||||
assert sig.parameters['c'].default == '1'
|
||||
|
||||
|
||||
def test_signature_from_str_invalid():
|
||||
|
||||
Reference in New Issue
Block a user