我想在提交之前对 Python 代码进行一些分析,以温和地“执行”标准。
我想要一张支票,例如:
(团队内部我们可以根据需要扩展列表)
这些应该仅作为警告,因为我不想在需要时阻止提交。
我正在研究 pycharm 设置/版本控制/提交/提交前分析/ 但这只是有时有效,并且只接受正则表达式。
有没有更好更简单的方法来做到这一点?
在此上下文中,您可以使用一组(或多组)标准 Python linter,例如 flake8、pylint 或 black。最好使用单独的 linter 并签入配置,而不是特定的编辑器设置,因为不同的人可能使用不同的编辑器。但是,大多数主要编辑器可以以标准方式调用外部 lint 工具并在编辑器中显示 linting 输出。这使得开发人员可以在键入时看到任何相关更改并尽早纠正。
您提到您不想提交失败,因此您可以编写一个如下所示的
pre-commit
钩子:
#!/bin/sh
# Replace the line below with your preferred lint tool.
MY-LINT-TOOL
exit 0
这意味着检查将始终成功,因为它退出为零,但它将运行 linter 并显示输出。这是使用 Git 执行此操作的标准方法,但不一定保证所有编辑器都会显示该输出;这是实施质量问题。
请注意,无法在存储库中自动安装钩子,因为钩子可以执行任意代码,这将是一个安全漏洞。您可以为想要使用它们的人提供它们,并提供安装它们的脚本,但您也应该考虑并尊重有些人不想使用它们。如果您需要强制执行策略,则必须在服务器端完成,并且通常作为 CI 作业的一部分完成;客户端挂钩可以轻松绕过且不留任何痕迹。
您决定使用哪种 linter 由您决定并取决于您的特定需求。它们中的大多数将遵循 PEP 8 样式规则,这是 Python 的惯例,我会推荐这些规则(因为当语言具有强大的默认样式时,您通常应该更喜欢使用该语言的默认样式规则,无论它们是什么)。您可能决定使用多个选项,如果您有多种语言(例如在网络应用程序中),这也可能很有用。然而,在每次提交时运行所有这些可能会很慢,因此最好尽量减少钩子中运行的数量。