diff options
author | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2020-05-24 17:11:10 +0300 |
---|---|---|
committer | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2020-05-31 17:22:20 +0300 |
commit | a59f83b6bdaf86dec6058cf72ae12eae967426c5 (patch) | |
tree | cf098636d0f8b7849483d668383fe5956c427299 /sphinx | |
parent | c063c9c0fe383a20da613448d1f606b9635773b9 (diff) |
Add sphinx.util.inspect:signature_from_ast()
Diffstat (limited to 'sphinx')
-rw-r--r-- | sphinx/util/inspect.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py index 0f3f47562..d4928c847 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -527,10 +527,14 @@ def stringify_signature(sig: inspect.Signature, show_annotation: bool = True, def signature_from_str(signature: str) -> inspect.Signature: """Create a Signature object from string.""" module = ast.parse('def func' + signature + ': pass') - definition = cast(ast.FunctionDef, module.body[0]) # type: ignore + function = cast(ast.FunctionDef, module.body[0]) # type: ignore - # parameters - args = definition.args + return signature_from_ast(function) + + +def signature_from_ast(node: ast.FunctionDef) -> inspect.Signature: + """Create a Signature object from AST *node*.""" + args = node.args defaults = list(args.defaults) params = [] if hasattr(args, "posonlyargs"): @@ -580,7 +584,7 @@ def signature_from_str(signature: str) -> inspect.Signature: params.append(Parameter(args.kwarg.arg, Parameter.VAR_KEYWORD, annotation=annotation)) - return_annotation = ast_unparse(definition.returns) or Parameter.empty + return_annotation = ast_unparse(node.returns) or Parameter.empty return inspect.Signature(params, return_annotation=return_annotation) |