跳转到主要内容

OpenStack黑客指南实施

项目描述

简介

hacking是一组flake8插件,用于测试和实施OpenStack风格指南

Hacking固定其依赖项,因为某些依赖项的新版本可能会破坏基于hacking的网关作业。这是因为依赖项的新版本可能会引入新规则,或者使现有规则更严格。

安装

hacking可在pypi上获得,因此只需运行

pip install hacking

这将安装带有插件的特定版本的flake8。

起源

Hacking最初是Nova的第一个提交中的文本文件。它最初基于Google Python风格指南,并且随着时间的推移,添加了更多OpenStack特定规则。Hacking具有多个用途

  1. 达成一致的风格指南,以便审查不会因风格上的细节而陷入困境。(例如:文档字符串指南)

  2. 通过使样式更统一,使由许多不同作者编写的代码更容易阅读。(例如:Unix与Windows换行符)

  3. 指出危险的模式并避免它们。(例如:覆盖内置或保留字)

最初,黑客风格指南是由审查员手动执行的,但这浪费了大量的时间,因此产生了黑客工具,以自动化流程并减轻人类审查员的工作负担。

版本控制

hacking使用major.minor.maintenance发布符号,其中维护版本不能包含新检查。这样,项目可以通过锁定major.minor数字来控制hacking,同时接受维护更新,而不用担心新版本会因为新的检查而破坏控制。

例如,一个项目可以依赖于hacking>=0.10.0,<0.11.0,并且可以知道0.10.1不会在0.10.0通过的地方失败。

添加额外的检查

每个检查都是一个pep8插件,请阅读

新规则或更改的规则应专注于以下之一

  • 显著提高代码的可审查性(例如:H301,H303),因为它们使理解符号来源变得容易)

  • 捕获未来可能出现的常见编程错误(H201)

  • 防止100%会被开发者拒绝的情况(H903)

但是,就像往常一样,请记住,这些都是指南。把它们当作指南来对待。总有例外的时候。所有新规则都应该支持noqa。

如果需要分阶段添加检查,或者它们不适用于每个项目或其分支,则可以默认关闭这些检查。

要求

  • 检查必须已经得到社区的支持。我们不希望规定风格,而只是执行它。

  • OpenStack风格指南的规范来源是风格指南,hacking只是执行它们;因此,当添加新检查时,它必须在HACKING.rst中。

  • 假阴性是可以接受的,但假阳性是不可以接受的

  • 不能是特定于项目的,特定于项目的检查应该是本地检查

  • 包括广泛的测试

  • setup.cfg中注册为entry_points

  • 错误代码必须在相关的Hxxx组中

  • 检查不应该尝试从被检查的代码中导入模块。导入随机的模块,过去给我们带来了各种各样的麻烦。

启用默认关闭的检查

一些可用的检查默认是禁用的。这些检查是

  • [H106] 不要在源文件中放置vim配置。

  • [H203] 使用assertIs(Not)None来检查None。

  • [H204] 使用assert(Not)Equal来检查相等。

  • [H205] 使用assert(Greater|Less)(Equal)进行比较。

  • [H210] 在mock.patch/mock.patch.object调用中要求‘autospec’,‘spec’或‘spec_set’

  • [H904] 在日志调用中延迟字符串插值。

要启用这些检查,请编辑tox.ini文件中的flake8部分。例如,要启用H106和H203

[flake8]
enable-extensions = H106,H203

本地检查

hacking支持在源树中有本地更改。它们需要在tox.ini中单独注册。

在tox.ini中添加一个新的部分flake8:local-plugins,并列出每个插件及其entry-point。此外,您还可以添加包含插件的文件的路径,这样就不需要用paths指令安装存储库。

[flake8:local-plugins]
extension =
  N307 = checks:import_no_db_in_virt
  N325 = checks:CheckForStrUnicodeExc
paths =
  ./nova/hacking

例如,在上面的例子中,插件位于nova/hacking/checks.py中,需要用@core.flake8ext注释所有函数。

from hacking import core
...
@core.flake8ext
def import_no_db_in_virt(logical_line, filename):
    ...

class CheckForStrUnicodeExc(BaseASTChecker):
   name = "check_for_str_unicode_exc"
   version = "1.0"
   ...

更多详细信息请参阅 flake8 文档

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码发行版

hacking-7.0.0.tar.gz (61.2 kB 查看哈希值)

上传时间 源代码

构建发行版

hacking-7.0.0-py3-none-any.whl (40.1 kB 查看哈希值)

上传时间 Python 3

支持者