| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- """
- Provide the Reporter class.
- """
- import re
- import sys
- class Reporter:
- """
- Formats the results of pyflakes checks to users.
- """
- def __init__(self, warningStream, errorStream):
- """
- Construct a L{Reporter}.
- @param warningStream: A file-like object where warnings will be
- written to. The stream's C{write} method must accept unicode.
- C{sys.stdout} is a good value.
- @param errorStream: A file-like object where error output will be
- written to. The stream's C{write} method must accept unicode.
- C{sys.stderr} is a good value.
- """
- self._stdout = warningStream
- self._stderr = errorStream
- def unexpectedError(self, filename, msg):
- """
- An unexpected error occurred trying to process C{filename}.
- @param filename: The path to a file that we could not process.
- @ptype filename: C{unicode}
- @param msg: A message explaining the problem.
- @ptype msg: C{unicode}
- """
- self._stderr.write(f"{filename}: {msg}\n")
- def syntaxError(self, filename, msg, lineno, offset, text):
- """
- There was a syntax error in C{filename}.
- @param filename: The path to the file with the syntax error.
- @ptype filename: C{unicode}
- @param msg: An explanation of the syntax error.
- @ptype msg: C{unicode}
- @param lineno: The line number where the syntax error occurred.
- @ptype lineno: C{int}
- @param offset: The column on which the syntax error occurred, or None.
- @ptype offset: C{int}
- @param text: The source code containing the syntax error.
- @ptype text: C{unicode}
- """
- if text is None:
- line = None
- else:
- line = text.splitlines()[-1]
- # lineno might be None if the error was during tokenization
- # lineno might be 0 if the error came from stdin
- lineno = max(lineno or 0, 1)
- if offset is not None:
- # some versions of python emit an offset of -1 for certain encoding errors
- offset = max(offset, 1)
- self._stderr.write('%s:%d:%d: %s\n' %
- (filename, lineno, offset, msg))
- else:
- self._stderr.write('%s:%d: %s\n' % (filename, lineno, msg))
- if line is not None:
- self._stderr.write(line)
- self._stderr.write('\n')
- if offset is not None:
- self._stderr.write(re.sub(r'\S', ' ', line[:offset - 1]) +
- "^\n")
- def flake(self, message):
- """
- pyflakes found something wrong with the code.
- @param: A L{pyflakes.messages.Message}.
- """
- self._stdout.write(str(message))
- self._stdout.write('\n')
- def _makeDefaultReporter():
- """
- Make a reporter that can be used when no reporter is specified.
- """
- return Reporter(sys.stdout, sys.stderr)
|