【问题标题】:Is there a simple way to use vulture with django?有没有一种简单的方法可以将 vulture 与 django 一起使用?
【发布时间】:2012-08-19 13:11:09
【问题描述】:

我正在尝试清理 django 中一些纠结的遗留代码。 Vulture 看起来不错,但它似乎不知道如何查找从 urls.py 引用的视图函数。这并不奇怪,因为大多数函数都包含在字符串中:

...
url(r'^some-url/$', 'my_app.views.some_url_view'),
...

有没有一种简单的方法可以让 vulture 了解视图功能?

我要做的一件事是:我已经为代码编写了相当广泛的测试。目前,vulture 错过了这些测试,但如果有什么方法可以让 vulture 了解这些测试,我认为所有的观点也会被包括在内。

【问题讨论】:

    标签: python django dependencies


    【解决方案1】:

    有没有一种简单的方法可以让 vulture 了解视图功能?

    是的,有 - Vulture 将此过程称为“白名单”。基本思想是明确“使用” Vulture 报告为未使用的代码。这可以通过为未使用的代码创建一个模拟对象来完成。由于创建此类模拟对象是一种相当普遍的做法,Vulture 最近开始为这个非常特定的目的发布一个抽象类vulture.whitelist_utils.Whitelist

    对于您提供的示例视图函数,白名单可能如下所示:

    # whitelists/whitelist_view.py
    from vulture.whitelist_utils import Whitelist
    
    view_whitelist = Whitelist()
    
    # Create an attribute named exactly as your
    # unused object - a function in this case
    view_whitelist.some_url_view
    

    请注意,您还必须将此文件作为参数传递给 Vulture 才能正常工作。在上面的例子中,假设你在appstests目录上运行Vulture,如果白名单保存为whitelists/whitelist_view.py,那么vulture的命令应该是:

    vulture apps/ tests/ whitelists/
    

    它是如何工作的?

    由于您还将白名单文件与要分析的文件一起传递,因此 vulture 为它们创建了ast,并且在解析这些抽象语法树时,Vulture 创建了一个通用集来存储使用和定义的名称对象。由于误报函数的名称出现在两者中,因此不被视为未使用。

    有关如何最大限度减少误报的更多方法,请通过Vulture's Documentation。还有这个blog post by Rahul on Vulture and false positives.

    【讨论】:

      【解决方案2】:

      单独尝试 Ned 的 Batchelder coverage 或与 nose 一起使用。

      只需运行测试用例,coverage html 就会为您提供一份漂亮的报告,逐行显示您的代码,并提供详细的覆盖率信息。之后修剪/删除未使用/未测试的代码。

      【讨论】:

      • Coverage 做动态分析, vulture 做静态分析。这是一个巨大的差异。
      猜你喜欢
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多