'Report an error, according to options.'

def report_error(self, line_number, offset, text, check):

    if ((options.quiet == 1) and (not self.file_errors)):
        message(self.filename)
    self.file_errors += 1
    code = text[:4]
    options.counters[code] = (options.counters.get(code, 0) + 1)
    options.messages[code] = text[5:]
    if options.quiet:
        return
    if options.testsuite:
        base = os.path.basename(self.filename)[:4]
        if (base == code):
            return
        if ((base[0] == 'E') and (code[0] == 'W')):
            return
    if ignore_code(code):
        return
    if ((options.counters[code] == 1) or options.repeat):
        message(('%s:%s:%d:    %s' % (self.filename, line_number, (offset + 1), text)))
        if options.show_source:
            line = self.lines[(line_number - 1)]
            message(line.rstrip())
            message((('    ' * offset) + '^'))
        if options.show_pep8:
            message(check.__doc__.lstrip('\n').rstrip())
