在我們日常開發中,一定少不了 PHP CS Fixer 來幫我們統一程式碼風格,但是PHP CS Fixer 不像 ESLint 一樣,可以在 PHPStorm 中在儲存時自動執行。
PHPStorm 並沒有為我們提供可執行 PHP CS Fixer 的選項,「重新格式化程式碼」大部分時都不能滿足我們的需求。
為此我們需要在 PHPStorm 中新增一個 「File Watcher」來自動執行程式碼格式化。
- 首先全域性安裝 PHP CS Fixer
composer global require friendsofphp/php-cs-fixer
- 執行
php-cs-fixer
代表安裝成功了,如果提示命令未找到,那麼你需要將全域性 composer vendor 目錄新增到全域性變數,我用的是 zsh,這裡改成你自己的。
echo 'export PATH="$HOME/.composer/vendor/bin:$PATH"' >> ~/.zshrc
- 開啟 PHPStorm,新增自定義檔案
程式檔案地址,命令列輸入,並填入which php-cs-fixer
引數欄:fix $FileDir$/$FileName$
到這就搞定了,現在每當我們儲存時就會自動執行 php-cs-fixer,現在還有一個問題,是可能每個專案有不同的 .php-cs.dist
格式化配置檔案,以上的配置是使用了全域性 php-cs-fixer 配置檔案,如果要使用單獨的配置檔案,需要修改配置如下:
fix --config=$ProjectFileDir$/.php-cs.dist $FileDir$/$FileName$
.php-cs.dist
通常放在專案根目錄。
最後附上 .php-cs.dist
配置檔案
<?php
$header = <<<'EOF'
EOF;
$finder = PhpCsFixer\Finder::create()
->exclude('tests/Fixtures') //排除檔案
->in(__DIR__);
return PhpCsFixer\Config::create()
->setRiskyAllowed(true)
->setRules([
'@PSR2' => true,
'@Symfony:risky' => true,
'array_syntax' => ['syntax' => 'short'],
'combine_consecutive_unsets' => true, //多個unset,合併成一個
// one should use PHPUnit methods to set up expected exception instead of annotations
'general_phpdoc_annotation_remove' => ['expectedException', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp'], //phpdocs中應該省略已經配置的註釋
//'header_comment' => array('header' => $header), //新增,替換或者刪除 header 註釋。
'heredoc_to_nowdoc' => true, //刪除配置中多餘的空行和/或者空行。
'no_extra_consecutive_blank_lines' => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block'],
'no_unreachable_default_argument_value' => false, //在函式引數中,不能有預設值在非預設值之前的引數。有風險
'no_useless_else' => true, //刪除無用的eles
'no_useless_return' => true, //刪除函式末尾無用的return
'no_empty_phpdoc' => true, // 刪除空註釋
'no_empty_statement' => true, //刪除多餘的分號
'no_leading_namespace_whitespace' => true, //刪除namespace宣告行包含前導空格
'no_spaces_inside_parenthesis' => true, //刪除括號後內兩端的空格
'no_trailing_whitespace' => true, //刪除非空白行末尾的空白
'no_unused_imports' => true, //刪除未使用的use語句
'no_whitespace_before_comma_in_array' => true, //刪除陣列宣告中,每個逗號前的空格
'no_whitespace_in_blank_line' => true, //刪除空白行末尾的空白
'ordered_class_elements' => false, //class elements排序
'ordered_imports' => false, // use 排序
'phpdoc_add_missing_param_annotation' => true, //新增缺少的 Phpdoc @param引數
'phpdoc_trim' => true,
// 'phpdoc_trim_consecutive_blank_line_separation' => true, //刪除在摘要之後和PHPDoc中的描述之後,多餘的空行。
'phpdoc_order' => true,
'psr4' => true,
// 'strict_comparison' => true, //嚴格比較,會修改程式碼有風險
//'strict_param' => true,
'ternary_operator_spaces' => true, //標準化三元運算的格式
'ternary_to_null_coalescing' => true, //儘可能使用null合併運算子??。需要PHP> = 7.0。
'whitespace_after_comma_in_array' => true, // 在陣列宣告中,每個逗號後必須有一個空格
'trim_array_spaces' => true, //刪除陣列首或尾隨單行空格
'align_multiline_comment' => [ //每行多行 DocComments 必須有一個星號(PSR-5),並且必須與第一行對齊。
'comment_type' => 'phpdocs_only'
],
'array_indentation' => true, //陣列的每個元素必須縮排一次
])
->setFinder($finder);
本作品採用《CC 協議》,轉載必須註明作者和本文連結