首頁  >  文章  >  開發工具  >  圖文詳解PHPStorm實現自動執行程式碼格式化

圖文詳解PHPStorm實現自動執行程式碼格式化

藏色散人
藏色散人轉載
2022-12-29 17:36:433134瀏覽

在我們日常開發中,一定少不了 PHP CS Fixer 來幫我們統一程式碼風格,但是PHP CS Fixer 不像 ESLint 一樣,可以在 PHPStorm 中在儲存時自動執行。

圖文詳解PHPStorm實現自動執行程式碼格式化

PHPStorm 並沒有提供我們可執行 PHP CS Fixer 的選項,「重新格式化程式碼」大部分時都無法滿足我們的需求。


為此我們需要在 PHPStorm 中新增一個 “File Watcher”來自動執行程式碼格式化。

1.首先全域安裝PHP CS Fixer

composer global require friendsofphp/php-cs-fixer

2.執行

php-cs-fixer

圖文詳解PHPStorm實現自動執行程式碼格式化

代表安裝成功了,如果提示指令找不到,那你需要將全域composer vendor 目錄加入全域變量,我用的是zsh,這裡改成你自己的。

echo 'export PATH="$HOME/.composer/vendor/bin:$PATH"' >> ~/.zshrc

3.開啟PHPStorm,新增自訂檔案

圖文詳解PHPStorm實現自動執行程式碼格式化

#程式檔案位址,命令列輸入,並填入

which php-cs-fixer

圖文詳解PHPStorm實現自動執行程式碼格式化

#參數列:

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 = <<<&#39;EOF&#39;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);

推薦學習:《PHPstorm使用教學》          

以上是圖文詳解PHPStorm實現自動執行程式碼格式化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除