### SUMMARY

Update validate-modules to report messages using named error codes like `version-added` instead of error numbers like `E305`.

This would match the behavior of other tools we use, such as pylint, which have one named error code per rule. This will also make ignore entries much easier to read.

Doing this before 2.9 is released will avoid potential backwards compatibility issues with ignore entries in collections.

##### ISSUE TYPE

Feature Idea

##### COMPONENT NAME

validate-modules

return self.path
    def validate(self):
        super(PythonPackageValidator, self).validate()
        if self.basename in self.BLACKLIST_FILES:
            return
        init_file = os.path.join(self.path, '__init__.py')
        if not os.path.exists(init_file):
            self.reporter.error(
                path=self.object_path,
                code=502,
                msg='Ansible module subdirectories must contain an __init__.py'
            )
def re_compile(value):
    """
    Argparse expects things to raise TypeError, re.compile raises an re.error
    exception
    This function is a shorthand to convert the re.error exception to a
    TypeError
    """
    try:
        return re.compile(value)
    except re.error as e:
        raise TypeError(e)
def run():
    parser = argparse.ArgumentParser(prog="validate-modules")
    parser.add_argument('modules', nargs='+',
                        help='Path to module or module directory')
    parser.add_argument('-w', '--warnings', help='Show warnings',
                        action='store_true')
    parser.add_argument('--exclude', help='RegEx exclusion pattern',