def search_ancestor(node, node_type_or_types):
    """
    Recursively looks at the parents of a node and checks if the type names
    match.

    :param node: The node that is looked at.
    :param node_type_or_types: A tuple or a string of type names that are
        searched for.
    """
    if not isinstance(node_type_or_types, (list, tuple)):
        node_type_or_types = (node_type_or_types,)

    while True:
        node = node.parent
        if node is None or node.type in node_type_or_types:
            return node