之前初探 PHP Coding Standards Fixer (php-cs-fixer) 時,略知預設跑下去已經有一定水準的 Coding Style 制約機制,然而,工作上引導同事在使用時,碰到了一些雷區。
首先是用 CodeIgniter 4 官方文件建立出的資料後,要跑 PHP Coding Standards Fixer 時會出現要修正語法的問題
```// https://www.codeigniter.com/user_guide/installation/installing_composer.html% composer create-project codeigniter4/appstarter project-root% ./vendor/bin/php-cs-fixer fix --dry-run -v .PHP CS Fixer 3.9.5 Grand Awaiting by Fabien Potencier and Dariusz Ruminski.PHP runtime: 7.4.30Loaded config CodeIgniter4 Coding Standards from "/path/./.php-cs-fixer.dist.php".Using cache file ".php-cs-fixer.cache".Paths from configuration file have been overridden by paths provided as command arguments......F......................................F............. 58 / 58 (100%)Legend: ?-unknown, I-invalid file syntax (file ignored), S-skipped (cached or empty file), .-no changes, F-fixed, E-error1) app/Config/Logger.php (ordered_imports)2) app/Views/errors/html/error_exception.php (braces, unary_operator_spaces, not_operator_with_successor_space)Checked all files in 1.104 seconds, 16.000 MB memory used```
然後故意降版本到 v3.8.0 又可以正常
```% mv composer.json composer.json-bak% composer require friendsofphp/php-cs-fixer:3.8.0 --dev% ./vendor/bin/php-cs-fixer fix --dry-run -v .PHP CS Fixer 3.8.0 BerSzcz against war! by Fabien Potencier and Dariusz Ruminski.PHP runtime: 7.4.30Loaded config default.Using cache file ".php-cs-fixer.cache"........................................................... 58 / 58 (100%)Legend: ?-unknown, I-invalid file syntax (file ignored), S-skipped (cached or empty file), .-no changes, F-fixed, E-errorChecked all files in 0.303 seconds, 14.000 MB memory used```
為了避免未來同事不同平台開發的困局,就來安分地寫一下 .php-cs-fixer.dist.php 檔案吧!也順道研究到 CodeIgniter 也有個 CodeIgniter/coding-standard 規範,接著參考 github.com/CodeIgniter/coding-standard#setup 一步一步測試
```% cat .php-cs-fixer.dist.php<?phpuse CodeIgniter\CodingStandard\CodeIgniter4;use Nexus\CsConfig\Factory;return Factory::create(new CodeIgniter4())->forProjects();% ./vendor/bin/php-cs-fixer fix --dry-run -v .PHP CS Fixer 3.9.5 Grand Awaiting by Fabien Potencier and Dariusz Ruminski.PHP runtime: 7.4.30Loaded config CodeIgniter4 Coding Standards from "/path/./.php-cs-fixer.dist.php".Using cache file ".php-cs-fixer.cache".Paths from configuration file have been overridden by paths provided as command arguments......F......................................F............. 58 / 58 (100%)Legend: ?-unknown, I-invalid file syntax (file ignored), S-skipped (cached or empty file), .-no changes, F-fixed, E-error1) app/Config/Logger.php (ordered_imports)2) app/Views/errors/html/error_exception.php (braces, unary_operator_spaces, not_operator_with_successor_space)Checked all files in 1.104 seconds, 16.000 MB memory used```
開始先找一下怎樣略過那兩個檔案的用法:
```% cat .php-cs-fixer.dist.php<?phpuse CodeIgniter\CodingStandard\CodeIgniter4;use Nexus\CsConfig\Factory;use PhpCsFixer\Finder;// https://github.com/codeigniter4/CodeIgniter4/blob/develop/.php-cs-fixer.dist.php$finder = Finder::create()->files()->notPath(['app/Config/Logger.php','app/Views/errors/html/error_exception.php',]);// https://github.com/NexusPHP/cs-config/blob/develop/src/Factory.php//return Factory::create(new CodeIgniter4())->forProjects();return Factory::create(new CodeIgniter4(), [], ['finder' => $finder,])->forProjects();% ./vendor/bin/php-cs-fixer fix --dry-run .Loaded config CodeIgniter4 Coding Standards from "/path/./.php-cs-fixer.dist.php".Using cache file ".php-cs-fixer.cache".Checked all files in 0.032 seconds, 14.000 MB memory used```
接著去 Windows 跑:
```C:\path>.\vendor\bin\php-cs-fixer fix --dry-run .PHP CS Fixer 3.9.1 Grand Awaiting by Fabien Potencier and Dariusz Ruminski.PHP runtime: 7.4.30Loaded config CodeIgniter4 Coding Standards from "C:\path\.\.php-cs-fixer.dist.php".Using cache file ".php-cs-fixer.cache".FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 56 / 56 (100%)Legend: ?-unknown, I-invalid file syntax (file ignored), S-skipped (cached or empty file), .-no changes, F-fixed, E-error1) app\Common.php (line_ending)...55) tests\_support\Libraries\ConfigReader.php (line_ending)56) tests\_support\Models\ExampleModel.php (line_ending)Checked all files in 1.187 seconds, 16.000 MB memory used```
最後再加個 line_ending 來處理一下:
```% cat .php-cs-fixer.dist.php<?phpuse CodeIgniter\CodingStandard\CodeIgniter4;use Nexus\CsConfig\Factory;use PhpCsFixer\Finder;// https://github.com/codeigniter4/CodeIgniter4/blob/develop/.php-cs-fixer.dist.php$finder = Finder::create()->files()->notPath(['app/Config/Logger.php','app/Views/errors/html/error_exception.php',]);// https://github.com/NexusPHP/cs-config/blob/develop/src/Factory.php//return Factory::create(new CodeIgniter4())->forProjects();return Factory::create(new CodeIgniter4(), [], ['finder' => $finder,// https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues/3955'lineEnding' => PHP_EOL,])->forProjects();```
收工!
沒有留言:
張貼留言