diff options
author | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2020-04-18 21:54:31 +0900 |
---|---|---|
committer | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2020-04-18 21:54:31 +0900 |
commit | adad0e62bb25ce172eb1aa678ba9c441ed1f145c (patch) | |
tree | 2f0627e4e60e2d86cacc062da5cada1eb1b1cd14 /sphinx/pycode | |
parent | c90b23c2c7b7e9a8371223e354554a6fa5529708 (diff) | |
parent | 21341f4b6cca355edf410b50b9cc37c075e4e193 (diff) | |
download | sphinx-git-adad0e62bb25ce172eb1aa678ba9c441ed1f145c.tar.gz |
Merge branch '3.x'
Diffstat (limited to 'sphinx/pycode')
-rw-r--r-- | sphinx/pycode/ast.py | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/sphinx/pycode/ast.py b/sphinx/pycode/ast.py index fb2a7152d..c885db494 100644 --- a/sphinx/pycode/ast.py +++ b/sphinx/pycode/ast.py @@ -9,7 +9,7 @@ """ import sys -from typing import Dict, List, Type +from typing import Dict, List, Type, Optional if sys.version_info > (3, 8): import ast @@ -125,6 +125,17 @@ def unparse(node: ast.AST) -> str: raise NotImplementedError('Unable to parse %s object' % type(node).__name__) +def _unparse_arg(arg: ast.arg, default: Optional[ast.AST]) -> str: + """Unparse a single argument to a string.""" + name = unparse(arg) + if default: + if arg.annotation: + name += " = %s" % unparse(default) + else: + name += "=%s" % unparse(default) + return name + + def unparse_arguments(node: ast.arguments) -> str: """Unparse an arguments to string.""" defaults = list(node.defaults) @@ -143,25 +154,13 @@ def unparse_arguments(node: ast.arguments) -> str: args = [] # type: List[str] if hasattr(node, "posonlyargs"): # for py38+ for i, arg in enumerate(node.posonlyargs): # type: ignore - name = unparse(arg) - if defaults[i]: - if arg.annotation: - name += " = %s" % unparse(defaults[i]) - else: - name += "=%s" % unparse(defaults[i]) - args.append(name) + args.append(_unparse_arg(arg, defaults[i])) if node.posonlyargs: # type: ignore args.append('/') for i, arg in enumerate(node.args): - name = unparse(arg) - if defaults[i + posonlyargs]: - if arg.annotation: - name += " = %s" % unparse(defaults[i + posonlyargs]) - else: - name += "=%s" % unparse(defaults[i + posonlyargs]) - args.append(name) + args.append(_unparse_arg(arg, defaults[i + posonlyargs])) if node.vararg: args.append("*" + unparse(node.vararg)) @@ -169,13 +168,7 @@ def unparse_arguments(node: ast.arguments) -> str: if node.kwonlyargs and not node.vararg: args.append('*') for i, arg in enumerate(node.kwonlyargs): - name = unparse(arg) - if kw_defaults[i]: - if arg.annotation: - name += " = %s" % unparse(kw_defaults[i]) - else: - name += "=%s" % unparse(kw_defaults[i]) - args.append(name) + args.append(_unparse_arg(arg, kw_defaults[i])) if node.kwarg: args.append("**" + unparse(node.kwarg)) |