Formatter工具也有很多种,但是我们几乎没有去考查其它的formatter,就选择了black,只因为它的logo:
与其它Formatter工具提供了体贴入微的自定义配置不同,Black坚持不让您做任何自定义(几乎)。这样做是有道理的,允许定制只会让团队陷入到无意义地争辩当中,而风格并无对错,习惯就好。我们常常看到在团队里,一些人为代码风格争论,其实他们反对的并不是某种风格本身,他们只是在反对自己的同事而已。
当然Black还是开了一个小窗口,允许你定义代码行的换行长度,Black的推荐是88字符。有的团队会把这个更改为120字符宽,按照阴谋论的观点,幕后的推手可能是生产带鱼屏的资本力量。
在ppw生成的项目中,我们把black的设置放在pyproject.toml中:
[tool.black]
line-length = 88
include = '\.pyi?$'
另外一个值得一提的工具是isort。它的作用是对代码中的import语句进行格式化,包括排序,将一行里的多个导入拆分成每行一个导入;始终把导入语句置于正式代码之前等等。通过 ppw向导生成的项目,这个工具也开箱即用的:
[tool.isort]
profile = "black"
这里的配置是防止isort与black相冲突。实际上flake8、black和isort都的配置需要精心同步才能避免冲突。一时发生冲突,就会出现这样的情况,被A工具改过的代码,又被B工具改回去,始终无法收敛。
比较遗憾的是,在vscode下没有一个好的工具可以自动移除没有使用的导入。Pycharm是可以做到这一点的。开源的工具中有可以做到这一点的,但是因为容易出错,这里也就不推荐了。
在vscode中,Lint工具可以检查出未使用的导入,然后您需要手动移除。移除未使用的import
是必要的,它可以适当加快程序启动速度,降低内存占用,并且避免导入带来的副作用。
我们把pre-commit hooks放在这一章里介绍,是因为高效的编码也必须是正确的编码。有时候我们会觉得国内的公司不需要计划和文档,需求、设计和编码各方之间不需要反复协商和沟通,一个指令下来,就很快得到执行。这被认为是执行力强,是一大体制优势,但这些“执行力”强的公司,却又累得要死。方向不正确,累死又有何益?
pre-commit是一个python包,可以通过pip安装:
$ pip install pre-commit
pre-commit安装后,会在你的项目目录下创建一个.git/hooks目录,里面有一个pre-commit文件。这个文件是一个shell脚本,它会在你执行git commit命令时被调用。pre-commit hooks的作用是在你提交代码之前,对代码进行检查,如果有错误,就会阻止你提交代码,从而保证代码库不被这些错误的、不合规范的代码污染。
如果使用向导生成项目的话,向导已经为您安装了pre-commit hooks,当您运行git commit
命令时,就会看到这样的输出:
可以看出,pre-commit