summaryrefslogtreecommitdiff
path: root/sphinx/pycode/ast.py
diff options
context:
space:
mode:
authorEric Wieser <wieser.eric@gmail.com>2020-04-16 18:17:24 +0100
committerEric Wieser <wieser.eric@gmail.com>2020-04-16 18:17:24 +0100
commit18a84d29fd6c3c2d6ab45d336fb18542c820cdbf (patch)
tree74bbf3dd8f6eb650c4bf3cbf348e2ebb46594e2c /sphinx/pycode/ast.py
parent2fac698e764ac28dec86844624f4ac415ea11a37 (diff)
downloadsphinx-git-18a84d29fd6c3c2d6ab45d336fb18542c820cdbf.tar.gz
Deduplicate some code in `pycode.ast`
Diffstat (limited to 'sphinx/pycode/ast.py')
-rw-r--r--sphinx/pycode/ast.py37
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))