查找死代码

vulture的Python项目详细描述


秃鹫-查找死代码

travis ci构建状态(Linux)Appveyor CI生成状态(Windows)https://coveralls.io/repos/github/jendrikseipp/vulture/badge.svg?branch=master

秃鹫在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 无效的命令行参数 < > <表>

类似程序

  • 秃鹫可以和松饼一起使用
  • 覆盖率模块可以更可靠地找到未使用的代码,但需要 要实际运行的代码的所有分支。

参与

请访问https://github.com/jendrikseipp/vulture" rel="nofollow">https://github.com/jendrikseipp/vulture报告任何 发出或发出请求。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OnResizeListener或OnDrawListener或类似的东西   java Orika映射嵌套子列表   保存时java Heroku请求超时代码H12   数据库在Java中出现socket读取超时异常的原因是什么?   java如何更改来自Sqlite数据库的特定数据在Listview中的行颜色   java JAXB解组器无法正确处理XML中的列表   java Android日期时区让我抓狂   java不透明属性在Swing中如何工作?   eclipse从JavaEE代码生成流程图   java如何在Hibernate中从相关表中获取计数   java Glassfish部署了项目的依赖项库   java使内容适合JavaFx中的WebView   java不满意的链接错误libcrypto。所以1.0.0   循环中java数组的使用   java找出哪个包调用服务