yapf-来自Google的Python代码格式化程序
目前,大多数用于Python的格式化程序(例如autopep8和pep8ify)都是用来消除代码中的lint错误的。这有一些明显的局限性。例如,可能不会重新格式化符合PEP 8准则的代码。但这并不意味着代码看起来不错。
YAPF采用了不同的方法。它基于Daniel Jasper开发的'clang-format'。从本质上讲,即使原始代码没有违反样式指南,该算法也可以将代码重新格式化为符合样式指南的最佳格式。这个想法也类似于Go编程语言的“ gofmt”工具:结束所有关于格式的争论,如果在进行修改后,只要将整个项目的代码库简单地通过YAPF传递,样式就在整个项目中保持一致,并且在每次代码审查中都没有争论样式。
最终目标是YAPF生成的代码与程序员遵循样式指南所编写的代码一样好。它消除了维护代码的繁琐工作。
开始使用
要从PyPI安装YAPF:
$ pip install yapf
YAPF仍被认为处于“ alpha”阶段,发布的版本可能会经常更改。因此,保持最新状态的最佳方法是克隆最新的源码。
请注意,如果您打算将YAPF用作命令行工具而不是库,则不需要安装。YAPF支持由Python解释器作为目录运行。如果您将YAPF克隆/解压缩到DIR,则可以运行:
$ PYTHONPATH=DIR python DIR/yapf [options] ...
示例
调用yapf的两个主要API是FormatCode和FormatFile,它们共享几个参数,如下所述:
常见问题
YAPF为什么会破坏我的格式?
YAPF尽力使格式正确。但是对于某些代码,它不如手工格式化好。特别是,在YAPF下,大数据文字可能会被严重毁坏。
其原因有很多,简而言之,YAPF仅仅是帮助开发的工具。它将格式化与样式指南相符的内容,但可能不等于可读性。
可以减轻这种情况的方法是,指示重新格式化某些格式时,YAPF应该忽略的区域:
您还可以像这样禁用单个文字的格式设置:
要保留漂亮的凹形方括号,请使用 dedent_closing_brackets您的样式。请注意,在这种情况下,所有括号,包括函数定义和调用,都将使用该样式。这样可以确保格式化代码库之间的一致性。
为什么不改进现有工具?
我们想使用clang格式的重新格式化算法。它非常强大,旨在提供最佳格式。创建现有工具时会考虑不同的目标,并且需要进行大量修改才能转换为使用clang格式的算法。
我可以在程序中使用YAPF吗?
可以!YAPF旨在用作库和命令行工具。这意味着工具或IDE插件可以免费使用YAPF。