MCPcopy Index your code
hub / github.com/python/mypy / AliasPrinter

Class AliasPrinter

mypy/stubgen.py:281–428  ·  view source on GitHub ↗

Visitor used to collect type aliases _and_ type variable definitions. Visit r.h.s of the definition to get the string representation of type alias.

Source from the content-addressed store, hash-verified

279
280
281class AliasPrinter(NodeVisitor[str]):
282 """Visitor used to collect type aliases _and_ type variable definitions.
283
284 Visit r.h.s of the definition to get the string representation of type alias.
285 """
286
287 def __init__(self, stubgen: ASTStubGenerator) -> None:
288 self.stubgen = stubgen
289 super().__init__()
290
291 def visit_call_expr(self, node: CallExpr) -> str:
292 # Call expressions are not usually types, but we also treat `X = TypeVar(...)` as a
293 # type alias that has to be preserved (even if TypeVar is not the same as an alias)
294 callee = node.callee.accept(self)
295 args = []
296 for name, arg, kind in zip(node.arg_names, node.args, node.arg_kinds):
297 if kind == ARG_POS:
298 args.append(arg.accept(self))
299 elif kind == ARG_STAR:
300 args.append("*" + arg.accept(self))
301 elif kind == ARG_STAR2:
302 args.append("**" + arg.accept(self))
303 elif kind == ARG_NAMED:
304 args.append(f"{name}={arg.accept(self)}")
305 else:
306 raise ValueError(f"Unknown argument kind {kind} in call")
307 return f"{callee}({', '.join(args)})"
308
309 def _visit_ref_expr(self, node: NameExpr | MemberExpr) -> str:
310 fullname = self.stubgen.get_fullname(node)
311 if fullname in TYPING_BUILTIN_REPLACEMENTS:
312 return self.stubgen.add_name(TYPING_BUILTIN_REPLACEMENTS[fullname], require=False)
313 qualname = get_qualified_name(node)
314 self.stubgen.import_tracker.require_name(qualname)
315 return qualname
316
317 def visit_name_expr(self, node: NameExpr) -> str:
318 return self._visit_ref_expr(node)
319
320 def visit_member_expr(self, o: MemberExpr) -> str:
321 return self._visit_ref_expr(o)
322
323 def _visit_literal_node(
324 self, node: StrExpr | BytesExpr | IntExpr | FloatExpr | ComplexExpr
325 ) -> str:
326 return repr(node.value)
327
328 def visit_str_expr(self, node: StrExpr) -> str:
329 return self._visit_literal_node(node)
330
331 def visit_bytes_expr(self, node: BytesExpr) -> str:
332 return f"b{self._visit_literal_node(node)}"
333
334 def visit_int_expr(self, node: IntExpr) -> str:
335 return self._visit_literal_node(node)
336
337 def visit_float_expr(self, node: FloatExpr) -> str:
338 return self._visit_literal_node(node)

Callers 9

process_decoratorMethod · 0.85
visit_class_defMethod · 0.85
get_base_typesMethod · 0.85
get_class_decoratorsMethod · 0.85
process_typeddictMethod · 0.85
process_typealiasMethod · 0.85
visit_type_alias_stmtMethod · 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…