tests/filterpyflakes.py
author Simon Heimberg <simohe@besonet.ch>
Tue, 07 Jan 2014 22:29:15 +0100
changeset 20239 16b5f498f49c
parent 19872 681f7b9213a4
child 21232 0768cda8b579
permissions -rwxr-xr-x
check-code: always report when a file is skipped by "no-check-code" Skipping an entire file generally from checking is an important event, so report it always. Do not tell the check name because skipping does not depend on it. Directly skip the entire file instead of checking more patterns and skip again. The pragma no-check-code was introduced by accident in the past. (Fixed in e033a7d444ac and ee07f9d142c9.) This now is prevented because the files to skip have to be listed in the test output of test-check-code-hg.t.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14140
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
diff changeset
     1
#!/usr/bin/env python
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
diff changeset
     2
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
diff changeset
     3
# Filter output by pyflakes to control which warnings we check
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
diff changeset
     4
14209
08d84bdce1a5 pyflakes: ignore files marked no-check-code
Augie Fackler <durin42@gmail.com>
parents: 14176
diff changeset
     5
import sys, re, os
14140
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
diff changeset
     6
19335
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
     7
def makekey(typeandline):
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
     8
    """
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
     9
    for sorting lines by: msgtype, path/to/file, lineno, message
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    10
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    11
    typeandline is a sequence of a message type and the entire message line
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    12
    the message line format is path/to/file:line: message
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    13
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    14
    >>> makekey((3, 'example.py:36: any message'))
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    15
    (3, 'example.py', 36, ' any message')
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    16
    >>> makekey((7, 'path/to/file.py:68: dummy message'))
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    17
    (7, 'path/to/file.py', 68, ' dummy message')
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    18
    >>> makekey((2, 'fn:88: m')) > makekey((2, 'fn:9: m'))
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    19
    True
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    20
    """
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    21
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    22
    msgtype, line = typeandline
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    23
    fname, line, message = line.split(":", 2)
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    24
    # line as int for ordering 9 before 88
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    25
    return msgtype, fname, int(line), message
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    26
14173
419539ea79cb test-pyflake: improve sorting algorithm
timeless <timeless@mozdev.org>
parents: 14140
diff changeset
    27
419539ea79cb test-pyflake: improve sorting algorithm
timeless <timeless@mozdev.org>
parents: 14140
diff changeset
    28
lines = []
14140
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
diff changeset
    29
for line in sys.stdin:
19335
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    30
    # We whitelist tests (see more messages in pyflakes.messages)
14175
b452abffcb15 tests: add pyflakes checking for assigned to but never used
timeless <timeless@mozdev.org>
parents: 14173
diff changeset
    31
    pats = [
b452abffcb15 tests: add pyflakes checking for assigned to but never used
timeless <timeless@mozdev.org>
parents: 14173
diff changeset
    32
            r"imported but unused",
b452abffcb15 tests: add pyflakes checking for assigned to but never used
timeless <timeless@mozdev.org>
parents: 14173
diff changeset
    33
            r"local variable '.*' is assigned to but never used",
14176
dea68bddfb87 test: add pyflakes checking for unable to detect undefined names
timeless <timeless@mozdev.org>
parents: 14175
diff changeset
    34
            r"unable to detect undefined names",
14175
b452abffcb15 tests: add pyflakes checking for assigned to but never used
timeless <timeless@mozdev.org>
parents: 14173
diff changeset
    35
           ]
19335
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    36
    for msgtype, pat in enumerate(pats):
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    37
        if re.search(pat, line):
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    38
            break # pattern matches
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    39
    else:
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    40
        continue # no pattern matched, next line
14209
08d84bdce1a5 pyflakes: ignore files marked no-check-code
Augie Fackler <durin42@gmail.com>
parents: 14176
diff changeset
    41
    fn = line.split(':', 1)[0]
08d84bdce1a5 pyflakes: ignore files marked no-check-code
Augie Fackler <durin42@gmail.com>
parents: 14176
diff changeset
    42
    f = open(os.path.join(os.path.dirname(os.path.dirname(__file__)), fn))
08d84bdce1a5 pyflakes: ignore files marked no-check-code
Augie Fackler <durin42@gmail.com>
parents: 14176
diff changeset
    43
    data = f.read()
08d84bdce1a5 pyflakes: ignore files marked no-check-code
Augie Fackler <durin42@gmail.com>
parents: 14176
diff changeset
    44
    f.close()
19381
e033a7d444ac tests: do not skip code-checking on some whole files
Simon Heimberg <simohe@besonet.ch>
parents: 19335
diff changeset
    45
    if 'no-' 'check-code' in data:
14209
08d84bdce1a5 pyflakes: ignore files marked no-check-code
Augie Fackler <durin42@gmail.com>
parents: 14176
diff changeset
    46
        continue
19335
77440de177f7 tests: simplify and document the sorting of pyflake messages
Simon Heimberg <simohe@besonet.ch>
parents: 14209
diff changeset
    47
    lines.append((msgtype, line))
14173
419539ea79cb test-pyflake: improve sorting algorithm
timeless <timeless@mozdev.org>
parents: 14140
diff changeset
    48
19872
681f7b9213a4 check-code: check for spaces around = for named parameters
Mads Kiilerich <madski@unity3d.com>
parents: 19381
diff changeset
    49
for msgtype, line in sorted(lines, key=makekey):
14140
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
diff changeset
    50
    sys.stdout.write(line)
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
diff changeset
    51
print