查找死代码
vulture的Python项目详细描述
秃鹫-查找死代码
秃鹫在python程序中查找未使用的代码。这对 清理和查找大型代码库中的错误。如果你跑秃鹫 在库和测试套件中,您都可以找到未经测试的代码。
由于python的动态特性,像vulture这样的静态代码分析器 可能会漏掉一些死代码。另外,只隐式调用的代码 可能报告为未使用。尽管如此,秃鹫还是很有帮助的。 提高代码质量的工具。
功能
- 快速:使用静态代码分析
- 测试:测试本身并具有完整的测试覆盖率
- 补充pyflakes并具有相同的输出语法
- 用大小排序未使用的类和函数
- 支持Python2.7和Python>;=3.4
安装
$ pip install vulture # from PyPI $ pip install . # from cloned repo
用法
$ vulture myscript.py # or $ python3 -m vulture myscript.py $ vulture myscript.py mypackage/ $ vulture myscript.py --min-confidence 100 # Only report 100% dead code.
提供的参数可以是python文件或目录。对于每一个 目录秃鹫分析所有包含的文件。
找到并删除死代码后,再次运行vulture,因为 它可能会发现更多死代码。
处理误报
您可以将报告为未使用的已用代码添加到python模块,然后 将其添加到扫描路径列表中。获得这样的白名单 自动将"白名单"传递给秃鹫。
$ vulture mydir --make-whitelist > whitelist.py $ vulture mydir whitelist.py
我们收集常用python模块和包的白名单 秃鹫/白名单/ (欢迎拉取请求)。如果你想的话 忽略整个文件或目录,使用 --exclude 参数(例如, --排除 *settings.py,docs/ )。
忽略名称
您可以使用 --忽略名称 foo*,ba[rz] 让秃鹫忽略所有名称 从 foo 和名称 bar 和 baz 开始。另外, --忽略修饰符 选项可用于忽略修饰的函数 和指定的装修师。这对烧瓶项目很有帮助, 在这里,您可以使用 --ignore decorators "@app.route" 忽略所有功能 使用 @app.route 装饰器。
我们建议使用白名单而不是忽略名称 --尽可能忽略装饰符,因为白名单是自动的 当传递给Vulture时检查语法的正确性,通常可以 甚至把它们传递给python解释器,让它检查 白名单代码实际上仍然存在于您的项目中。
标记未使用的变量
有些情况下,您不能只删除未使用的变量,例如, 在元组赋值或函数签名中。秃鹫会忽略这些 如果变量以下划线开头(例如, x,y=get_pos() )。
最小置信度
您可以使用 --min confidence标志设置最小置信度 报告为未使用的代码。仅使用 --最小置信度 100 报告保证在分析的文件中未使用的代码。
它是如何工作的?
秃鹫使用 ast 模块为所有人构建抽象语法树 给定的文件。在遍历所有语法树时,它记录 定义和使用的对象。然后,它报告 已定义,但未使用。此分析忽略作用域,只接受 考虑到对象名称。
秃鹫还通过在 return , break , continue 和 raise 语句,以及 在 -和 -条件下搜索不可满足的 -条件。
按大小排序
当使用 --按大小排序选项时,vulture按 它的行数。这有助于开发人员确定在哪里查找 先是死代码。
示例
考虑下面的python脚本( dead_code.py ):
importosclassGreeter:defgreet(self):print("Hi")defhello_world():message="Hello, world!"greeter=Greeter()greet_func=getattr(greeter,"greet")greet_func()if__name__=="__main__":hello_world()
呼叫
vulture dead_code.py
产生以下输出:
dead_code.py:1: unused import 'os' (90% confidence) dead_code.py:4: unused function 'greet' (60% confidence) dead_code.py:8: unused variable 'message' (60% confidence)
秃鹫正确地将"os"和"message"报告为未使用,但它无法 检测是否实际使用了"问候语"。建议的处理方法 这样的误报是创建一个白名单python文件。
准备白名单
在白名单中,我们模拟变量、属性等的使用 上面的程序,白名单可以如下所示:
# whitelist_dead_code.pyfromdead_codeimportGreeterGreeter.greet
或者,您可以将 --生成白名单 传递给秃鹫并获得 自动生成的白名单。
将原始程序和白名单同时传递给秃鹫
vulture dead_code.py whitelist_dead_code.py
使秃鹫忽略"问候"方法:
dead_code.py:1: unused import 'os' (90% confidence) dead_code.py:8: unused variable 'message' (60% confidence)
退出代码
<表> < COLGROUP > < COL/> < COL/> <广告> 退出代码 说明 < /广告> <正文> 0 未找到死代码 1 找到死代码 1 无效输入(文件丢失、语法错误、编码错误) 2 无效的命令行参数 < > <表>类似程序
- 秃鹫可以和松饼一起使用
- 覆盖率模块可以更可靠地找到未使用的代码,但需要 要实际运行的代码的所有分支。