Objective - C代码格式检查方案

Objective - C代码格式检查方案

背景

遵循统一的代码规范,编码格式在编码以及阅读代码时可以提高效率。

代码规范包括很多方面,如何命名,使用的范式等等,这部分需要编码时候多加注意,以及在代码评审时提出。

而关于空格使用,代码缩进,如何对齐等格式部分的遵守,则容易被忽略,也不容易遵守。通常需要借助外部代码格式工具。

spacecommander

https://github.com/square/spacecommander

Commit fully-formatted Objective-C as a team without even trying.

spacecommander.这个主要是利用clang来进行自动格式化代码.

内部使用Git hooks 机制,可以实现每次向仓库提交代码前自动检查是否符合代码格式。对于不符合规范的代码提供代码批量格式化工具,以此来保证仓库中代码格式统一。

用例

准备工作

一下示例如何在Git客户端使用spacecommander完成代码格式化。

建立工具代码存放路径

mkdir -p ~/Desktop/Git/spacecommander
cd ~/Desktop/Git/spacecommander
git clone [email protected]:square/spacecommander.git

进入需要添加项目的本地仓库的根目录这里,这里以testJenkins项目为例

cd ~/Desktop/Git/testJenkins

执行一下脚本

~/Desktop/Git/spacecommander/spacecommander/setup-repo.sh

运行完脚本后可见如下

内部操作

ls -al
Objective - C代码格式检查方案_第1张图片
QQ20161028-7.png

脚本创建了 .clang-format 文件的link,这里配置了代码的格式

Objective - C代码格式检查方案_第2张图片
QQ20161028-0.png

如有需要可以调整(注意项目组内部统一),这里使用默认的配置。


进入Git 的配置文件 可以看到 Git hooks做出的改动

cd ~/Desktop/Git/testJenkins/.git/hooks
ls

可以看到存在一个 pre-commit 文件,在 commit 操作之前 spacecommander 执行了代码检查

测试代码格式

在项目代码中随意添加部分代码

Objective - C代码格式检查方案_第3张图片
QQ20161028-1.png

尝试 git commit

 git commit -m"test error style"

可以看到下面的错误提示

Objective - C代码格式检查方案_第4张图片

提示说明了 RiSviews/ViewController.m 这个文件的格式不太对,并且告知了解决方法。按照提示执行下列方法

"/Users/Sola/Desktop/Git/spacecommander/spacecommander"/format-objc-file.sh 'RiSviews/ViewController.m'

在重新尝试commit

git add 'RiSviews/ViewController.m'
git commit -m"test error style"

发现可以提交成功

查看ViewController.m文件

Objective - C代码格式检查方案_第5张图片
QQ20161028-3.png

新增代码中的空格错误,缩进错误等代码格式问题均已备修复。

便捷操作

spacecommander 文件路径下可以看见以下常用几个脚本

format-objc-file.sh  //单个文件格式化
format-objc-files-in-repo.sh //整个项目的代码格式化(不影响Pods中的文件)

可以加价 alias 来简化脚本调用

vi ~/.bash_profile

添加一下代码

alias fmtone='~/Desktop/Git/spacecommander/spacecommander/format-objc-files.sh'

alias fmtall='~/Desktop/Git/spacecommander/spacecommander/format-objc-files-in-repo.sh'
source ~/.bash_profile

以后在项目的根目录中使用 fmtone + '文件名' ,或者 fmtall 命令即可

clang 的格式可以参考这里的可视化 http://clangformat.com
Add #pragma Formatter Exempt or // MARK: Formatter Exempt as the first line of the file, and it will not be formatted at all.

你可能感兴趣的:(Objective - C代码格式检查方案)