python的格式化工具black

背景

接触了一个python项目,发现格式化有点奇怪.
因此想使用lsp的功能来格式化,发现微软给python搞的 pyright 还没有太大进展.
许多功能都欠缺

  • 格式化代码
  • 整理imports

于是在不使用传统 ls-python-ms 的情况下,计划使用其他格式化工具.

目前的格式化工具

  1. black (27k)
  2. yapf (12.5k)
  3. autopep8 (4k)

其中black与yapf还算ok.
对比起来,据说yapf会对同一个输入有不同的输出.无法忍受.

剩下方面,yapf配置项更多,看起来是个更好更自由的东西.
毕竟只要在组织内共享一个文件就能统一一个组织的代码风格就已经不错了.
像black一样提供最少的配置,图谋天下代码一般风格,基本上属于痴人说梦,50步笑百步.

安装

Arch Linux下包名为 python-black.

简单使用

1
balck xxx.py

此外还可以指定配置文件,或者直接在选项中指定一些配置内容.

配置文件

项目级别配置,通常会从当前文件夹起,一直查到项目根目录,直到找到一个 pyproject.toml 的文件.
全局级别配置,通常是在 ~/.config/black

内容举例如下

1
2
3
4
5
6
7
8
9
[tool.black]
line-length = 88
target-version = ['py37']
include = '\.pyi?$'
extend-exclude = '''
# A regex preceded with ^/ will apply only to files and directories
# in the root of the project.
^/foo.py # exclude a file named foo.py in the root of the project (in addition to the defaults)
'''

官方的配置还是不错的.

只是,官方不知为默认一行最长88字符,既不传统(80),也不现代(100以上),难道图吉利?
大多数情况下都会做自定义吧…

效果

相比pycharm默认的一些配置,在参数列表很长的函数调用处,对于每个参数间的换行处理非常不错.

参考

  1. 目前的工具列表
  2. black比yapf好些的原因
  3. 官方对于配置文件的一些说明