iodigital-com / php-code-sniffer-standard
iO PHP_CodeSniffer Standard
v29.2.0
2024-03-22 10:05 UTC
Requires
- php: ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0
- dealerdirect/phpcodesniffer-composer-installer: ^0.7 || ^1.0
- phpcompatibility/php-compatibility: ^9.3
- slevomat/coding-standard: ^8.15
- squizlabs/php_codesniffer: ^3.6.0
Requires (Dev)
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.0
- phpstan/phpstan-strict-rules: ^1.0
- phpunit/phpunit: ^9.5
Conflicts
- isaac/php-code-sniffer: *
Replaces
- dev-develop
- dev-main
- v29.2.0
- v29.1.0
- 29.0.1
- 29.0.0
- dev-task/remove-php-7.4-support
- dev-fix/add-php-8.2-service-to-lando-configuration
- dev-fix/remove-version-property-from-composer.json
- dev-fix/increase-slevomat/coding-standard-dependency-to-v7.1
- dev-task/add-support-for-dealerdirect/phpcodesniffer-composer-installer-v1
- dev-task/add-php-8.3-support
- dev-feature/test-mirror
This package is auto-updated.
Last update: 2024-09-19 14:57:12 UTC
README
通过 iO 规则扩展默认的 PHP_CodeSniffer
注意: 向此包添加新的 phpcs-rules 必须导致主版本更新!
安装
需要该包
composer require --dev iodigital-com/php-code-sniffer-standard
设置
在项目的根目录中创建一个 phpcs.xml
文件,并包含默认的 iO 规则集
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
<arg name="cache"/>
<!-- include root folder of project , change to your framework requirements -->
<file>.</file>
<!-- exclude paths -->
<exclude-pattern>./src/Migrations</exclude-pattern>
<exclude-pattern>./vendor</exclude-pattern>
<exclude-pattern>./local-repo</exclude-pattern>
<!-- include all rules in iO ruleset -->
<rule ref="IO"/>
<rule ref="YourFramework"/> <!-- include your framework standards -->
</ruleset>
修改排除路径和/或为您的项目包含自定义规则集。
PHPCompatibility
要充分利用 PHPCompatibility 标准化,您应指定一个测试版本以进行检查。这将启用对已弃用/删除的 PHP 功能以及检测使用新 PHP 功能的代码的检查。通过在您的 phpcs.xml
中添加配置规则来包含测试版本。示例
<config name="testVersion" value="7.0"/> <!-- check for compatability with php 7.0 -->
<config name="testVersion" value="7.1-"/> <!-- check for 7.1 and higher -->
<config name="testVersion" value="7.0-7.2"/> <!-- check within range 7.0 to 7.2 -->
更多信息请见: https://github.com/PHPCompatibility/PHPCompatibility#using-a-custom-ruleset
用法
由于您现在已在项目的根目录中有一个 phpcs.xml
文件,您可以使用默认的 phpcs 命令:vendor/bin/phpcs
。为了节省时间,请使用 GrumPHP 或 Githooks 来触发嗅探。
忽略嗅探违规
有时无法解决嗅探违规。在这种情况下,应使用 phpcs:ignore
以及 phpcs:disable
/ phpcs:enable
注释来忽略违规。
为了这样做,请采取以下方法
- 仅忽略导致违规的 部分 文件,而不是整个文件。如果确实应该忽略整个文件,则可以使用
phpcs:ignoreFile
注释或更好的是,向项目的ruleset.xml
添加<exclude-pattern>
。 - 优先使用
phpcs:ignore
而不是phpcs:disable
和phpcs:enable
,即在可能的情况下使用phpcs:ignore
,并且当phpcs:ignore
的放置不会引入其他嗅探违规时,使用phpcs:disable
和phpcs:enable
。理由:使用phpcs:disable
和phpcs:enable
可能会在添加新代码或移动现有代码时禁用比最初打算的更多代码,例如在重构代码时。 - 始终指明将要忽略的确切嗅探规则或嗅探规则,使用完整的嗅探规则名称,而不是仅使用嗅探规则组。例如,使用
phpcs:ignore Squiz.WhiteSpace.FunctionSpacing.BeforeFirst, Squiz.WhiteSpace.FunctionSpacing.AfterLast
而不是phpcs:ignore Squiz.WhiteSpace.FunctionSpacing
或没有参数的phpcs:ignore
。 - 优先将
phpcs:ignore
注释放置在单独的一行上,在违规之前,而不是在违规所在行上。理由:当忽略多个嗅探规则时,phpcs:ignore
注释可能会迅速超过行长度限制;当phpcs:ignore
注释放在违规之前的单独行上时,这不会进行检查,但当phpcs:ignore
注释放在违规所在行上时,则会进行检查。 - 使用
--
后跟简短的解释来添加忽略嗅探规则的原因。
示例
try { $this->logger->log(LogLevel::INFO, new DateTimeImmutable()); //phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch -- DateTimeImmutable creation cannot fail in this case } catch (Exception $exception) { }
贡献
如果您想要贡献代码,请为每个合并请求创建一个带有 每个请求一个嗅探器 的合并请求。请在描述中提供一个关于嗅探器的例子,包括一段好代码和一段坏代码。