pypi_updateのTLに更新情報が上がってきたので使ってみました。
vulture
vultureは使われていないクラス/メソッド/関数/変数を指摘します。
https://pypi.python.org/pypi/vulture
インストール
pipでインストールできます。
$ pip install vulture
実行
インストールが完了するとvultureコマンドが使えるようになっています。そのコマンドを使って実行します。
全てのオブジェクトが使われている状態
定義されている全てのオブジェクトが使われているサンプルコードを作りました。
# -*- coding: utf-8 -*-
USE = 'use'
class Use(object):
use_attr = 'use'
def use(self, value):
self.use_attr = value
return self.use_attr
def use():
Use.use(USE)
if __name__ == '__main__':
use()
このサンプルコードに対してvultureを実行します。
$ vulture use.py
$ echo $?
0
何も指摘されずに終了しました。
全てのオブジェクトが使われていない状態
今度は逆に全てのオブジェクトが使われていない状態のサンプルコードを作りました。
# -*- coding: utf-8 -*-
UNUSE = 'unuse'
class UnUse(object):
unuse_attr = 'unuse'
def unuse(self, value):
data = None
def unuse_func():
func_data = None
このサンプルコードに対してvultureを実行します。
$ vulture unuse.py
unuse.py:2: Unused variable 'UNUSE'
unuse.py:5: Unused class 'UnUse'
unuse.py:6: Unused variable 'unuse_attr'
unuse.py:8: Unused function 'unuse'
unuse.py:9: Unused variable 'data'
unuse.py:12: Unused function 'unuse_func'
unuse.py:13: Unused variable 'func_data'
$ echo $?
1
7件指摘されて異常終了しました。
グローバル変数(UNUSE)、クラス(UnUse)、クラス変数(unuse_attr)、インスタンスメソッド(UnUse.unuse)、関数(unuse_func)、ローカル変数(dataとfunc_data)に対して指摘されました。関数やメソッドの引数に対しては未使用かどうかは指摘されません。
設定のみのメンバー変数は指摘される
以下の例では self.data
に値を設定していて、全くの未使用というわけではありません。ただその値を取得してはいません。
# -*- coding: utf-8 -*-
class Use(object):
def __init__(self):
self.data = 1
def set_(self, value):
self.data = value
Use()
Use.set_(2)
このサンプルコードに対してvultureを実行するとどうなるのでしょうか?
$ vulture unuse2.py
unuse2.py:6: Unused attribute 'data'
$ echo $?
1
コンストラクタの self.data = 1
の箇所を指摘されました。
値を設定しているだけの場合指摘されます。