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

Method visit_assignment_stmt

mypy/server/deps.py:435–519  ·  view source on GitHub ↗
(self, o: AssignmentStmt)

Source from the content-addressed store, hash-verified

433 super().visit_block(o)
434
435 def visit_assignment_stmt(self, o: AssignmentStmt) -> None:
436 rvalue = o.rvalue
437 if isinstance(rvalue, CallExpr) and isinstance(rvalue.analyzed, TypeVarExpr):
438 analyzed = rvalue.analyzed
439 self.add_type_dependencies(
440 analyzed.upper_bound, target=make_trigger(analyzed.fullname)
441 )
442 for val in analyzed.values:
443 self.add_type_dependencies(val, target=make_trigger(analyzed.fullname))
444 # We need to re-analyze the definition if bound or value is deleted.
445 super().visit_call_expr(rvalue)
446 elif isinstance(rvalue, CallExpr) and isinstance(rvalue.analyzed, NamedTupleExpr):
447 # Depend on types of named tuple items.
448 info = rvalue.analyzed.info
449 prefix = f"{self.scope.current_full_target()}.{info.name}"
450 for name, symnode in info.names.items():
451 if not name.startswith("_") and isinstance(symnode.node, Var):
452 typ = symnode.node.type
453 if typ:
454 self.add_type_dependencies(typ)
455 self.add_type_dependencies(typ, target=make_trigger(prefix))
456 attr_target = make_trigger(f"{prefix}.{name}")
457 self.add_type_dependencies(typ, target=attr_target)
458 elif isinstance(rvalue, CallExpr) and isinstance(rvalue.analyzed, TypedDictExpr):
459 # Depend on the underlying typeddict type
460 info = rvalue.analyzed.info
461 assert info.typeddict_type is not None
462 prefix = f"{self.scope.current_full_target()}.{info.name}"
463 self.add_type_dependencies(info.typeddict_type, target=make_trigger(prefix))
464 elif isinstance(rvalue, CallExpr) and isinstance(rvalue.analyzed, EnumCallExpr):
465 # Enum values are currently not checked, but for future we add the deps on them
466 for name, symnode in rvalue.analyzed.info.names.items():
467 if isinstance(symnode.node, Var) and symnode.node.type:
468 self.add_type_dependencies(symnode.node.type)
469 elif o.is_alias_def:
470 assert len(o.lvalues) == 1
471 lvalue = o.lvalues[0]
472 assert isinstance(lvalue, NameExpr)
473 typ = get_proper_type(self.type_map.get(lvalue))
474 if isinstance(typ, FunctionLike) and typ.is_type_obj():
475 class_name = typ.type_object().fullname
476 self.add_dependency(make_trigger(class_name + ".__init__"))
477 self.add_dependency(make_trigger(class_name + ".__new__"))
478 if isinstance(rvalue, IndexExpr) and isinstance(rvalue.analyzed, TypeAliasExpr):
479 self.add_type_dependencies(rvalue.analyzed.node.target)
480 elif typ:
481 self.add_type_dependencies(typ)
482 else:
483 # Normal assignment
484 super().visit_assignment_stmt(o)
485 for lvalue in o.lvalues:
486 self.process_lvalue(lvalue)
487 items = o.lvalues + [rvalue]
488 for i in range(len(items) - 1):
489 lvalue = items[i]
490 rvalue = items[i + 1]
491 if isinstance(lvalue, TupleExpr):
492 self.add_attribute_dependency_for_expr(rvalue, "__iter__")

Callers

nothing calls this directly

Calls 15

add_type_dependenciesMethod · 0.95
add_dependencyMethod · 0.95
process_lvalueMethod · 0.95
use_logical_depsMethod · 0.95
make_triggerFunction · 0.90
get_proper_typeFunction · 0.90
isinstanceFunction · 0.85
lenFunction · 0.85
rangeClass · 0.85
current_full_targetMethod · 0.80
visit_call_exprMethod · 0.45

Tested by

no test coverage detected