@Override
  public void visitPyWithStatement(final @NotNull PyWithStatement node) {
    super.visitPyWithStatement(node);

    final boolean suppressor = StreamEx
      .of(node.getWithItems())
      .map(PyWithItem::getExpression)
      .select(PyCallExpression.class)
      .map(PyCallExpression::getCallee)
      .select(PyReferenceExpression.class)
      .anyMatch(it -> EXCEPTION_SUPPRESSORS.contains(it.getReferencedName()));

    myBuilder.processPending((pendingScope, instruction) -> {
      final PsiElement element = instruction.getElement();
      if (element != null &&
          PsiTreeUtil.isAncestor(node, element, true) &&
          (suppressor && canRaiseExceptions(instruction) || PsiTreeUtil.getParentOfType(element, PyRaiseStatement.class) != null)) {
        myBuilder.addPendingEdge(node, instruction);
      }
      myBuilder.addPendingEdge(pendingScope, instruction);
    });
  }
@Override
  public void visitPyWithStatement(final @NotNull PyWithStatement node)