秃鹰:找到死的Python代码

2021-05-06 05:24:05

秃鹰在Python程序中查找未使用的代码。这是有用的,在大代码基础上找不到和发现错误。如果您运行Voltureon,您的库和测试套件您可以找到未测试的代码。

由于Python' Snynam,静态代码分析仪,如秃鹰,非常可能错过一些死人代码。此外,仅向ImplicicLymay称为未使用的代码。尽管如此,秃鹰可以是一个非常高级的代码质量的帮助。

$ vulture myscript.py#或$ python3-m秃鹰myscript.py $ vulture myscript.py mypackage / $ vulture myscript.py - min-convidente 100#只报告100%死代码。

提供的参数可能是Python文件或目录。对于每个传奇秃鹰分析所有包含的* .py文件。

秃鹰分配了一块死代码的置信价值。 100%的席位意味着代码永远不会被执行。低于100%的值只是估计代码未使用的可能性有多大。

找到并删除了死了代码后,再次运行Vulture,因为可能会发现更多的死人代码。

当秃鹰错误地将代码的块报告为未使用时,您可以抑制误报的选项。如果修复您的虚假呈现器也可以使其他用户有益,请提交问题报告。

推荐的选项是添加已使用的代码,该代码被报告为Apython模块,并将其添加到扫描路径列表中。自动获取此类一名单位,通过 - 使用 - 制作秃鹫:

请注意,生成的白名单.PY文件将包含有效的Pythonsyntax,但是对于Python能够运行它,您通常会造成一些修改。

如果要忽略整个文件或目录,请使用--excludeparameter(例如,--Exclude * settings.py,docs /)。

为了与Flake8的兼容性,Vulturesupports f401和f841错误码忽略未使用的导入(#noqa:f401)和未使用的localvariables(#noqa:f841)。但是,我们建议使用NOTQA评论的白名单,因为NOQA评论为代码添加了视觉噪声并达到了读取。

您可以使用--ignore-names foo *,ba [rz]让秃鹰忽略所有Namesstarting与foo和名称酒吧和baz。此外,--ignore-decorators选项可用于忽略所带来给定装饰器的功能。这是有用的,例如在烧瓶项目中,您可以在那里使用 - Aignore-Decorators" @ app.route"用@ app.route装饰托忽略Allfunctions。

我们建议在尽可能使用白名单而不是--ignore-names或-ignore-decorators,因为当传递给Vultureand时,甚至可以将它们传递给您的Python解释器并让itcheck iteCheck这一切仍然存在存在于您的项目中。

有些情况,您可以在其中删除未使用的变量,例如在元组分配或函数签名中。如果他们从下划线开始(例如,_x,y = get_pos()或def my_method(self,widget,** _ kwargs),则秃鹰将忽略thesevariables。

您可以使用--min-stencidente标志设置要报告的最低契约代码作为未使用。使用--Min-Confident信n100次才能在分析的文件中保证未使用的代码。

如果秃鹰抱怨代码,如false :,,您可以使用BooleAnFlag Debug = False并在调试时写入:转而。这使得Codemore可读和沉默的雕刻。

您还可以存储Pyproject.Toml中的命令行参数。纹理部分。只需删除带有下划线的扩展短划线并替换分类破折号。

[ 工具。秃鹰]排除= ["文件* .py"," dir /"] icone_decorators = [" @ app.route"" @ Require_ *"] Ignore_names = ["访问_ *"," do_ *"] make_whitelist = true min_confidence = 80 paths = [" myscript.py&# 34 ;," MyDir"] sort_by_size = true verbose = true

您可以在每次提交之前使用预先提交的钩子到纠错。为此,请在存储库中安装预先提交并将其添加到.pre-commit-config.yaml文件:

repos: - repo:https://github.com/jendrikseipp/vulture rev:' v2.3' #或任何稍后的秃鹰版本挂钩: - ID:秃鹰

然后运行预先提交安装。最后,创建一个pyproject.toml filein的存储库,并指定秃鹰应该在[工具培养]下检查的所有文件 - >路径(见上文)。

Vulture使用AST模块来构建Allgiven文件的抽象语法树。在遍历所有语法树的同时,它记录多义和使用的对象的名称。之后,它报告了定义的对象,但未使用。此分析忽略范围,仅考虑姓名。

vulture还通过查找返回,中断,继续和引导语句后的代码来检测无法访问的代码,并通过搜索不可履行的if-和条件来搜索。

使用 - 逐个尺寸选项时,秃鹰通过ITS0MBER排序未使用的代码。这有助于开发人员优先考虑首先寻找DeadCode的位置。

导入OS类问候:Def问候(Self):打印("嗨")def hello_world():message ="您好,世界!"问候=问候语()readr_func = getattr(问候员,"问候")great_func()如果__name__ ==" __主要__&#34 ;: hello_world()

dead_code.py:1:未使用的导入' OS' (90%的信心)dead_code.py:4:未使用的功能'迎接' (60%的信心)dead_code.py:8:未使用的变量'消息' (置信60%)

秃鹰正确报告" os"和#34;消息"因为未使用,但它失败了"问候"实际使用。推荐的方法来处理这样的误报是创建一个白名单Python文件。

在白名单中,我们模拟了上述变量,属性等的使用情况,白名单可能如下所示:

Coverage在秃鹰中可靠地查找未使用的CodeMore,但需要在自动运行代码的所有分支机构。