Flake8 Script for BBEdit 10
#!/usr/bin/env python | |
""" | |
A quick script to install into your `Application Support/BBEdit/Scripts` folder. | |
This runs flake8 (requires flake8 to be installed at `/usr/local/bin` - | |
try ``pip install flake8``) and reformats the results | |
so that they show up in BBEdit's search results / error / warnings window. Then | |
the errors can be stepped through one at a time. | |
I've bound this to control-shift-l. You must save your Python file first before | |
running the check. | |
original script: https://gist.github.com/1157742 | |
Ported to work with: | |
- flake8 --version: 1.4 (pyflakes: 0.5.0, pep8: 1.2) | |
- python --version: Python 2.7.2 | |
BBEdit 10.1.2 (MAS) | |
Here: https://gist.github.com/3317713 | |
""" | |
from __future__ import print_function | |
import os | |
import re | |
import sys | |
from subprocess import Popen, PIPE | |
if os.environ['BB_DOC_LANGUAGE'].lower() != 'python': | |
# Bail out quietly if language isn't Python | |
sys.exit(0) | |
doc_file = os.environ['BB_DOC_PATH'] | |
pyflakes = "/usr/local/bin/flake8" | |
line_length = 256 # I don't like PEP8 warning be about long lines. | |
stdout, stderr = Popen([pyflakes, doc_file, "--max-line-length=" + str(line_length)], stdout=PIPE, stderr=PIPE).communicate() | |
output = stdout if stdout else stderr | |
if not output: | |
sys.exit(0) | |
line_format = re.compile('(?P<path>[^:]+):(?P<line>\d+):(?P<character>\d+:)?\s(?P<message>.*$)') | |
for line in output.splitlines(): | |
m = line_format.match(line) | |
if not m: | |
continue | |
groups = m.groupdict() | |
print(''' File "{path}", line {line}'''.format(**groups), file=sys.stderr) | |
outstr = "" | |
if groups['character']: | |
outstr = "At column " + groups['character'] + " " | |
print(outstr + groups['message'], file=sys.stderr) | |
print('^', file=sys.stderr) | |
sys.exit(1) |
This comment has been minimized.
This comment has been minimized.
Never mind. You have the damn caret in the wrong place. |
This comment has been minimized.
This comment has been minimized.
For those who come after, if there are any: the caret goes between the file and line location info and the error info. In this case, move the print statement that prints the caret up to just above the 'outstr = ""' line. I'd |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
This seems to do absolutely nothing when I run it (from the scripts menu). I even shoved in some deliberate errors, still no dice. I have the search results window already open and nothing gets printed there. Any idea what I'm doing wrong?