玩转 PhpStorm 系列(十一):使用 PHP CS Fixer 统一团队编码风格


我们知道 Laravel 遵循 PSR-2 编码风格和 PSR-4 自动载入标准。

在 PhpStorm 中,我们可以通过配置实现根命名空间与指定目录的映射,进而在创建 PHP 类时通过 PSR-4 自动载入标准根据类所在的目录路径生成对应的命名空间;还可以通过外部 PHP Code Sniffer 工具对代码进行自动修复从而使其遵循 PSR-2 编码风格,提升工作效率。

下面我们以一个 Laravel 项目为例进行演示。

PSR-4

在 Laravel 项目中,默认 \App 命名空间对应的是根目录下的 app 子目录,这可以通过 composer.json 进行配置:

"autoload": {
    "psr-4": {
        "App\\": "app/"
    },
    "classmap": [
        "database/seeds",
        "database/factories"
    ]
},

在 PhpStorm 中,还可以通过 Preferences | Directories 进行配置(Windows 下 Preferences 对应的是 Settings):

-w1112

选中要设置命令空间的 app 目录,可以看到当前它与 \App 根命名空间映射,你可以点击右侧小红框内的铅笔按钮进行编辑,在包前缀输入框中将其调整为你自己的应用名称:

-w517

点击「OK」按钮保存,接下来,应用该更改,再到 app 目录下新建类,可以看到根命名空间已经变成了 Xueyuanjun,而不再是 App

-w836

通过这种方式,我们可以很方便地在 PhpStorm 中修改命名空间并且基于 PSR-4 自动载入标准新建 PHP 类。

PSR-2

代码嗅探工具

与 PSR-4 不同,PSR-2 是 PHP-FIG 组织为 PHP 制定的编码风格标准,它涉及的范围远大于类的自动载入,包含 PHP 编码风格的边边角角,如果要让自己的 PHP 项目遵循 PSR-2 标准,可以通过 PHP Code SnifferPHP-CS-Fixer 之类的第三方扩展对 PHP 项目代码进行自动检测,我们可以将这些代码风格检测逻辑放到提交代码到代码仓库的钩子函数中,如果不符合指定编码风格(不限于 PSR-2,还可以是 PSR-1 或者公司自定义的编码风格等),则拒绝提交代码,这样,就可以保证代码仓库中维护的代码都是符合特定编码风格的。

在 PhpStorm 中,可以通过集成外部安装的这些代码嗅探工具非常方便的对代码进行自动检测和修复,从而让最终交付的代码都是符合特定编码风格的。

这里我们以 php-cs-fixer 作为代码嗅探工具(使用它的好处是不仅能够嗅探到「坏代码」还可以自动对其进行修复),将编码风格设置为遵循 PSR-2 标准。

你可以通过 which 命令检测系统是否已经安装过该工具以及对应的安装路径:

-w655

注:如果没有安装的话,使用 Composer 全局安装即可。

在 PhpStorm 中配置 php-cs-fixer

接下来,在 PhpStorm 的 Preferences | Languages & Frameworks | PHP | Quality Tools 配置界面中,目前还没有配置任何 PHP CS Fixer 路径:

-w1001

点击配置下拉框右侧的「...」按钮,在弹出的窗口输入框输入上面运行 which php-cs-fixer 命令返回的路径,点击「Validate」按钮进行验证:

-w953

下面会出现包含 OK 和 PHP CS Fixer 版本的提示文本,表示该路径有效,点击「Apply」按钮应用更改,点击「OK」关闭该窗口。

接下来,在 PHP | Quality Tools 界面点击「PHP CS Fixer inspection」:

-w660

在弹出界面勾选「PHP CS Fixer validation」:

-w1112

可以看到这里默认使用的是 PSR-2 编码规则(你还可以通过下拉框选择使用其他编码风格)。点击「Apply」应用更改,点击「OK」关闭窗口。

通过 PHP CS Fixer 修正代码风格

接下来,我们就可以在 PhpStorm 中通过上面配置的 PHP CS Fixer 对代码进行嗅探和自动修正了。

单个文件

我们打开一个 PHP 文件,将类和方法后面的花括号调整为不换行:

-w1045

此时,可以看到代码下面出现波浪线,这意味着 PHP CS Fixer 嗅探到不符合系统设置编码风格的代码(这里是 PSR-2),将光标移动到出现问题的代码位置,停留片刻会出现提示框,提示类定义、方法定义的括号不符合指定编码风格:

-w789 你可以通过点击下面的蓝色小字「PHP CS Fixer:fix the whole file」自动修复这个文件(对应的快捷键是 Option + Shift + Enter)。

批量修正

当然,对于整个项目来说,如果一个个这样嗅探和修复是不现实的,我们可以在 PhpStorm 中通过配置外部工具来实现批量修正指定目录的代码风格。在 Preferences | Tools | External Tools 界面点击「+」新建一个外部工具:

在弹出窗口表单填写内容如下:

-w726

我们将这个外部工具命名为 PHP CS Fixer,然后在 Paragam 输入 php-cs-fixer,参数中输入修复指令,这里我们指定路径为当前目录,验证规则为 PSR-2。点击「OK」保存。

接下来,就可以在 PhpStorm 的 Project 区域选中某个目录,点击右键,在下拉菜单看到 External Tools->PHP CS Fixer 选项:

-w812

点击 PHP CS Fixer 就可以对选中目录进行进行代码嗅探和修复了,实际上指定的是我们前面配置的 php-cs-fixer fix 指令,执行结果会输入到 PhpStorm 下方 Run 区域:

-w985

如果有代码被修正,会列在控制台输出日志中。怎么样,是不是很方便?当然,你也可以直接在指定目录下执行对应 fix 指令,只不过,在 PhpStorm 中,我觉得通过这种配置外部工具的方式更加直观更加便捷,你还可以为这个 PHP CS Fixer 外部工具配置一个快捷键,这样就更加方便了。

下篇教程,学院君将给大家演示如何在 PhpStorm 中进行代码测试作为 PhpStorm 系列教程的收尾。


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: 玩转 PhpStorm 系列(十):基于 Xdebug 进行代码调试(下)—— PHP Web 应用

>> 下一篇: 玩转 PhpStorm 系列(十二):基于 PHPUnit 进行单元测试