Space Commander 介绍
Space Commander 是 Square 开源的一款 Objective C 代码格式化工具,这个工具可以为 iOS 开发者向 Git 仓库提交代码时提供统一的格式化能力。
以下一节翻译自 Space Commander README.md
Space Commander 让一组 iOS 开发人员可以向 git 仓库提交统一格式的代码,无需任何人工修复。
你可以使用它完成以下工作:
- 在代码提交前强制使用统一的格式
- 一键格式化代码(单个文件或整个仓库)
- 未格式化的代码提交时编译失败
在 Square,Space Commander 有一个针对 pull request 的工作流水线。应用格式化标准时无需人工干预,时间可以花在更有意义的地方。
你可以 for Space Commander,然后使用自己的格式化规则,或者直接使用 Square 的 Objective-C 格式化规则。
- 本地安装
从 git 仓库根目录,运行 path/to/spacecommander/setup-repo.sh
即可为当前仓库添加 pre-commit
。
- 用法
运行 setup-repo.sh
之后每次提交代码时会自动进行格式化检查。
运行 format-objc-file.sh <file>
可以对单个文件进行格式化。运行 format-objc-file-dry-run.sh <file>
可以对单个文件进行格式化,但不修改文件本身。
运行 format-objc-files-in-repo.sh
格式化仓库中所有的的 OC 文件。
- 详情
项目中的每个开发者运行 setup script 后就会安装 pre-commit 钩子。这个钩子会在 commit 成功前检查代码是否有格式化。
commit 时如果有格式错误,会自动运行一个修复代码的脚本。
在 Square,这个提供格式化脚本的仓库是更大规模的 iOS 项目中的一个子模块,所以格式化规则及脚本会锁定到父仓库的某个版本。我们以这种方式检出格式化的代码,作为构建过程中的一部分。如果格式不正确,构建会中止。
- 配置
为了只格式化特定目录中的 OC 文件,需要在 .formatting-directory
指定每个目录的名字。否则,将检查仓库中所有的 OC 文件。
为了忽略特定目录中的 OC 文件,需要在 .formatting-directory-ignore
指定每个目录的名字。
编辑以下文件来修改格式化输出:
- 编辑
.clang-format
修改内置的clang-format
选项 format-objc-file-dry-run.sh
和format-objc-file.sh
来修改custom/
中的规则Testing Support/
用于验证修改
如果期望 formatter 忽略某些文件,可以在文件的第一行添加 #pragma Formatter Exempt
或 // MARK: Formatter Exempt
。
- 自定义规则
clang-format
非常赞,我们喜欢它。但它仍然有许多限制。我们在 custom/
中添加了自己的格式化规则。你也可以在 custom/
中添加自己的规则,然后调用 format-objc-file.sh
和 format-objc-file-dry-run.sh
来应用新的规则。输入输出示例添加到 Testing Support/
目录下。
- 预期外的输出
formatter 并不能完成所有的事情。偶尔会产生预期外的结果,此时的处理办法如下:
- 重构代码,以便 formatter 更容易识别代码
- 使用
// clang-format off
或// clang-format on
来选择性地为文件中的指定行开启或关闭clang-format
- 在文件首行添加
#pragma Formatter Exempt
或// MARK: Formatter Exempt
,当前文件不会被格式化