slevomat / coding-standard

Slevomat Coding Standard for PHP_CodeSniffer 通过提供额外的检查,补充了 Consistence Coding Standard。

支持包维护!
kukulich
Tidelift

安装次数: 76,098,286

依赖项: 1,489

建议: 4

安全性: 0

星标: 1,386

关注者: 27

分支: 171

开放问题: 101

类型:phpcodesniffer-standard

8.15.0 2024-03-09 15:20 UTC

README

Latest version Downloads Build status Code coverage PHPStan

Slevomat Coding Standard for PHP_CodeSniffer 提供了三个类别的 sniffs

  • 功能 - 提高代码的安全性和行为
  • 清洁 - 检测死代码
  • 格式化 - 规则以确保代码外观一致

目录

  1. Sniffs 的字母表列表
  2. 安装
  3. 如何运行 sniffs
  1. 自动修复错误
  2. 在本地抑制 sniffs
  3. 贡献

Sniffs 的字母表列表

🔧 = 自动错误修复

🚧 = 本地可抑制 sniff 检查

安装

推荐安装Slevomat编码标准的最佳方式是通过Composer

{
	"require-dev": {
		"slevomat/coding-standard": "~8.0"
	}
}

还推荐安装php-parallel-lint/php-parallel-lint,该工具用于检查源代码中的语法错误。Sniffs假定处理后的代码在语法上是有效的(没有解析错误),否则它们可能会出现意外的行为。建议在运行PHP_CodeSniffer之前运行PHP-Parallel-Lint,并在PHP-Parallel-Lint失败时提前退出构建过程。

如何运行 sniffs

您可以选择两种方式之一,仅从标准中选择部分Sniffs在您的代码库中运行

选择要运行的 sniffs

推荐的方式是通过仅引用所选的Sniffs来编写自己的ruleset.xml。这是一个示例ruleset.xml

<?xml version="1.0"?>
<ruleset name="AcmeProject">
	<config name="installed_paths" value="../../slevomat/coding-standard"/><!-- relative path from PHPCS source location -->
	<rule ref="SlevomatCodingStandard.Arrays.TrailingArrayComma"/>
	<!-- other sniffs to include -->
</ruleset>

然后以通常的方式运行phpcs可执行文件

vendor/bin/phpcs --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests

排除您不想运行的 sniffs

您还可以在项目的ruleset.xml中提及Slevomat编码标准,并仅排除一些Sniffs

<?xml version="1.0"?>
<ruleset name="AcmeProject">
	<rule ref="vendor/slevomat/coding-standard/SlevomatCodingStandard/ruleset.xml"><!-- relative path to your ruleset.xml -->
		<!-- sniffs to exclude -->
	</rule>
</ruleset>

然而,这不是推荐使用Slevomat编码标准的方式,因为当您在标准的次要版本之间移动时(如果您在composer.json中使用^~版本约束),您的构建可能会中断。我们定期在次要版本中添加新的Sniffs,这意味着您的代码很可能不符合新次要版本的包。

自动修复错误

带有 🔧 符号的此标准中的Sniffs支持自动修复编码标准违规。要自动修复代码,请运行phpcbf而不是phpcs

vendor/bin/phpcbf --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests

请始终记得在执行自动修复之前备份您的代码,并用您自己的眼睛检查结果,因为自动修复器有时会产生不受欢迎的结果。

在本地抑制 sniffs

带有 🚧 符号的此标准中的所选Sniffs可以通过注解来抑制特定的代码片段。考虑以下示例

/**
 * @param int $max
 */
public function createProgressBar($max = 0): ProgressBar
{

}

参数$max可以有一个本地的int标量类型提示。但由于父类中的方法没有这个类型提示,所以这个方法也不能有。PHP_CodeSniffer显示以下错误

----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
 67 | ERROR | [x] Method ErrorsConsoleStyle::createProgressBar()
    |       |     does not have native type hint for its parameter $max
    |       |     but it should be possible to add it based on @param
    |       |     annotation "int".
    |       |     (SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint)

如果我们想抑制这个错误而不是修复它,我们可以使用错误代码(SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint)并使用它来与一个@phpcsSuppress注解一起使用,如下所示

/**
 * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
 * @param int $max
 */
public function createProgressBar($max = 0): ProgressBar
{

}

贡献

为了使此存储库在您的机器上工作,克隆它并在存储库的根目录中运行这两个命令

composer install
bin/phing

编写了一些代码并编辑或添加单元测试后,再次运行phing以检查一切正常

bin/phing

我们始终期待您的错误报告、功能请求和pull请求。谢谢。

行为准则

本项目遵循贡献者行为准则。通过参与本项目及其社区,您应遵守此准则。