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

Method apply_dynamic_class_hook

mypy/semanal.py:3707–3741  ·  view source on GitHub ↗
(self, s: AssignmentStmt)

Source from the content-addressed store, hash-verified

3705 self.try_parse_as_type_expression(s.rvalue)
3706
3707 def apply_dynamic_class_hook(self, s: AssignmentStmt) -> None:
3708 if not isinstance(s.rvalue, CallExpr):
3709 return
3710 fname = ""
3711 call = s.rvalue
3712 while True:
3713 if isinstance(call.callee, RefExpr):
3714 fname = call.callee.fullname
3715 # check if method call
3716 if not fname and isinstance(call.callee, MemberExpr):
3717 callee_expr = call.callee.expr
3718 if isinstance(callee_expr, RefExpr) and callee_expr.fullname:
3719 method_name = call.callee.name
3720 fname = callee_expr.fullname + "." + method_name
3721 elif (
3722 isinstance(callee_expr, IndexExpr)
3723 and isinstance(callee_expr.base, RefExpr)
3724 and isinstance(callee_expr.analyzed, TypeApplication)
3725 ):
3726 method_name = call.callee.name
3727 fname = callee_expr.base.fullname + "." + method_name
3728 elif isinstance(callee_expr, CallExpr):
3729 # check if chain call
3730 call = callee_expr
3731 continue
3732 break
3733 if not fname:
3734 return
3735 hook = self.plugin.get_dynamic_class_hook(fname)
3736 if not hook:
3737 return
3738 for lval in s.lvalues:
3739 if not isinstance(lval, NameExpr):
3740 continue
3741 hook(DynamicClassDefContext(call, lval.name, self))
3742
3743 def unwrap_final(self, s: AssignmentStmt) -> bool:
3744 """Strip Final[...] if present in an assignment.

Callers 1

visit_assignment_stmtMethod · 0.95

Calls 3

isinstanceFunction · 0.85

Tested by

no test coverage detected