PhpStorm 配置 格式化程式碼工具 PHP-cs-fixer

1014359760發表於2020-04-02

PhpStorm 配置 php-cs-fixer
良好的程式碼規範可以提高程式碼可讀性,團隊溝通維護成本。最推薦大家遵守的是 php-fig(PHP Framework Interop Group) 組織定義的 PSR-1 、 PSR-2 兩個。不瞭解的同學可以先通過連線點選過去閱讀下。
這篇文章主要介紹下 php-cs-fixer 格式化程式碼工具,讓你的程式碼符合規範。
php-cs-fixer (PHP Coding Standards Fixer) 目前已經有發展到 v2 版本,所以我們使用最新的版本,
官方現在有兩個版本 v1 和 v2 ,其中 v1 需要 php 5.3.6 版本以上, v2 需要 php 5.6 版本以上。
安裝
安裝方式有很多種,可以直接下載.phar 檔案,也可以通過 composer 的方式進行全域性安裝。更多安裝方法可以參考
FriendsOfPHP/PHP-CS-Fixer
安裝方式
這裡我使用的是 Windos7 環境,所以我使用的是 Locally 模式,也就是直接下載了.phar 檔案

將下載的 php-cs-fixer-v2.phar 檔案重新命名為 php-cs-fixer.phar 然後我放到了 E:\DevTools\php-cs-fixer.phar。你可以放到你的任意目錄,但請記住這個地址,後面配置 phpstorm 的時候會用到。
配置
開啟 phpstorm 設定項,依次 Tools→External Tools, 點選加號 (+)

Program: 填寫你的 PHP 可執行檔案路徑
Arguments: 填寫剛剛上面讓你記住的 php-cs-fixer.phar 的路徑地址,我的配置如下
E:\DevTools\php-cs-fixer.phar

fix

--rules=@PSR1,@PSR2

–verbose

$FileDir$$FileName$

Working directory: $ProjectFileDir$
最後你要進行格式化操作,只要設定下快捷鍵就可以了。具體設定如下,你可以設定你想設定的快捷鍵。

儘管上面這樣以後,不出意外就可以按 Ctrl+Alt+Shift+L 使用了。但是如果我們想在格式化之前看看哪些程式碼不規範要如何操作呢?
從上面的截圖也可以看到,我多配置了一個 php-cs-fixer-diff 的快捷鍵,這個快捷鍵就是執行後可以看到哪些程式碼將被轉換。配置和上面的類似,只是在 Arguments 這個不同。如下
E:\DevTools\php-cs-fixer.phar

fix

--rules=@PSR1,@PSR2

–verbose

–dry-run

–diff

–using-cache=no

$FileDir$$FileName$

可以看出基本上相同,主要就是增加了 —dry-run 和 —diff 引數,至於 —using-cache 可加可不加。最後依然配置一個快捷鍵 (alt+f)。執行效果如下

可以看到,將要被轉換的程式碼都已經標識出來了,類似於 git diff 後的效果。
配置檔案方式配置 rules
上面我們把格式化規則已經寫在了命令列後面,這樣其實已經可以達到我們的預期了。但是 php-cs-fixer 還支援將規則等配置寫入一個配置檔案,預設為.php_cs。你可以使用 —config 來指定你的配置檔案。
總的來說,使用配置檔案的方式最大的一個好處是可以團隊成員共用。如果你的團隊制定了程式碼規範,那麼把配置檔案提交到版本控制大家可以共用一套程式碼規範,而不需要每個人都要配置一遍。但是最基本的 php-cs-fixer 的安裝和 ide 整合工作還是要做的。
首先我們刪除 ide 裡配置的規則。將 Arguments 配置中的 —rules 選項刪除,最終的結果類似如下
E:\DevTools\php-cs-fixer.phar

fix
–allow-risky=yes

–verbose

$FileDir$$FileName$

然後我們在當前專案下新建一個.php_cs 檔案,這個檔案其實是一段 PHP 程式碼。
<?php

/**

  • Created by PhpStorm.

  • User:

  • Date:

  • Time:

  • /

$finder = PhpCsFixer\Finder::create()

->files()

->name('*.php')

->exclude('vendor')

->in(__DIR__)

->ignoreDotFiles(true)

->ignoreVCS(true);

$fixers = array(

'@PSR2'                                      => true,

'single_quote'                               => true, //簡單字串應該使用單引號代替雙引號;

'no_unused_imports'                          => true, //刪除沒用到的use

'no_singleline_whitespace_before_semicolons' => true, //禁止只有單行空格和分號的寫法;

'self_accessor'                              => true, //在當前類中使用 self 代替類名;

'no_empty_statement'                         => true, //多餘的分號

'no_extra_consecutive_blank_lines'           => true, //多餘空白行

'no_blank_lines_after_class_opening'         => true, //類開始標籤後不應該有空白行;

'include'                                    => true, //include 和檔案路徑之間需要有一個空格,檔案路徑不需要用括號括起來;

'no_trailing_comma_in_list_call'             => true, //刪除 list 語句中多餘的逗號;

'no_leading_namespace_whitespace'            => true, //名稱空間前面不應該有空格;

'standardize_not_equals'                     => true, //使用 <> 代替 !=;

'binary_operator_spaces'                     => ['default' => 'align_single_space'] //等號對齊、數字箭頭符號對齊

);

return PhpCsFixer\Config::create()

->setRules($fixers)

->setFinder($finder)

->setUsingCache(false);

最後就可以執行你上面設定的快捷鍵來格式化程式碼了。
最終配置

配置選項中文說明
php-cs-fixer (PHP Coding Standards Fixer) | Scholer’s Blog

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章