ZopeのPython Scriptとsyntastic
ZopeのPython Scriptをローカルに mirrorした状態でvimからいじることがあるのですが, 最近syntasticを導入したらwarningが出て困ります.
Stackoverflowの このエントリ を参考に なんとかエラーがでないようにしてみました.
1. flake8をPython Scriptに対応させる...
これは無理です.
というのもstackoverflowに書いてます.
そこでflake8に渡す前にスクリプトをいじってしまいます...
こんな感じ:
#! /usr/bin/python
import sys
import re
from subprocess import Popen, PIPE, call
from tempfile import SpooledTemporaryFile as tempfile
def main():
fname = sys.argv[1]
f = tempfile()
f1st = True
for line in file(fname):
if f1st and 'Script (Python)' not in line:
ret = call(['flake8', fname])
return ret
f1st = False
if not line.strip():
f.write('\n')
continue
if re.search(r"^ \*#", line):
pass
else:
line = re.sub(r"(^[^#])", r" \1", line)
#line = re.sub(r"^##bind [a-z]*=([a-z][a-z]*)$", r"import \1", line)
line = re.sub(r"^##parameters=(.*)", r"def foo(printed, \1):", line)
f.write(line)
f.seek(0)
pipe = Popen(["flake8", '--ignore=E3', '/dev/stdin'], stdin=f, stdout=PIPE)
stdout, stderr = pipe.communicate(input=f)
for line in stdout.splitlines():
line = re.sub(r"^/dev/stdin", fname, line)
sys.stdout.write(line + "\n")
main()
# vi: ft=python
実行権限つけてどこかに保存しておきます.
私の場合は/opt/binあたりに放り込んでおきました.
名前は flake8custom.py です.
2. Syntasticでflake8の代わりに作ったスクリプトを起動
syntasticのsyntax_checkersフォルダにある
python/flake8.vim のflake8の部分をflake8customに修正します.:
let makeprg = 'flake8'.g:syntastic_python_checker_args.' '.shellescape(expand('%'))
ここを:
let makeprg = 'flake8custom.py '.g:syntastic_python_checker_args.' '.shellescape(expand('%'))
こうです.
おわり
subprocessのところ, いっつも覚えてなくて 調べながらやるんで時間かかっちゃいました...
コメント
Comments powered by Disqus