PHP 系列:代碼規範之 Code Sniffer

php code sniffer

有些同窗可能還沒聽過這東西,大概介紹一下:php

PHP_CodeSniffer 是一個代碼風格檢測工具。它包含兩類腳本,phpcsphpcbfGitHub地址)。git

phpcs 腳本對 PHPJavaScriptCSS 文件定義了一系列的代碼規範(一般使用官方的代碼規範標準,好比 PHPPSR2),可以檢測出不符合代碼規範的代碼併發出警告或報錯(可設置報錯等級)。github

phpcbf 腳本能自動修正代碼格式上不符合規範的部分。好比 PSR2 規範中對每個 PHP 文件的結尾都須要有一行空行,那麼運行這個腳本後就能自動在結尾處加上一行空行。json

安裝

推薦使用 composer 來安裝:bash

composer global require "squizlabs/php_codesniffer=*"

安裝完後就會在全局的 Vendor 目錄下的 bin 中生成兩個軟連接:併發

phpcbf -> ../squizlabs/php_codesniffer/bin/phpcbf
phpcs -> ../squizlabs/php_codesniffer/bin/phpcs

若是你不知道全局 Vendor 目錄在哪,用下這個命令吧:composer

composer global config bin-dir --absolute

命令行使用

到這一步,其實你就能夠愉快的使用這兩個命令了:工具

哦,不過若是要全局使用這兩個命令那仍是作個軟連接放在 /usr/local/bin 下吧~ui

$ phpcs test.php

FILE: /Users/stephen/Develop/Code/test.php
--------------------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
--------------------------------------------------------------------------------------------
 2 | ERROR | [ ] Missing file doc comment
 3 | ERROR | [x] TRUE, FALSE and NULL must be lowercase; expected "false" but found "FALSE"
--------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------------------

Time: 45ms; Memory: 4Mb

$ phpcbf test.php

PHPCBF RESULT SUMMARY
----------------------------------------------------------------------
FILE                                                  FIXED  REMAINING
----------------------------------------------------------------------
/Users/stephen/Develop/Code/test.php                  1      1
----------------------------------------------------------------------
A TOTAL OF 1 ERROR WERE FIXED IN 1 FILE
----------------------------------------------------------------------

Time: 49ms; Memory: 4Mb

Sublime Text 中集成

安裝插件

前提 Package Control 要安裝好,這個你確定沒問題的(莫名的自信,逃)spa

安裝 phpcs 這個插件,而後打開這個插件的 Settings - UserSettings - Default,將後者的內容所有複製到前者。

配置插件

將如下這幾個配置項配置一下:

當前環境中 php 的執行路徑

"phpcs_php_prefix_path": "/usr/bin/php",

當前環境中 phpcs 的執行路徑

"phpcs_executable_path": "~/.composer/vendor/bin/phpcs",

執行腳本時額外添加的參數,通常以 PSR2 代碼規範做爲標準,你也能夠選擇 PSR1PEAR

"phpcs_additional_args": {
    "--standard": "PSR2",
    "-n": ""
},

當前環境中 phpcbf 的執行路徑

"phpcbf_executable_path": "/Users/stephen/.composer/vendor/bin/phpcbf",

開啓保存就執行 cbf 腳本功能

"phpcbf_on_save": true,

如今就能夠愉快的玩耍了,編輯完 .php 後綴的文件保存後就會自動回覆修正代碼不規範的地方。

這個插件還有其餘代碼規範能夠設置的地方,好比 PHP Mess Detector settingsPHP Linter settingsPHP Scheck settings

下次在研究其餘幾個,目前是夠我用了,逃)

PhpStrom 中集成

配置 Code Sniffer

在 Settings -> Languages & Frameworks -> PHP -> Code Sniffer 中對 phpcs 進行配置

點擊 Configuration: Local 旁邊的 ...,將當前環境的 phpcs 執行腳本所在路徑配置進去,旁邊有一個 Validate 按鈕能夠進行驗證,其餘兩個參數默認就好,這裏也稍微說一下吧。

Maxumum number of messages per file[1...100]:每一個文件最多顯示不符合代碼規範的條數,通常出現50個了那你有不少工做能夠作了,其實10個就夠了,尤爲對我這種代碼潔癖和強迫症晚期的人來講一個足矣 。。。

Tool process timeout, sec[1...30]:腳本執行的超時時間

開啓驗證

在 Settings -> Editor -> Inspections 中進行開啓

找到 PHP -> PHP Code Sniffer validation 選項,對其打鉤,在右側進行詳細配置

我是將 Options -> Show warnings as: Error 開啓了,固然你也能夠選擇 Warnning,提示級別高一點可以強迫本身,沒啥很差的吧~

Coding standard 依舊是選擇 PSR2,若是找不到這個選項,記得點一下緊挨着的刷新按鈕。

自動修復

我找了半天沒發現 PhpStrom 有支持 phpcbf 的可用選項,因此只能經過 External Tools 來實現了。

在 Settings -> Tools -> External Tools 中進行添加,下面是個人一個示例,基本能夠照搬 :)

Parameter Value
Name phpcbf
Description Automatically correct coding standard violations.
Program phpcbf
Parameters --standard=PSR2 "$FileDir$/$FileName$"

如今就能夠在菜單欄上的 Tools -> External Tools 中找到它並愉快的使用了。

亮哥,這樣很不方便誒。。。

那就加一個快捷鍵把。。。

在 Settings -> Keymap -> External Tools -> phpcbf 中進行添加快捷鍵操做,我設置的是 Option + F,或者 Windows 上的 Alt + F

蜜汁延伸

以前沒用 phpcbf,代碼自動修復使用的是 php-cs-fixer,但後來發現二者功能差很少,因此秉着能少一個包就少一個包的原則,放棄了 php-cs-fixer

有興趣的自行拓展瞭解~

相關文章
相關標籤/搜索