如果某个项目需要不同的代码格式化程序,请在项目级别进行选择:使用该项目的配置文件,并且如果你在 Visual Studio Code 中工作,还可以使用其工作区设置。这样既能保持 VS Code 用户默认设置不变,又能让项目的格式化选择具备可重复性。以下步骤主要针对 macOS 和 VS Code;其他编辑器可能会使用不同的控制项。

确定“格式化程序”对该项目意味着什么

首先确认语言和实际需求。格式化程序会将代码重写为某种风格;而基本的编辑器设置可能仅控制缩进、行尾序列或空白字符。例如,EditorConfig 提供了参与编辑的软件可读取的项目风格属性,而 Prettier 则是一个拥有自身项目配置的格式化程序。这些工具可以相辅相成,但单凭一个 EditorConfig 文件并不能选择或安装格式化程序。EditorConfig 介绍了其格式和编辑器插件;Prettier 配置指南 说明了它是如何读取受支持的配置文件的。

在添加另一个格式化程序之前,请先检查该项目已经使用了哪个格式化程序。查看其包清单(package manifest)、格式化程序配置和项目文档。如果团队成员或自动化检查要求使用特定的工具或版本,那么与该设置保持一致通常是最实用的选择。安装相互冲突的格式化程序或更改其选项,即便代码仍可正常运行,也可能会产生大量的差异(diff)。

选择设置所属的位置

在 VS Code 中,用户设置会应用到你在编辑器中的所有操作,而工作区设置仅应用于当前打开的项目,并且优先级高于用户设置。VS Code 将工作区设置保存在项目根目录下的 .vscode 文件夹中;用户设置则单独存储在 macOS 账户的应用支持目录(application support directory)中。使用命令面板(⇧⌘P)并选择 首选项: 打开工作区设置 (JSON)(Preferences: Open Workspace Settings (JSON))来编辑项目设置。在进行任何更改之前,请确认设置编辑器显示的是 工作区(Workspace)。VS Code 设置文档 解释了相关作用域和位置。

若要仅为该项目中的某种语言选择格式化程序,请在工作区设置中添加针对特定语言的默认格式化程序条目。例如,如果项目对 JavaScript 使用 Prettier VS Code 扩展,则设置格式如下:

{
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  }
}

请使用实际安装在你编辑器中的格式化程序的扩展标识符;本示例并非通用标识符。如果项目包含多种语言,请为每个相关语言分别添加条目,而不是设置全局默认值。VS Code 的 使用...格式化文档(Format Document With...)命令可让你在当前文档可用的格式化程序中进行选择,并且可以通过命令面板调用其格式化操作。VS Code 格式化指南 对这些控制项进行了说明。在此项局部更改中,尽量避免启用“保存时格式化”(format-on-save),除非你希望该项目中的每一次保存都触发格式化。

将格式化程序的规则保留在项目中

默认格式化程序只是选择了工具;它并没有定义该工具的所有格式化规则。请将共享规则保存在所选格式化程序能够识别的配置文件中。对于 Prettier,该文件可以是位于项目根目录下的 .prettierrc.json 文件。一个最小化的示例可能只指定项目已商定使用的选项:

{
  "singleQuote": true
}

Prettier 会从正在格式化的文件开始,逐级向上在父目录中搜索配置,因此根级配置可以作用于其下方的文件。它还支持其他几种配置格式;请选择项目版本和现有工具链支持的格式。Prettier 配置文档 列出了受支持的文件和解析行为。

如果目标仅仅是在不同编辑器之间保持一致的缩进或行尾序列,可以考虑在根目录下使用 .editorconfig 代替。例如,root = true 会停止搜索更远层级的 EditorConfig 文件,而像 indent_style、indent_size 和 end_of_line 这样的属性可以定义基本的文本规范。编辑器的支持情况因插件而异,且这些属性无法替代感知语言的格式化规则。EditorConfig 规范与概述 描述了文件的查找方式以及匹配规则的应用方式。

在格式化前验证作用域

保存工作区设置和配置,如有必要,在 VS Code 中重新打开项目文件夹。打开一个具有代表性的文件,并使用 使用...格式化文档(Format Document With...)确认所选的格式化程序。如果未列出该格式化程序,请检查其扩展是否已安装并支持该语言;工作区设置本身无法安装扩展或添加格式化程序支持。

在广泛应用格式化之前,请在源代码管理(Source Control)或差异视图中检查受影响的文件。建议先对少量具有代表性的文件进行格式化,尤其是当项目已有代码风格规则或包含生成的文件时。如果输出结果不符合预期,请停下来检查父目录中是否存在冲突的配置、特定语言的设置,或者项目已经预期的另一个格式化程序。通过编辑器的源代码管理工具撤销不需要的格式化更改,然后调整项目配置并在少量文件上重试。

这样可以使决定与项目紧密结合:VS Code 的用户默认设置保留在各自独立的作用域中,而项目可以自带其专属的格式化程序选择和规则。如果你更换了编辑器,工作区设置不会随之迁移,因此在相应编辑器支持的情况下,应依赖格式化程序的项目配置文件。

参考来源