PHP_CodeSniffer和PHP-CS-Fixer的比较
提到用于检查PHP代码风格的工具(Linters),有两个比较著名的选项是PHP_CodeSniffer和PHP-CS-Fixer。
只有一个选项的情况下,以下是对原文的汉语释义:
由于有两种类型,所以当要引入工具时,往往会疑惑该选择哪个工具才好。事实上,我自己也遇到了这个问题。
因此,我在介绍对我负责的产品进行代码规范检查工具(Linter)引入的过程中,进行了对比PHP_CodeSniffer和PHP-CS-Fixer。
用法
可以使用Composer在命令行中安装并运行任何一个选项。
在特点方面,PHP_CodeSniffer被分为检查和自动修正两个独立的命令,分别是phpcs和phpcbf。而PHP-CS-Fixer则通过php-cs-fixer fix命令进行自动修正,当加上–dry-run选项时则只进行检查,这是它们之间的区别。从名字中可以看出,PHP-CS-Fixer的核心是修复代码,而检查功能则被视为它的干预运行。
安装
# PHP_CodeSniffer
composer require --dev squizlabs/php_codesniffer
# PHP-CS-Fixer
composer require --dev friendsofphp/php-cs-fixer
请核对
# PHP_CodeSniffer
vendor/bin/phpcs target_file.php
# PHP-CS-Fixer
vendor/bin/php-cs-fixer fix --dry-run target_file.php
自动纠正
# PHP_CodeSniffer
vendor/bin/phpcbf target_file.php
# PHP-CS-Fixer
vendor/bin/php-cs-fixer fix target_file.php
设定文件
这些都可以在设置文件中进行详细的编码规则指定,但格式是不同的。
-
- PHP_CodeSniffer: XMLファイル
- PHP-CS-Fixer: PHPファイル
这个问题更多是个人喜好的问题,而不是哪个更出色。
就个人而言,我觉得PHP文件看起来更加熟悉且好用。
流行程度
在开源软件的情况下,通常使用者越多,软件越精练且bug较少。因此,受欢迎程度也变得更为重要。
我认为衡量受欢迎程度的方法有很多,但这次我选择了以下两个标准。以下是我在2022年12月25日确认的数值。
-
- 直近30日間のPackagistでのダウンロード数
- GitHubリポジトリのスター数
在下载量上,PHP_CodeSniffer排名第一;在星标数上,PHP-CS-Fixer排名第一。可以说,这两个工具都非常受欢迎。
发布频率
认为发布频率越高,越能迅速进行错误修复和适应PHP新语法。2022年的发布次数如下:
-
- PHP_CodeSniffer
2回
PHP-CS-Fixer
15回
这一点上,PHP-CS-Fixer明显胜过了PHP_CodeSniffer。虽然PHP_CodeSniffer的开发没有停止,但如果想要大量使用最新的PHP语法,可能PHP-CS-Fixer更好一些。
设计理念
刚才已经提到过,PHP-CS-Fixer的原则是自动修复代码。
因此,它没有提供检测无法自动修复的问题的编码规则。
例如,检查每行字符数长度的规则在PHP_CodeSniffer中存在,但在PHP-CS-Fixer中不存在。
基於我們團隊希望能夠檢測到無法自動修正的問題,我們最終選擇了使用PHP_CodeSniffer。希望這對於其他團隊和產品的Lint選擇能夠提供參考!