続:typoを素早く察知する方法
前回は 「関数を与えると、その関数を呼び出さずに、その関数が起こしそうなNameErrorを警告する」 というものでしたが、今回はモジュールとネストしたコードオブジェクトをサポートしました。 ファイル名を指定して、そのファイルが起こしそうなNameErrorを警告させることが可能です。
たとえば下のような内容のファイル(tests/test_target.py)があった場合に
def some_func(): pass def foo(): print some_finc()find_name_error.pyを実行すると下のように 「5行目のsome_fincは、それより外側のスコープでLOADされていないよ、typoじゃない?」 と表示されます。
C:\Python25\Lib\site-packages>find_name_error.py coda\tests\test_target.py line 5: some_finc
使い方:まずScriptsフォルダに入っているfind_name_error.pyを C:\Python25\Scriptsなどのパスの通っている場所に移動してください。 このとき、名前は適当に変更しても構いません。
適当なフォルダに移動して-hというオプションで起動してヘルプが出ればOKです。
C:\>find_name_error.py -h Usage: find_name_error.py [options] Options: -h, --help show this help message and exit -r DIR, --recursive=DIR find *.py under the directory -w, --watch watching target continuously(not implemented yet)表示されているヘルプが多少事実と異なりますが(直しておきます)、 引数にファイル名を与えるとそのファイルを、-rとフォルダ名を与えるとそのフォルダ以下の*.pyファイルを走査します。-wをつけるとファイルの更新を監視します。
ソースコードは共有リポジトリ CodeRepos::Share で公開中です。 Subversionがインストール済みであれば、たとえば 下のようにしてPythonのsite-packages内でチェックアウトするだけでOKです。
C:\Python25\Lib\site-packages>svn co http://svn.coderepos.org/share/lang/python/coda/trunk/coda
Subversionを入れたくない人のために一応ZIPで圧縮したバージョンも置いておきます。
既知の問題点はこちら: /lang/python/coda/trunk/PROBLEMS_JA.txt - CodeRepos::Share - Trac
鮎川さんからご指摘のあったユニコード文字列のstrでエラーになる件は、 使っているエンコーディングによってエラーになったりならなかったりするので、 近いうちにユーザがエンコーディングを指定できるようにします。