(self, s: AssignmentStmt)
| 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. |
no test coverage detected