from typing import List


def text_contains_ignore_list(
    text: str, ignore_list: List[str], match_substring: bool = False
) -> bool:
    """Return True if anything from the ignore list is in the text.
    Each ignore list line is considered separately (OR logic).
    All tokens from one ignore list line must be somewhere in the text (AND logic).
    """
    # found all of the subtokens from one ignore line in the text
    if text is None:
        return text

    if match_substring:
        text_compare = text.lower()
    else:
        text_compare = text.lower().split()

    return any(
        [
            all([itok in text_compare for itok in ignore_line.lower().split()])
            for ignore_line in ignore_list
        ]
    )