运行mccabe代码复杂性检查器的pytest插件。

pytest-mccabe的Python项目详细描述


pytest mccabe

https://travis-ci.org/The-Compiler/pytest-mccabe.svg?branch=master< Py.Puthon插件用于检查Python源的循环复杂性 mccabe

使用量

安装方式:

pip install pytest-mccabe

如果您随后键入:

py.test --mccabe

.py结尾的每个文件都将被发现并在mccabe中运行, 从命令行参数开始。

简单用法示例

假设您有这个(故意错误和复杂的)代码:

# module.py

import random
import os.path

def some_function():
    num = random.random()
    if 0 <= num < 0.1:
        print("1")
    elif 0.1 <= num < 0.2:
        print("2")
    elif 0.2 <= num < 0.3:
        print("3")
    elif 0.3 <= num < 0.4:
        print("4")
    elif 0.4 <= num < 0.5:
        print("5")
    elif 0.5 <= num < 0.6:
        print("6")
    elif 0.6 <= num < 0.7:
        print("7")
    elif 0.7 <= num < 0.8:
        print("8")
    elif 0.8 <= num < 0.9:
        print("9")
    elif 0.9 <= num < 1:
        print("10")

在安装了py test mccabe的情况下运行py.test将显示此函数是 被认为过于复杂:

$ py.test -q --mccabe module.py
F
============================== FAILURES ==============================
____________________________ mccabe-check ____________________________
.../module.py:4: C901 'some_function' is too complex (11)

配置每个项目的McCabe复杂性和文件<>你可以为你的项目配置最大的复杂性 通过将mccabe-complexity条目添加到pytest配置文件(例如 setup.cfg)像这样:

[pytest]
mccabe-complexity=15

使用上面的示例重新运行会更好:

$ py.test -q --mccabe foo.py
.
1 passed in 0.00 seconds

如果您有一些文件要设置比 项目范围1,您可以启动一个具有复杂模式的复杂行:

[pytest]
mccabe-complexity =
    *.py 7
    magic.py 10

忽略某些函数

可以通过添加注释来排除某些函数的复杂性检查 像这样:

def some_function():  # noqa
    ...

def another_function():  # pragma: no mccabe
    ...

(两者都能工作-# noqa主要用于flake8兼容性)

运行McCabe检查,无其他测试

您可以将测试运行限制为仅执行“mccabe”测试 而不是通过键入:

py.test --mccabe -m mccabe

这将只运行标有“mccabe”关键字的测试 这是为这个插件添加的mccabe测试项添加的。

如果使用的是pytest<;2.4,则使用以下调用 效果相同:

py.test --mccabe -k mccabe

注释

此插件的存储库位于https://github.com/The-Compiler/pytest-mccabe

有关py.test的更多信息,请参见http://pytest.org

代码基于Florian Schulze的优秀pytest-flakes-谢谢!

更改

0.1

  • 初次发布。

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

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧