MCPcopy Index your code
hub / github.com/sphinx-doc/sphinx / _UnparseVisitor

Class _UnparseVisitor

sphinx/pycode/ast.py:52–209  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

50
51# a greatly cut-down version of `ast._Unparser`
52class _UnparseVisitor(ast.NodeVisitor):
53 def __init__(self, code: str = '') -> None:
54 self.code = code
55
56 def _visit_op(self, node: ast.AST) -> str:
57 return OPERATORS[node.__class__]
58
59 for _op in OPERATORS:
60 locals()[f'visit_{_op.__name__}'] = _visit_op
61
62 def visit_arg(self, node: ast.arg) -> str:
63 if node.annotation:
64 return f'{node.arg}: {self.visit(node.annotation)}'
65 else:
66 return node.arg
67
68 def _visit_arg_with_default(self, arg: ast.arg, default: ast.AST | None) -> str:
69 """Unparse a single argument to a string."""
70 name = self.visit(arg)
71 if default:
72 if arg.annotation:
73 name += ' = %s' % self.visit(default)
74 else:
75 name += '=%s' % self.visit(default)
76 return name
77
78 def visit_arguments(self, node: ast.arguments) -> str:
79 defaults: list[ast.expr | None] = list(node.defaults)
80 positionals = len(node.args)
81 posonlyargs = len(node.posonlyargs)
82 positionals += posonlyargs
83 for _ in range(len(defaults), positionals):
84 defaults.insert(0, None)
85
86 kw_defaults: list[ast.expr | None] = list(node.kw_defaults)
87 for _ in range(len(kw_defaults), len(node.kwonlyargs)):
88 kw_defaults.insert(0, None)
89
90 args: list[str] = [
91 self._visit_arg_with_default(arg, defaults[i])
92 for i, arg in enumerate(node.posonlyargs)
93 ]
94
95 if node.posonlyargs:
96 args.append('/')
97
98 for i, arg in enumerate(node.args):
99 args.append(self._visit_arg_with_default(arg, defaults[i + posonlyargs]))
100
101 if node.vararg:
102 args.append('*' + self.visit(node.vararg))
103
104 if node.kwonlyargs and not node.vararg:
105 args.append('*')
106 for i, arg in enumerate(node.kwonlyargs):
107 args.append(self._visit_arg_with_default(arg, kw_defaults[i]))
108
109 if node.kwarg:

Callers 1

unparseFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…