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

Method process_lvalue

mypy/server/deps.py:521–557  ·  view source on GitHub ↗

Generate additional dependencies for an lvalue.

(self, lvalue: Expression)

Source from the content-addressed store, hash-verified

519 self.add_dependency(make_trigger(fname), make_trigger(lv.fullname))
520
521 def process_lvalue(self, lvalue: Expression) -> None:
522 """Generate additional dependencies for an lvalue."""
523 if isinstance(lvalue, IndexExpr):
524 self.add_operator_method_dependency(lvalue.base, "__setitem__")
525 elif isinstance(lvalue, NameExpr):
526 if lvalue.kind in (MDEF, GDEF):
527 # Assignment to an attribute in the class body, or direct assignment to a
528 # global variable.
529 lvalue_type = self.get_non_partial_lvalue_type(lvalue)
530 type_triggers = self.get_type_triggers(lvalue_type)
531 attr_trigger = make_trigger(f"{self.scope.current_full_target()}.{lvalue.name}")
532 for type_trigger in type_triggers:
533 self.add_dependency(type_trigger, attr_trigger)
534 elif isinstance(lvalue, MemberExpr):
535 if self.is_self_member_ref(lvalue) and lvalue.is_new_def:
536 node = lvalue.node
537 if isinstance(node, Var):
538 info = node.info
539 if info and has_user_bases(info):
540 # Recheck Liskov for self definitions
541 self.add_dependency(make_trigger(info.fullname + "." + lvalue.name))
542 if lvalue.kind is None:
543 # Reference to a non-module attribute
544 if lvalue.expr not in self.type_map:
545 # Unreachable assignment -> not checked so no dependencies to generate.
546 return
547 object_type = self.type_map[lvalue.expr]
548 lvalue_type = self.get_non_partial_lvalue_type(lvalue)
549 type_triggers = self.get_type_triggers(lvalue_type)
550 for attr_trigger in self.attribute_triggers(object_type, lvalue.name):
551 for type_trigger in type_triggers:
552 self.add_dependency(type_trigger, attr_trigger)
553 elif isinstance(lvalue, TupleExpr):
554 for item in lvalue.items:
555 self.process_lvalue(item)
556 elif isinstance(lvalue, StarExpr):
557 self.process_lvalue(lvalue.expr)
558
559 def is_self_member_ref(self, memberexpr: MemberExpr) -> bool:
560 """Does memberexpr to refer to an attribute of self?"""

Callers 3

visit_assignment_stmtMethod · 0.95
visit_for_stmtMethod · 0.95

Calls 10

get_type_triggersMethod · 0.95
add_dependencyMethod · 0.95
is_self_member_refMethod · 0.95
attribute_triggersMethod · 0.95
make_triggerFunction · 0.90
isinstanceFunction · 0.85
has_user_basesFunction · 0.85
current_full_targetMethod · 0.80

Tested by

no test coverage detected