mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merge pull request #7494 from eric-wieser/deduplicate-parse-arguments
Deduplicate some code in `pycode.ast`
This commit is contained in:
commit
836e2e405c
@ -9,7 +9,7 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from typing import Dict, List, Type
|
from typing import Dict, List, Type, Optional
|
||||||
|
|
||||||
if sys.version_info > (3, 8):
|
if sys.version_info > (3, 8):
|
||||||
import ast
|
import ast
|
||||||
@ -125,6 +125,17 @@ def unparse(node: ast.AST) -> str:
|
|||||||
raise NotImplementedError('Unable to parse %s object' % type(node).__name__)
|
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:
|
def unparse_arguments(node: ast.arguments) -> str:
|
||||||
"""Unparse an arguments to string."""
|
"""Unparse an arguments to string."""
|
||||||
defaults = list(node.defaults)
|
defaults = list(node.defaults)
|
||||||
@ -143,25 +154,13 @@ def unparse_arguments(node: ast.arguments) -> str:
|
|||||||
args = [] # type: List[str]
|
args = [] # type: List[str]
|
||||||
if hasattr(node, "posonlyargs"): # for py38+
|
if hasattr(node, "posonlyargs"): # for py38+
|
||||||
for i, arg in enumerate(node.posonlyargs): # type: ignore
|
for i, arg in enumerate(node.posonlyargs): # type: ignore
|
||||||
name = unparse(arg)
|
args.append(_unparse_arg(arg, defaults[i]))
|
||||||
if defaults[i]:
|
|
||||||
if arg.annotation:
|
|
||||||
name += " = %s" % unparse(defaults[i])
|
|
||||||
else:
|
|
||||||
name += "=%s" % unparse(defaults[i])
|
|
||||||
args.append(name)
|
|
||||||
|
|
||||||
if node.posonlyargs: # type: ignore
|
if node.posonlyargs: # type: ignore
|
||||||
args.append('/')
|
args.append('/')
|
||||||
|
|
||||||
for i, arg in enumerate(node.args):
|
for i, arg in enumerate(node.args):
|
||||||
name = unparse(arg)
|
args.append(_unparse_arg(arg, defaults[i + posonlyargs]))
|
||||||
if defaults[i + posonlyargs]:
|
|
||||||
if arg.annotation:
|
|
||||||
name += " = %s" % unparse(defaults[i + posonlyargs])
|
|
||||||
else:
|
|
||||||
name += "=%s" % unparse(defaults[i + posonlyargs])
|
|
||||||
args.append(name)
|
|
||||||
|
|
||||||
if node.vararg:
|
if node.vararg:
|
||||||
args.append("*" + unparse(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:
|
if node.kwonlyargs and not node.vararg:
|
||||||
args.append('*')
|
args.append('*')
|
||||||
for i, arg in enumerate(node.kwonlyargs):
|
for i, arg in enumerate(node.kwonlyargs):
|
||||||
name = unparse(arg)
|
args.append(_unparse_arg(arg, kw_defaults[i]))
|
||||||
if kw_defaults[i]:
|
|
||||||
if arg.annotation:
|
|
||||||
name += " = %s" % unparse(kw_defaults[i])
|
|
||||||
else:
|
|
||||||
name += "=%s" % unparse(kw_defaults[i])
|
|
||||||
args.append(name)
|
|
||||||
|
|
||||||
if node.kwarg:
|
if node.kwarg:
|
||||||
args.append("**" + unparse(node.kwarg))
|
args.append("**" + unparse(node.kwarg))
|
||||||
|
Loading…
Reference in New Issue
Block a user