Pythonでtypoを素早く察知する方法 [Main] Pythonの辞書をドットでアクセス

Pythonでtypoを素早く察知する方法[Python(18)]Pythonの辞書をドットでアクセス

続:typoを素早く察知する方法

先日公開した Pythonでtypoを素早く察知する方法の続編です。 前回公開したものは 「codeオブジェクトを破壊的に書き換えるCodeHackモジュール」 を流用して作りましたが、typo察知にCで書かれたモジュールは必要ないので、 コードオブジェクトの解析部分だけを切り出してPure Pythonのモジュール 「Coda」を作成しました。

前回は 「関数を与えると、その関数を呼び出さずに、その関数が起こしそうな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で圧縮したバージョンも置いておきます。

Coda rev 228

既知の問題点はこちら: /lang/python/coda/trunk/PROBLEMS_JA.txt - CodeRepos::Share - Trac

鮎川さんからご指摘のあったユニコード文字列のstrでエラーになる件は、 使っているエンコーディングによってエラーになったりならなかったりするので、 近いうちにユーザがエンコーディングを指定できるようにします。