Processes a line return a 3-element tuple representing (filename,
        line_number, error_messages) or None to indicate no error.

        :param: dirname - directory the code is running in

        For default implementation, regex in `self.response_format` is expected
        to have the capture groups `filename`, `line`, `message` in order. If
        not, override this method.

def process_line(self, dirname, line):
        """
        Processes a line return a 3-element tuple representing (filename,
        line_number, error_messages) or None to indicate no error.

        :param: dirname - directory the code is running in

        For default implementation, regex in `self.response_format` is expected
        to have the capture groups `filename`, `line`, `message` in order. If
        not, override this method.
        """
        if not hasattr(self, 'response_format'):
            raise NotImplementedError()

        match = self.response_format.search(line)
        if match is not None:
            if len(self.filenames) != 0:
                if match.group('filename') not in self.filenames:
                    return
            filename, line, messages = match.groups()
            return filename, line, messages