filterpyflakes.py
61 lines
| 1.8 KiB
| text/x-python
|
PythonLexer
/ tests / filterpyflakes.py
timeless
|
r14140 | #!/usr/bin/env python | ||
# Filter output by pyflakes to control which warnings we check | ||||
Robert Stanca
|
r28724 | from __future__ import absolute_import, print_function | ||
Gregory Szorc
|
r27285 | |||
import re | ||||
import sys | ||||
timeless
|
r14140 | |||
Simon Heimberg
|
r19335 | def makekey(typeandline): | ||
""" | ||||
for sorting lines by: msgtype, path/to/file, lineno, message | ||||
typeandline is a sequence of a message type and the entire message line | ||||
the message line format is path/to/file:line: message | ||||
>>> makekey((3, 'example.py:36: any message')) | ||||
(3, 'example.py', 36, ' any message') | ||||
>>> makekey((7, 'path/to/file.py:68: dummy message')) | ||||
(7, 'path/to/file.py', 68, ' dummy message') | ||||
>>> makekey((2, 'fn:88: m')) > makekey((2, 'fn:9: m')) | ||||
True | ||||
""" | ||||
msgtype, line = typeandline | ||||
fname, line, message = line.split(":", 2) | ||||
# line as int for ordering 9 before 88 | ||||
return msgtype, fname, int(line), message | ||||
timeless
|
r14173 | |||
lines = [] | ||||
timeless
|
r14140 | for line in sys.stdin: | ||
Simon Heimberg
|
r19335 | # We whitelist tests (see more messages in pyflakes.messages) | ||
timeless
|
r14175 | pats = [ | ||
FUJIWARA Katsunori
|
r21271 | (r"imported but unused", None), | ||
(r"local variable '.*' is assigned to but never used", None), | ||||
(r"unable to detect undefined names", None), | ||||
Matt Mackall
|
r21293 | (r"undefined name '.*'", | ||
Matt Mackall
|
r21294 | r"undefined name '(WindowsError|memoryview)'") | ||
timeless
|
r14175 | ] | ||
Matt Mackall
|
r21293 | |||
FUJIWARA Katsunori
|
r21271 | for msgtype, (pat, excl) in enumerate(pats): | ||
if re.search(pat, line) and (not excl or not re.search(excl, line)): | ||||
Simon Heimberg
|
r19335 | break # pattern matches | ||
else: | ||||
continue # no pattern matched, next line | ||||
Augie Fackler
|
r14209 | fn = line.split(':', 1)[0] | ||
FUJIWARA Katsunori
|
r26023 | f = open(fn) | ||
Augie Fackler
|
r14209 | data = f.read() | ||
f.close() | ||||
Simon Heimberg
|
r19381 | if 'no-' 'check-code' in data: | ||
Augie Fackler
|
r14209 | continue | ||
Simon Heimberg
|
r19335 | lines.append((msgtype, line)) | ||
timeless
|
r14173 | |||
Mads Kiilerich
|
r19872 | for msgtype, line in sorted(lines, key=makekey): | ||
timeless
|
r14140 | sys.stdout.write(line) | ||
Robert Stanca
|
r28724 | print() | ||
FUJIWARA Katsunori
|
r21271 | |||
# self test of "undefined name" detection for other than 'memoryview' | ||||
if False: | ||||
Robert Stanca
|
r28724 | print(undefinedname) | ||