分享

yapf-来自Google的Python代码格式化程序

 CNStudent 2020-12-16

目前,大多数用于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。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多