鳄鱼和黑天鹅 上海野生动物园

PHP Code Sniffer加Git pre-commit hook实现代码规范预提交审查

Posted onLeave a commentCategories技术文章

先说几句题外话。

上个周末有幸去参加了 2017 PHPCon, 很多议题听的是云里雾里。一些嘉宾分享的东西貌似都是大公司流行的技术和最佳实践,像swoole和跨语言服务架构之类。但是我的经验大部分都是服务于外企小公司,和他们还是有点脱节。另外有人分享 Mysql 8,以后不支持 MyISAM, 只支持 InnoDB。泪流满面,想想当初我花了多少时间去了解和实践两者的区别。这尼玛才几年啊,说没用就没用了。套用网上的一句调侃的话:大清真的是亡了 。。。

鸟哥的演讲给我的感觉他是非常务实的一个人,难怪他能取得如此的成就。有个参会者问了鸟哥一个有关性能的问题,具体问题我都已经忘记了,但是鸟哥笑着回答印象深刻,性能真的重要么?举双手赞同。我现在是越来越认同能用来产生经济效益的技术才是好技术,不能赚钱的技术说白了,有卵用。

Anyway, 这不是今天要讲的主题。

提问嘉宾环节,有人问嘉宾代码审查有什么可以分享的。有个嘉宾说他每天 Code Review 十几个人的代码。一般第一步是查看代码规范。代码规范不过的话,就不往后看了。

这个有点出乎我的意料。我混迹的外企小单位里代码规范的审查应该是几年前就通过工具自动去实现了。这步是完全不需要代码审查者去花费时间的。另外我突然想起来我为公司面试的时候问过很多 candidate, 他们中也很少有人知道诸如 PHP Code Sniffer 之类的工具。

其实实现起来非常简单,就两个东西

– 安装 PHP Code Sniffer (phpcs), 安装没什么花头,也不打算赘述如何安装 phpcs 了,根据不同平台有不同装法。MacOS 下 homebrew 可以直接 search 到。

– 配置 Git pre-commit Hook

这个就是要到项目目录的 .git/hooks/ 目录下 添加一个文件 pre-commit
这个文件的内容 Google 一搜一大把,随便贴一个 这里

说起来原理也非常简单,就是当你在提交代码的时候,Git 会调用 pre-commit hook, 这个 hook 里调用了 phpcs 来检查你提交的代码是否符合指定的代码规范。如果不通过就提交不了并且给出不符合代码规范的具体反馈。

PHP Code Sniffer 可以指定多种代码规范,比如 PSR-2, 现在应该算是标准的规范。当然也可以指定参数为其他的代码规范,比如我上家公司做 Drupal 开发的,他们就需要指定 Drupal 的代码规范。这些都可以通过 phpcs –standard 参数来控制。

正确配置完,就能愉快的获得类似下图的反馈。根本不需要团队成员去浪费时间查看代码规范。

php code sniffer feedback
Feedback from php code sniffer

当然这个 hook 需要配置在所有的开发者自己的机器里。我现在的做法是把这个 pre-commit 文件提交到代码库, 然后再 composer.json 里 加一步骤强制拷贝这个文件到 .git/hooks 文件夹。这样团队成员只需要例行 运行 composer install 就安装上 hook 了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注