PHP 系列:代碼規(guī)范之 Code Sniffer

php code sniffer

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

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

phpcs 腳本對 PHP、JavaScript、CSS 文件定義了一系列的代碼規(guī)范(通常使用官方的代碼規(guī)范標準,比如 PHPPSR2),能夠檢測出不符合代碼規(guī)范的代碼并發(fā)出警告或報錯(可設(shè)置報錯等級)。

phpcbf 腳本能自動修正代碼格式上不符合規(guī)范的部分。比如 PSR2 規(guī)范中對每一個 PHP 文件的結(jié)尾都需要有一行空行,那么運行這個腳本后就能自動在結(jié)尾處加上一行空行。

安裝

推薦使用 composer 來安裝:

composer global require "squizlabs/php_codesniffer=*"

安裝完后就會在全局的 Vendor 目錄下的 bin 中生成兩個軟鏈接:

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

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

composer global config bin-dir --absolute

命令行使用

到這一步,其實你就可以愉快的使用這兩個命令了:

哦,不過如果要全局使用這兩個命令那還是做個軟鏈接放在 /usr/local/bin 下吧~

$ 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 要安裝好,這個你肯定沒問題的(莫名的自信,逃)

安裝 phpcs 這個插件,然后打開這個插件的 Settings - UserSettings - Default,將后者的內(nèi)容全部復制到前者。

配置插件

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

當前環(huán)境中 php 的執(zhí)行路徑

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

當前環(huán)境中 phpcs 的執(zhí)行路徑

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

執(zhí)行腳本時額外添加的參數(shù),一般以 PSR2 代碼規(guī)范作為標準,你也可以選擇 PSR1PEAR

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

當前環(huán)境中 phpcbf 的執(zhí)行路徑

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

開啟保存就執(zhí)行 cbf 腳本功能

"phpcbf_on_save": true,

現(xiàn)在就可以愉快的玩耍了,編輯完 .php 后綴的文件保存后就會自動回復修正代碼不規(guī)范的地方。

這個插件還有其他代碼規(guī)范可以設(shè)置的地方,比如 PHP Mess Detector settings、PHP Linter settings、PHP Scheck settings

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

PhpStrom 中集成

配置 Code Sniffer

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

點擊 Configuration: Local 旁邊的 ...,將當前環(huán)境的 phpcs 執(zhí)行腳本所在路徑配置進去,旁邊有一個 Validate 按鈕可以進行驗證,其他兩個參數(shù)默認就好,這里也稍微說一下吧。

Maxumum number of messages per file[1...100]:每個文件最多顯示不符合代碼規(guī)范的條數(shù),一般出現(xiàn)50個了那你有很多工作可以做了,其實10個就夠了,尤其對我這種代碼潔癖和強迫癥晚期的人來說一個足矣 。。。

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

開啟驗證

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

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

我是將 Options -> Show warnings as: Error 開啟了,當然你也可以選擇 Warnning,提示級別高一點能夠強迫自己,沒啥不好的吧~

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

自動修復

我找了半天沒發(fā)現(xiàn) PhpStrom 有支持 phpcbf 的可用選項,所以只能通過 External Tools 來實現(xiàn)了。

在 Settings -> Tools -> External Tools 中進行添加,下面是我的一個示例,基本可以照搬 :)

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

現(xiàn)在就可以在菜單欄上的 Tools -> External Tools 中找到它并愉快的使用了。

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

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

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

蜜汁延伸

之前沒用 phpcbf,代碼自動修復使用的是 php-cs-fixer,但后來發(fā)現(xiàn)兩者功能差不多,所以秉著能少一個包就少一個包的原則,放棄了 php-cs-fixer。

有興趣的自行拓展了解~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內(nèi)容