LoginSignup
3
3

More than 5 years have passed since last update.

vulture で未使用のクラス/メソッド/関数/変数を探す

Posted at

pypi_updateのTLに更新情報が上がってきたので使ってみました。

vulture

vultureは使われていないクラス/メソッド/関数/変数を指摘します。
https://pypi.python.org/pypi/vulture

インストール

pipでインストールできます。

$ pip install vulture

実行

インストールが完了するとvultureコマンドが使えるようになっています。そのコマンドを使って実行します。

全てのオブジェクトが使われている状態

定義されている全てのオブジェクトが使われているサンプルコードを作りました。

py
# -*- 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

何も指摘されずに終了しました。

全てのオブジェクトが使われていない状態

今度は逆に全てのオブジェクトが使われていない状態のサンプルコードを作りました。

py
# -*- 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 に値を設定していて、全くの未使用というわけではありません。ただその値を取得してはいません。

py
# -*- 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 の箇所を指摘されました。
値を設定しているだけの場合指摘されます。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3