Pylint 是一个高级的 Python 风格检查器。虽然 flake8 和 black 会处理“局部”风格:换行符的位置,注释的格式,或者查找注释掉的代码或日志格式中的不良做法等问题。
默认情况下,Pylint 非常激进。它会对所有事情提供强烈的意见,从检查声明的接口是否实际实现,到重构重复代码的机会,这对于新用户来说可能很多。将它温和地引入项目或团队的一种方法是,首先关闭所有检查器,然后逐个启用检查器。如果您已经使用 flake8、black 和 mypy,这将特别有用:Pylint 有很多功能重叠的检查器。
然而,Pylint 独有的功能之一是能够强制执行更高级别的问题:例如,函数中的行数或类中的方法数。
这些数字可能因项目而异,并且可能取决于开发团队的偏好。但是,一旦团队就参数达成一致,使用自动化工具强制执行这些参数将非常有用。这就是 Pylint 的优势所在。
配置 Pylint
为了以空配置开始,请使用以下内容启动您的 .pylintrc
:
[MESSAGES CONTROL]
disable=all
这会禁用所有 Pylint 消息。由于其中许多消息是冗余的,因此这样做是有意义的。在 Pylint 中,message
是一种特定类型的警告。
您可以通过运行 pylint
来检查是否已关闭所有消息
$ pylint <my package>
通常,将参数添加到 pylint
命令行不是一个好主意:配置 pylint
的最佳位置是 .pylintrc
。为了让它做一些有用的事情,我们需要启用一些消息。
为了启用消息,请在 .pylintrc
的 [MESSAGES CONTROL]
下添加。
enable=<message>,
...
对于“消息”(Pylint 称之为不同类型的警告)来说,看起来很有用。我的一些最爱包括 too-many-lines
、too-many-arguments
和 too-many-branches
。所有这些都限制了模块或函数的复杂性,并提供客观的检查,而无需人工挑剔者来衡量代码复杂性。
检查器是消息的来源:每个消息都属于一个检查器。许多最有用的消息都在 design checker 下。默认数字通常很好,但调整最大值很简单:我们可以在 .pylintrc
中添加一个名为 DESIGN
的部分。
[DESIGN]
max-args=7
max-locals=15
另一个有用的消息来源是 refactoring
检查器。我最喜欢启用的一些消息是 consider-using-dict-comprehension
、stop-iteration-return
(用于查找使用 raise StopIteration
的生成器,而 return
是停止迭代的正确方法)和 chained-comparison
,它建议使用 1 <= x < 5
这样的语法,而不是不太明显的 1 <= x && x > 5
最后,一个在性能方面开销很大的检查器,但非常有用,是 similarities
。它旨在通过明确查找代码不同部分之间的复制粘贴来强制执行“不要重复自己”(DRY 原则)。它只有一条消息可以启用:duplicate-code
。默认的“最小相似行数”设置为 4
。可以使用 .pylintrc
将其设置为不同的值。
[SIMILARITIES]
min-similarity-lines=3
Pylint 使代码审查变得容易
如果您厌倦了代码审查,指出某个类过于复杂,或者两个不同的函数基本上相同,请将 Pylint 添加到您的 持续集成 配置中,并且只对您的项目的复杂性指南进行一次争论。
1 条评论