#!/usr/bin/env python
# Custom rules file for robotframework-lint.
# Example usage: python -m rflint -A robot_standards -R robot_custom_rules.py .
import re
from rflint.common import SuiteRule, ERROR


class ExtendInvalidTable(SuiteRule):
    r'''
    Extend robotframework-lint SuiteRule function for InvalidTable to allow a table section if it is
    a section of comments. e.g "*** Comments ***"
    '''
    severity = ERROR

    def apply(self, suite):
        for table in suite.tables:
            if (not re.match(r'^(settings?|metadata|(test )?cases?|(user )?keywords?|variables?|comments?)$',
                             table.name, re.IGNORECASE)):
                self.report(suite, "Unknown table name '%s'" % table.name, table.linenumber)
