目录

  • 介绍
  • 代码规范检查与修复
  • 在git commit时自动检查代码规范
  • 后记

介绍

在团队协作开发中,代码规范是必要的。以前的规范都是自己定,然后手动检查,很难做到有效的约束。

现代的PHP,则有得到广泛认可的编码规范:PSR-1,PSR-2

同时也有配套的包squizlabs/php_codesniffer(下面简称phpcs)可以自动检查代码是否符合规范,并能自动修复部分不规范的代码。

结合brainmaestro/composer-git-hooks,可以进一步做到,在git commit时,强制代码规范的检查。

代码规范检查与修复

安装phpcs包:

composer require squizlabs/php_codesniffer  --dev

这个包,包含了2个工具:

  1. phpcs用于检查代码规范;
  2. phpcbf用于根据代码规范修复代码。

工具位于vendor/bin/目录。

假设要检查app/目录下的代码是否符合规范,执行:

$vendor/bin/phpcs --standard=PSR1,PSR2 app/ routes/ config/

其中,--standard用于指定检查规范时使用的标准,这里使用PSR1和PSR2。而app/,routes/和config/是laravel工程的代码目录。

手动修复代码规范是一件很累人的事情,一般是先通过自动修复,对于修复不成功的再手动修复。执行以下命令可以完成自动修复。

$vendor/bin/phpcbf --standard=PSR1,PSR2 app/ routes/ config/

有些规则,phpcbf无法自动修复,而我们改起来又十分烦琐,可以考虑自定义这些规则。比如上面截图中的一行不能超过120个字符的这条规则,无法被自动修复,但不论是第三方包,还是我们自己写的代码(通常是注释),超过120个字符的非常多,一一修复就太累了。于是修改了该条规则,将数值扩大到240。

具体方法是创建ruleset.xml文件,拷贝以下内容

<?xml version="1.0"?>
<ruleset name="Custom">
<description>Zend, but without linelength check.</description>
<rule ref="Generic.Files.LineLength">
<properties>
<property name="lineLimit" value="240"/>
<property name="absoluteLineLimit" value="0"/>
</properties>
</rule>
</ruleset>

然后在执行代码检查时,在--standard参数附上自定义规则文件路径

$vendor/bin/phpcs --standard=PSR1,PSR2,./ruleset.xml app/ routes/ config/

每次要敲这么长的命令并不方便,一般是写在composer.json中,通过composer lint执行代码检查,通过composer lint-fix修复代码。

要实现这样的效果,修改composer.json, 在scripts增加:

    "scripts": {
// 省略其他部分...
"lint": "phpcs --standard=PSR1,PSR2,./ruleset.xml app/ routes/ config/ ",
"lint-fix": "phpcbf --standard=PSR1,PSR2 app/ routes/ config/ "
}

然后执行composer lintcomposer lint-fix试试。

在git commit时自动检查代码规范

在上一节中,我们已经支持代码规范检查和代码修复。但是实际开发中,常常会忘记要去检查。为了更好的管控流程,最好能在git commit时自动检查,如果不符合规范就停止commit。这就需要使用git的hooks机制,在pre-commit时,执行规范检查和代码修复 。可以直接编辑 .git/hooks/pre-commit,写入在每次git commit之前要执行的脚本。

也可以通过brainmaestro/composer-git-hooks这个包解决此问题,这里使用后面这个方案。

首先安装包:

$composer require brainmaestro/composer-git-hooks

然后编辑composer.json,在extra增加:

    "extra": {
// 省略其他部分...
"hooks": {
"pre-commit": [
"echo committing as $(git config user.name)",
"composer run lint"
]
}
},

写好脚本以后还不能直接使用,需要先通过vendor/bin/cghooks生成.git/hooks/pre-commit

$vendor/bin/cghooks add # 将创建.git/hooks/pre-commit
或者
$vendor/bin/cghooks update ## 将composer.json的内容更新到.git/hooks/pre-commit

如果composer.json与.git不是在同一个目录下,还需要加--git-dir参数,比如vendor/bin/cghooks add --git-dir="../.git"

生成.git/hooks/pre-commit以后,就可以试试,修改一些文件,然后执行git commit看看git hooks有没有被触发。类似下面的执行结果。然后如果有执行错误,会发现git commit不成功。

至此,代码规范的检查就大功告成了。

后记

  1. 其实就是将nodejseslint, husky对应到php版本(没有prettier)。
  2. 有些工程,前端代码和后端代码放在同一个git工程下的不同目录,js那边使用husky自动生成pre-commit钩子,而laravel这边使用了brainmaestro/composer-git-hooks钩子生成了pre-commit,会出现相互覆盖的问题。解决此问题的方法是有2种:一种是创建一个scripts/pre-commit,让开发者在clone工程以后,拷贝到.git/hooks/pre-commit;另一种就是在工程根目录下安装husky,然后在将工程中所有commit之前要做的检查都写入进来。推荐使用第2种方法,husky这个包做得比php这边的包要好用。

laravel代码规范强制检查的更多相关文章

  1. Java-idea-Checkstyle自动化代码规范检查

    一.概述 CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具.它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱 ...

  2. 扩展阿里p3c实现自定义代码规范检查

     前段时间fastjson报出了漏洞,只要打开setAutoType特性就会存在风险,自己测试环境的一个项目被揪出来了-_-!.虽然改动很小,但就是觉得憋屈.fastjson还是挺好的,想着禁用的话太 ...

  3. C#零基础入门08:代码规范

    一:前言 没有规矩,不成方圆.在代码的世界中,尤其这样.作为程序员,我们不想让我们的代码写出去之后被人耻笑:看,连个换行都换的这么不专业.作为开发主管,我们则不想我们的组员写出来的代码各类风格都有,五 ...

  4. Java 代码规范,你应该知道的一些工具和用法

    从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 JD 上看到这个要求:要有良好的编程习惯.其实都是在讲代码规范(Code Style)这件事情. 每个人都有自己的编 ...

  5. Java 代码规范,你应该知道的一些工具和用法(转)

    转自:http://yifeng.studio/2017/06/30/coding-with-code-style/ Java 代码规范,你应该知道的一些工具和用法 2017-06-30 从事编程这个 ...

  6. SwiftLint:代码规范检查工具介绍

    Swift-CodeStyle Checker:SwiftLint 介绍: SwiftLint 是一个用于强制检查 Swift 代码风格和规定的一个工具,基本上以 GitHub's Swift 代码风 ...

  7. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  8. Java代码规范、格式化和checkstyle检查配置文档

    http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...

  9. Jenkins系列——使用checkstyle进行代码规范检查【升级版】

    1.背景 在<Jenkins系列——使用checkstyle进行代码规范检查>一文中完成了ant实现代码规范检查的例子.但存在以下缺陷: 每个作业都需要配置一个不同的checkstyle ...

随机推荐

  1. 一段不错的代码JS的顶部轮播广告

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. ActionMq + mqttws3.1 实现持久化订阅

    activemq版本:5.15.3 Eclipse Paho MQTT JavaScript library mqttws3.1:在amq安装目录下webapp-demo目录下可以找到 实现步骤请阅读 ...

  3. RabbitMQ如何实现高可用

    RabbitMQ一共具有三种模式:单机.普通集群.镜像集群 单机模式 单机模式,就是我们平常玩的demo,生产上肯定不能用.具体安装部署过程可以参考我的这篇文章:CentsOS原生RabbitMQ安装 ...

  4. 并发编程-线程,JMM,JVM,volatile

    1.线程 相信大家对线程这个名词已经很不陌生了,从刚开始学习java就接触到线程,先说说进程吧,进程就是系统分配资源的基本单位,线程是调度cpu的基本单位,进程由线程组成,一个进程至少又一个线程组成, ...

  5. Springboot 项目源码 vue.js html 跨域 前后分离 shiro权限

    官网:www.fhadmin.org 特别注意: Springboot 工作流  前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0 ...

  6. 【开发笔记】- AbstractRoutingDataSource动态数据源切换,AOP实现动态数据源切换

    AbstractRoutingDataSource动态数据源切换 上周末,室友通宵达旦的敲代码处理他的多数据源的问题,搞的非常的紧张,也和我聊了聊天,大概的了解了他的业务的需求.一般的情况下我们都是使 ...

  7. Fiddler模拟响应

    1 启用规则 2 不匹配的规则通过,不勾选会导致不匹配的请求失败 3 匹配url 4 响应信息,Fiddler内置了一些响应脚步,你也可以选择一个保护响应信息的文本文件

  8. android studio学习----构建(gradle )依赖时使用动态依赖的问题

    今天在看Dan Lew大神的博客发现最新的文章就是 “Don't use dynamic versions for your dependencies” Everyone, please, to st ...

  9. Python Django 实现简单注册功能

    Python Django 实现简单注册功能 项目创建略,可参考前期文档介绍. 目录结构如下 编辑views.py from django.shortcuts import render # Crea ...

  10. centos下的python无法打印中文

    Python3中输出中文的方法如下: 方法一:在环境变量中,设置PYTHONIOENCODING=utf-8 以centos为例执行: export PYTHONIOENCODING=utf-8 方法 ...