spacecommander:以统一格式将Object-C代码commit到git仓库的工具

spacecommander

Space commander为iOS开发团队提供了一个,无需任何手动修改,以统一格式将Object-C代码commit到git仓库的工具。

你可以用来:

  • 在commit前强制实施格式规范化约定
  • 一行代码就可以格式代码(单独的文件和整个repo都适用)
  • 执行Pull请求时,如果试图将不规范的代码添加到分支,会失败

特别是在Pull请求的应用上,Space Commander精简了iOS开发的流程。开发者不再需要刻意关注格式规范化标准的实施,把这些时间花在更好的地方吧!

你可以fork Space Commander来设置自己的格式规范化标准(下面有更多实施细节),或者clone使用Space设定的OC标准。

本地安装

为目标repo添加代码commit前的格式规范化检查:终端进入目标repo中,运行path/to/spacecommander/setup-repo.sh。

使用

运行setup-repo.sh后,每次commit前都会自动进行格式规范化检查。

格式规范化单个文件并进行修改:运行format-objc-file.sh <file>。

格式规范化但不修改:format-objc-file-dry-run.sh <file>。

格式规范化repo中所有的OC文件:format-objc-files-in-repo.sh。

细节

为了安装commit前的钩子,每个开发者都要在项目中运行安装脚本。commit前的钩子是用来确保代码成功commit前都进行了格式规范化。

如果在commit的过程中有格式规范化错误,可以通过运行脚本来自动修改代码,确保commit时没有错误。

在Square中,该格式规范化仓库是一个大的iOS项目的子模块,所以格式规范化规则和脚本是与父类仓库的修订绑定的。这样的话我们可以将检查格式规范化版本作为编译过程的一部分,如果不是当前版本,编译返回失败。(我们还可以轻松检查旧版本的SHA)

clang-format规定自定义的规则文件在命令所运行的目录下,所以目标仓库中添加了一个规则文件的.gitignore-d符号链接。有了这个符号链接,开发者只需要更新格式规范化仓库的git SHA,就可以从上游得到最新的格式规范化规则

配置

只格式规范化特定目录下的文件:在.formatting-directory文件中指定每个目录的名字,用换行符分割(中间不要有空格)。否则所有repo中的OC文件都会被检查。

忽略目录下的文件的格式规范化:在.formatting-directory-ignore文件中添加每个目录名字,用换行符分割。

修改格式规范化输出:

  • .clang-format用来编译clang-format选项
  • format-objc-file-dry-run.sh and format-objc-file.sh用来实现custom/中自定义的规则
  • Testing Support/文件用来验证你的修改

在文件第一行添加 #pragma Formatter Exempt 或者 // MARK: Formatter Exempt来忽视格式规范化。

为Pull请求验证所进行的安装

下面的说明是Square特有的。我们使用了叫做mobuild的编译系统。所使用的钩子,format-objc-mobuild,可以整合进其他的编译系统。

如果你想进行强制性样式检查来得到一个可合并的PR,按以下步骤操作:

  • 将此仓库添加进cocoapods,或者将其添加进Scripts/目录下作为一个子模块。
  • 确保你的仓库的顶层已经安装了.sqiosbuild.json 和 .stashkins文件(更多请查看Square的维基页面中的《All About Mobuild》)
  • 编译的机制是检查上面的条件,如果有符合的,自动运行format-objc-mobuild
  • 打开一个带有修改过得OC文件的PR来证实这些检查运行了。

更新样式选项

通过改变.clang-format来改变格式规范化规则。查看 clang website获取可选的样式选项。

同时在UnformattedExample.m(在./Testing Support/目录下)中添加,所改变的格式规范化规则下错误的示例代码。

然后在FormattedExample.m(同样的文件夹)中添加相应的修改结果,然后运行./test.sh来测试运行产生预期结果。

自定义格式

clang-format非常棒我们都很喜欢,但是它也有一些限制。我们在custom/文件夹中,使用脚本语言添加了一些自己定义的格式规范化功能。如果你向custom/中添加自定义文件格式脚本,要在format-objc-file.sh 和 format-objc-file-dry-run.sh中调用,以及在Testing Support/中添加输入/输出示例。

预期外的结果?

格式规范化并不是无所不能。可能会产生预期外的结果,这种情况下你可以进行以下一项操作:

  • 重构代码,更简单,使得格式规范化过程更少迷惑
  • 使用// clang-format off 和 // clang-format on选择性开启/关闭文件中代码的clang-format
  • 在文件的第一行添加#pragma Formatter Exempt 或者 // MARK: Formatter Exempt,这个文件将不会进行格式规范化

Wislawa Szymborska说过:“如果只是小剂量,所有的缺陷都更容易忍受了。”Space Commander会移除近乎所有的不规范格式,但是有时候你还是要忍受偶然的偏差结果。

贡献

很高兴看到你们对 Space Commander的喜爱以及使用。请在提交Pull请求之前阅读我们的贡献指南

谢谢,格式规范化愉快!

开源地址:https://github.com/square/spacecommander

1 1 收藏

资源整理者简介:西西里的仔仔

简介还没来得及写 :) 个人主页 · 贡献了12个资源 · 13 ·   


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1438 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer