-
-
Save coryalder/3317713 to your computer and use it in GitHub Desktop.
Flake8 Script for BBEdit 10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
also, I do not see an effect of printing the caret and there is no apparent way to do this: <Then
the errors can be stepped through one at a time.>
I mean that the output is plain text with no link to the code page as in a BBedit search result or file compare