Mercurial > hg
view tests/filterpyflakes.py @ 29774:a7f8939641aa
merge: use labels in prompts to the user
Now that we persist the labels, we can consistently use the labels in
prompts for the user without risk of confusion. This changes a huge amount
of command output:
This means that merge prompts like:
no tool found to merge a
keep (l)ocal, take (o)ther, or leave (u)nresolved? u
and
remote changed a which local deleted
use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
become:
no tool found to merge a
keep (l)ocal [working copy], take (o)ther [destination], or leave (u)nresolved? u
and
remote [source] changed a which local [dest] deleted
use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
where "working copy" and "destination" were supplied by the command that
requested the merge as labels for conflict markers, and thus should be
human-friendly.
author | Simon Farnsworth <simonfar@fb.com> |
---|---|
date | Fri, 12 Aug 2016 06:01:42 -0700 |
parents | cf339d6ac7c7 |
children | 046a7e828ea6 |
line wrap: on
line source
#!/usr/bin/env python # Filter output by pyflakes to control which warnings we check from __future__ import absolute_import, print_function import re import sys 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 lines = [] for line in sys.stdin: # We whitelist tests (see more messages in pyflakes.messages) pats = [ (r"imported but unused", None), (r"local variable '.*' is assigned to but never used", None), (r"unable to detect undefined names", None), (r"undefined name '.*'", r"undefined name '(WindowsError|memoryview)'") ] for msgtype, (pat, excl) in enumerate(pats): if re.search(pat, line) and (not excl or not re.search(excl, line)): break # pattern matches else: continue # no pattern matched, next line fn = line.split(':', 1)[0] f = open(fn) data = f.read() f.close() if 'no-' 'check-code' in data: continue lines.append((msgtype, line)) for msgtype, line in sorted(lines, key=makekey): sys.stdout.write(line) print() # self test of "undefined name" detection for other than 'memoryview' if False: print(undefinedname)