
bellybutton是Python的可自定义,易于配置的绒毛引擎。
Pylint和Flake8之类的工具提供了开箱即用的规则,以实施Python最佳实践,确保PEP-8合规性以及避免频繁的错误来源。但是,许多项目都有用于静态分析的项目特定候选人,例如内部样式指南,弃用功能的领域或常见的错误来源。对于拥有许多贡献者或大型或传统代码库的这些项目尤其如此。
bellybutton允许以每项项目为基础指定自定义覆盖规则,并作为正常构建,测试和部署过程的一部分检测,此外,指定这些规则高度易于访问,大大降低了采用成本。
bellybutton :
可以通过bellybutton
pip install bellybutton安装后,运行
bellybutton init在您项目的根目录中,将创建一个.bellybutton.yml配置文件,其中示例规则供您开始适应。 bellybutton还将尝试根据项目目录结构提供其他规则设置。
一旦您为项目配置了bellybutton ,请运行
bellybutton lint将根据您的.bellybutton.yml中指定的规则来调整该项目。另外,运行
bellybutton lint --modified-only如果使用git,则只会仅覆盖那些与origin/master不同的文件。
要在CI管道中添加bellybutton ,请查看此存储库的TOX配置和.travis.yml的示例。
bellybutton供应模式的规则应被捕获并导致绒毛失败。 .bellybutton.yml配置中指定的规则必须包括:
description ,表达规则的含义expr ,指定要捕获的模式 - 作为astpath表达式或正则表达式( !regex ... )。此外, rules映射中用于规则的键是其名称。
规则也可能包括:
settings ,以及是否可以通过# bb: ignore该规则example ,该代码将与规则相匹配instead不是替代代码,用于指导开发人员修复其覆盖误差。这些example和instead在运行时检查,以确保它们分别与规则的expr相匹配。
例如,使用ASTPATH表达式的不推荐使用函数调用的覆盖物的规则可能看起来像:
DeprecatedFnCall :
description : ` deprecated_fn ` will be deprecated in v9.1.2. Please use `new_fn` instead.
expr : //Call[func/Name/@id='deprecated_fn']
example : " deprecated_fn(*values) "
instead : " new_fn(values) "!settings节点指定:
included使用Glob Note法运行哪些规则的路径excluded在哪些规则不运行的路径(即使匹配included路径)allow_ignore ,确定是否可以忽略规则,提供匹配规则的行的行为# bb: ignore注释。此外,在.bellybutton.yml的根级别上,可以指定一个default_settings设置,该设置将被规则使用而无需明确设置。每个规则必须具有settings参数,也必须能够倒在default_settings上。
例如,仅特定模块的!settings节点可能看起来像:
my_module_settings : !settings
included :
- ~+/my_package/my_module.py
excluded : []
allow_ignore : no 查看此存储库的.bellybutton.yml作为示例bellybutton配置文件,以及astpath的ReadMe,以获取可以使用bellybutton模式类型的示例。
bellybutton正在Alpha版本中,因此缺少一些关键功能,文档和完整的测试覆盖范围。此外, bellybutton没有在极大的代码库上进行性能进行优化,并且可能包含破坏错误。请报告遇到的任何错误。
!chain和!verbal表达节点尚未实现