在一个多人合作的项目中,使用同一份代码规范是非常重要的

风格混乱不统一会造成阅读困难、工作交接困难、增加 Review 成本等问题,还可能会造成潜在的 Bug

FIG

今天分享一下几个代码风格工具

  • IDE CodeStyle
  • EditorConfig
  • CodeSniffer
  • SonarQube
  • StyleCI

PHPStorm设置CodeStyle

PHPStorm 中有 CodeStyle 配置,是格式化代码时的依据。当你新写或修改了一段代码,想要 Commit 的时候,先选中你的代码使用 CTRL+ALT+L 格式化一下。

设置Code Style为PSR2设置Code Style为PSR2

注: 每行的字符数应该软性保持在80个之内, 理论上一定不可多于120个

EditorConfig

在团队开发中,统一的代码格式非常重要。可能团队对于后端代码格式有专门的规定,对于前端代码格式也有专门规定

但是由于开发习惯的不同,后端 PHP 可能使用的是 PHPStorm,前端开发可能使用的是 Visual Studio Code,这样还是没有避免问题出现

而今天介绍的 EditorConfig 可以帮助开发人员在不同的编辑器和 IDE 中定义和维护一致的编码风格

介绍

EditorConfig 不是什么软件,而是一个名称为 .editorconfig 的自定义文件

该文件用来定义项目的编码规范,编辑器的行为会与此文件中定义的一致,并且其优先级比编辑器自身的设置要高,这在多人合作开发项目时十分有用

有些编辑器默认支持 EditorConfig,如 JetBrains 系列;而有些编辑器则需要安装插件,如 ATOM、Sublime、VS Code 等

在项目中时,EditorConfig 会在当前文件的目录和其每一级父目录查找 .editorconfig 文件,直到有一个配置文件写了 root=true

文件是从上往下读取,并且最近的配置文件会被最先读取。如果文件没有进行某些配置,则使用编辑器默认的设置。

语法

属性 说明
indent_style 设置缩进风格(tab是硬缩进,space为软缩进)
indent_size 用一个整数定义的列数来设置缩进的宽度,如果indent_style为tab,则此属性默认为tab_width
tab_width 用一个整数来设置tab缩进的列数。默认是indent_size
end_of_line 设置换行符,值为lf、cr和crlf
charset 设置编码,值为latin1、utf-8、utf-8-bom、utf-16be和utf-16le
trim_trailing_whitespace 设为true表示会去除换行行首的任意空白字符
insert_final_newline 设为true表示使文件以一个空白行结尾
root 表示是最顶层的配置文件,发现设为true时,才会停止查找.editorconfig文件

以我的为例,文件的字符集是 UTF-8:

.editorconfig
root = true [*] charset = utf-8 indent_style = space indent_size = 4 end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true

CodeSniffer

PHP_CodeSniffer 是一个开源工具,能够检测出不符合规范的代码并发出警告或报错(可设置报错等级)

  • Q:通过这个工具我们能达到什么效果?
  • A:类似于原生代码错误的提示(IDE标红),鼠标移到上面时会显示错误的内容。

PHP_CodeSniffer 使用

首先使用 Composer 全局安装:

composer global require "squizlabs/php_codesniffer=*"

安装好后会在 Composer 目录的 /vendor/bin 下生成可执行文件,例如 phpcs.bat

  • 步骤1:打开 PHPStorm 进入设置页
  • 步骤2:接着点击 Languages & Frameworks -> PHP -> Code Sniffer,点击 Configuration 右侧的按钮,
  • 步骤3:选择 PHP Code Sniffer (phpcs) path: 的路径,就是刚才生成的那个 phpcs.bat 的路径。
  • 步骤4:选择之后 点击Validate提示验证成功
  • 步骤5:点击Editor->Inspections(或者点右下角的小医生图标,再点 Configure inspections)展开后点击右侧的PHP
  • 步骤6:勾选PHP Code Sniffer Validation,选择右侧的PSR2(没有时点击刷新按钮)
  • 步骤7:点击验证成功

步骤1、2、3、4

注: 如果PHP文件过大过长,会出现超时的错误,需要修改 timeout 值,MAX 30(s)。提示数量也一样,最大 100。

步骤5、6、7

注: IDE版本不同菜单会有所不同,直接搜索菜单名即可。

成功后代码里会出现对应的提示,默认是下图所示的下划线型的 Warning 警告

phpcs格式警告

为了和 IDE 已有的 Warning 区分开,可以设置定制的 Severity,例如为提示增加一个背景色,或者是在右侧提示的颜色

未完待续

以上列举的措施,实施起来决定权在每个开发手里,不能百分百保证风格
必须要在代码的终端实现检查,最后加入持续集成或发布流程中