PyFlakes.vim で遭遇したエラー
2012/02/02 追記
Pull request したのがいつの間にか本体に取り込まれていた。
なので最新を git clone したら発生しないはず。
PyFlakes.vim で以下の条件の時にエラーが発生した。
aaa = bbb
こんな感じでやると以下のようなエラーがでる
function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: Traceback (most recent call last): function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: File "<string>", line 1, in <module> function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: File "<string>", line 82, in check function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: File "/Users/xxx/.vim/bundle/pyflakes-vim/ftplugin/python/pyflakes/pyflakes/checker.py", li ne 195, in __init__ function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: self.handleChildren(tree) function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: File "/Users/xxx/.vim/bundle/pyflakes-vim/ftplugin/python/pyflakes/pyflakes/checker.py", li ne 287, in handleChildren function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: self.handleNode(node, tree) function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: File "/Users/xxx/.vim/bundle/pyflakes-vim/ftplugin/python/pyflakes/pyflakes/checker.py", li ne 309, in handleNode function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: handler(node) function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: File "/Users/xxx/.vim/bundle/pyflakes-vim/ftplugin/python/pyflakes/pyflakes/checker.py", li ne 589, in ASSIGN function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: self.handleNode(node.value, node) function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: File "/Users/xxx/.vim/bundle/pyflakes-vim/ftplugin/python/pyflakes/pyflakes/checker.py", li ne 309, in handleNode function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: handler(node) function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: File "/Users/xxx/.vim/bundle/pyflakes-vim/ftplugin/python/pyflakes/pyflakes/checker.py", li ne 461, in NAME function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: if (os.path.basename(self.filename) == '__init__.py' and function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/posixpath.py", line 1 11, in basename function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: i = p.rfind('/') + 1 function <SNR>146_RunPyflakes の処理中にエラーが検出されました: 行 45: AttributeError: 'NoneType' object has no attribute 'rfind'
なんで起きたかというと、pyflakes.vim でチェック時にバッファ名を取得していて、それを PyFlakes のチェックメソッドに渡している。
def check(buffer): filename = buffer.name contents = buffer[:] # -- snip -- else: # pyflakes looks to _MAGIC_GLOBALS in checker.py to see which # UndefinedNames to ignore old_globals = getattr(checker,' _MAGIC_GLOBALS', []) checker._MAGIC_GLOBALS = set(old_globals) | builtins w = checker.Checker(tree, filename)
この filename が None の場合(バッファ名が設定してない)に上記のようなエラーが起きる。
checker.Checker のコンストラクタの filename はデフォルト引数として '(none)' を期待しているっぽい。
とりあえず、以下のようにすればエラーにならない。
filename = '(none)' if filename is None else filename w = checker.Checker(tree, filename)
多分あまり遭遇しないケースな気がする。