聊聊SwiftLint在团队的实践

SwiftLint.png

(一)背景

大约在两年之前写过一篇关于SwiftLint的文章,时过境迁不得不说当时的想法还是很粗糙的,但至少也给了自己一个启蒙。过去的一年,公司开始自建中心化的CI,也推广到了各个团队中去,参与其中也是获益匪浅。Lint作为CI中的重要的一环自然也有不少的价值输出,但是随着日常深入的应用还是让我又思考了一下关于Lint在公司团队的实践,也算是对于两年前那篇文章的补充和拓展吧。

(二)缺陷和痛点

成本,不得不说,这是让人使用SwiftLint的最大障碍。

1.主动操作的成本

如果我们直接使用SwiftLint的命令行工具来进行规范代码,每次都需要我们主动想起“哦~我需要进行一次lint”,然后我执行了一次“SwiftLint”。对于人而言,主动想起的这个操作是非常高的。产品开发过程中我们总说客户很懒,我们开发人员又何尝不懒呢?

2.构建配置文件的成本

如果我们真的使用SwiftLint,它作为一个工具一定是大而全的,然而落实到每个技术团队那都是“大清自有国情在”,几乎没有哪个项目愿意全量的使用SwiftLint的规则,大多数情况之下我们只想要我们自己所需要的规则。虽然SwiftLint支持
通过编辑配置文件的方式来自定义规则,但是对于一个团队来说往往需要同时开发多个工程,倘若每个工程都需要我们编辑一个配置文件,这样机械的劳动想来是没人愿意做的。

3.团队标准化的成本

在团队的维度上来说,我们一定是希望大家使用相同的规范,使得最后提交的代码不至于五花八门。但是也由于SwiftLint配置文件的特性,使得我们没有办法通过现有的方式来规范整个团队的代码风格规则。

4.CI的局限

诚然CI可以解决一定的问题,通过CI我们可以构造出一套标准的流程,通过统一的标准来对每一个MR/PR中的代码进行lint校验。然而可惜的是,CI也存在自己的局限性,首先无论怎么通知,这里还是存在人的主动性问题,即便是通过钉钉或者邮件通知了当事人本次的提交存在哪些问题,但是由于人的“惰性”,很可能就会忽略了本次的警告。而且,CI的操作必须在commit之后,即便你是一个自驱力极强的人,每次CI报告的规则违反你都会认真修改,但是太多的code style fixed还是会污染整个git日志。所以CI的延迟性,也是一个无法忽视的弊端。

(三)团队实践:SafeCommit

针对以上的缺陷,我们团队打算构建一个SafeCommit工具,在我们的计划中,不光是代码的校验,我们希望把commit的校验也一并做进去,统一化团队的commit风格。

commit-lint.png

每当我们需要git commit的时候,我们通过git sc替代。此时SafeCommit会对被添加的文件进行lint,如果是swift源文件那么就进行lint操作,否则跳过。如果发现当前的文件没有通过lint,那么就把结果输出到窗口。

lint-result.png

lint通过之后,工具会提示用户选择一个commit的类型,然后输入本次的commit的内容,这样的好处是简化了高频的git commit -m 'xxxxxxx',同时也是格式化commit的message,当查看git log的时候将会非常的工整。

selection-commit.png

输入了commit的内容之后,本次的提交也就结束了。

commit-success.png

哦~对了,也是支持SourceTree等GUI工具。

gui-report.png

(四)SafeCommit所解决的问题

被动性

由于SafeCommit是通过git hook实现的,所以从原来的工程师自己主动调用lint的操作变成了提交时的被动lint,也算是极大的照顾了工程师们“懒惰”的天性。同时,也是因为通过git hook实现,即便之后不使用git sc来进行提交,而通过git commit的原生命令来提交,也一样会触发代码以及提交信息的lint(当然这一切的前提是你至少在这个git仓库下运行过一次git sc)。

低成本&低侵入

SafeCommit默认不会对您的仓库做任何的修改,我们也再也不需要烦人的YML配置文件了。我们只需要通过npm来安装SafeCommit,我们就可以在所有的Swift工程下使用它,比起官方README中提到的使用命令行和在build phase里嵌入脚本实在是方便太多。

还有一个减轻成本的地方是,每次提交我们只会对进行了git add操作的文件进行lint。这样的好处是,一来不会大规模的lint造成每次提交缓慢的问题,二来也对没有接入过lint的老项目更加的友好,不至于些许的修改就报出大量的警告。

规范化&普适性

由于使用的是统一的SafeCommit,所以对于团队的代码风格统一也是简单了许多,只需要配置一份(当然对于大多数团队来说直接使用默认的配置,就可以做到开箱即用)配置文件,就可以在所有的Swift项目下使用。SafeCommit也不强依赖其他的IDE,只要你的工程是通过git来进行版本控制的,那么就可以使用SafeCommit。顺带一提,由于SafeCommit的普世的设计,同时也支持Java CheckStyle,如果需要其他的语言支持也可以拓展。

(五)SafeCommit没有解决的问题

针对于iOS开发,如果想要实现eslintvs code上的即时性表现,暂时没有什么太好的办法,即便是SwiftLint官方所说的build phase也是需要build才能展示,这样尴尬的处境可能只能等苹果官方的Xcode新特性了吧。

(六)简洁和规范的意义

大概从上学的时候就能看到人和人的差别,他们字迹未必好看但下笔一定工整,一笔一划处处用心。本来工整的行文和整齐的排布并不能多得两分,但这份严谨的匠人态度一再让我叹服。

优秀是一种习惯,最后附上一张爱因斯坦的手稿作为结尾,与君共勉。

爱因斯坦手稿.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容