用变形金刚实现代码格式化的自动化

129 阅读4分钟

你是在本地机器上运行代码格式化器以使代码看起来统一?或者你在CI构建中运行它们,并手动推送修改到版本库?如果你对这两个问题的回答都是 "是",那就来见见变压器吧。

DeepSource Transformers消除了繁琐的手动设置,使你的项目的代码符合风格指南。你只需设置一次,然后看着DeepSource向你的存储库发送拉动请求,或者在现有的拉动请求中用格式化的代码更新提交,每次更改集不遵守所选择的风格指南。

不用再摸索CI脚本了。仓库中的提交历史不再混乱。再也不用在合并前要求其他开发者修正他们的代码风格了。

有了这个版本,你可以直接在DeepSource配置文件中启用Python的Black和YAPF,以及Go代码的gofmt。

为什么我们需要变形金刚

当谈到我们如何写代码时,我们都有自己的偏好。有些人只在分号代表一个小的停顿时才喜欢它;有些人则喜欢在每一行的末尾都有分号。当我们和别人一起做软件项目的时候,我们不能让这些代码风格的差异悄悄出现。

有一些代码格式化工具,如Black、YAPF或Python的autopep8,Go的gofmt,JavaScript的Prettier,等等。这些工具通常是代码编写过程的一部分--我们把它们添加到我们的代码编辑器和IDE中,或者预提交钩子,它们有助于保持我们编写的代码的良好状态。

然而,在全球范围内,只有少数软件团队能够在存储库层面实现自动化的代码格式化。这需要建立CI管道,在每次提交或拉动请求时运行这些工具。在每次合并或每次拉动请求时,将格式化的代码推回版本库。

DeepSource已经使可操作的静态代码分析更容易设置和维护。我们还推出了Autofix,它根据DeepSource检测到的问题生成自动代码补丁。我们意识到,我们可以将Autofix的功能扩展到代码格式化器。这将使开发人员能够在每次提交时运行他们所选择的代码格式化程序,以及分析运行和自动修复。

这是一个减少检测问题噪音的好方法。而不是仅仅标记代码中的样式问题,我们可以领先一步,使用你信任的工具为你修复它。

启用变压器

启用变换器需要你授予DeepSource对你的版本库的写入权限。在幕后,转化器使用与自动修复相同的应用程序和授权范围。如果你已经给了DeepSource Autofix的访问权,可以在你的版本库中创建拉动请求,你不需要安装任何其他东西。

如果你没有,你可以从 "生成配置 "屏幕上触发Autofix的安装(如下图视频所示),或者你可以在DeepSource中打开你的版本库的仪表板,进入 "设置"→"Autofix "并触发安装。

一旦安装,你可以使用配置屏幕的 "变形器 "部分来添加一个可用的工具。这将添加一个[[transformers]] 块到.deepsource.toml 。将更新后的代码提交到你的版本库,或手动编辑配置,你就可以了。

现在DeepSource将扫描所有新的变化,如果它需要在你的代码上运行变形工具,你可以在版本库仪表板的 "历史"→"变形 "下找到它。

下一步是什么

阅读变形金刚测试版发布说明。

我们在文档中增加了变形金刚的配置参考。查看它可以看到可用的变形器列表和每个变形器所需的配置。

我们正在努力增加对更多变形器的支持。在那之前,如果你已经使用Black来格式化Python代码,或者使用YAPF来格式化Python,请尝试一下变换器。如果你写Go并使用gofmt 来格式化Go代码,你也可以设置一下。我们希望在我们的社区论坛上听到你的意见。