def check(check_ctxt, msgs, key, msgsrc, settings):
    """
    Performs a set of checks over the given key (context, message)...
    """
    if check_ctxt is None:
        return
    multi_rnatip = check_ctxt.get('multi_rnatip')
    multi_lines = check_ctxt.get('multi_lines')
    py_in_rna = check_ctxt.get('py_in_rna')
    not_capitalized = check_ctxt.get('not_capitalized')
    end_point = check_ctxt.get('end_point')
    undoc_ops = check_ctxt.get('undoc_ops')
    spell_checker = check_ctxt.get('spell_checker')
    spell_errors = check_ctxt.get('spell_errors')
    if multi_rnatip is not None:
        if key in msgs and key not in multi_rnatip:
            multi_rnatip.add(key)
    if multi_lines is not None:
        if '\n' in key[1]:
            multi_lines.add(key)
    if py_in_rna is not None:
        if key in py_in_rna[1]:
            py_in_rna[0].add(key)
    if not_capitalized is not None:
        if key[1] not in settings.WARN_MSGID_NOT_CAPITALIZED_ALLOWED and key[1
            ][0].isalpha() and not key[1][0].isupper():
            not_capitalized.add(key)
    if end_point is not None:
        if key[1].strip().endswith('.') and not key[1].strip().endswith('...'
            ) and key[1] not in settings.WARN_MSGID_END_POINT_ALLOWED:
            end_point.add(key)
    if undoc_ops is not None:
        if key[1] == settings.UNDOC_OPS_STR:
            undoc_ops.add(key)
    if spell_checker is not None and spell_errors is not None:
        err = spell_checker.check(key[1])
        if err:
            spell_errors[key] = err
