ose/coding-standard

OSE 是 Slevomat Coding Standard for PHP_CodeSniffer 的分支,通过提供额外的检查来补充 Consistent Coding Standard。

安装次数: 2,610

依赖项: 1

建议者: 0

安全: 0

类型:phpcodesniffer-standard

9.0.0 2023-08-18 04:55 UTC

README

Latest version Downloads Build status Code coverage PHPStan

Slevomat Coding Standard for PHP_CodeSniffer 提供了三类 sniffs:

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

目录

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

sniffs 的字母列表

🔧 = 自动错误修复

🚧 = 本地抑制 sniff 检查

安装

安装Slevomat Coding Standard的推荐方法是通过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

推荐的方法是编写自己的ruleset.xml,只引用选定的sniffs。这是一个示例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 编码标准,并仅排除一些嗅探器

<?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 中使用 ^~ 版本约束),您的构建可能会中断。我们经常在次要版本中添加新的嗅探器,这意味着您的代码不太可能符合新次要版本的包。

自动修复错误

此标准中以 🔧 符号标记的嗅探器支持 自动修复编码标准违规。要自动修复代码,请运行 phpcbf 而不是 phpcs

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

始终记得在进行自动修复之前备份您的代码,并亲自检查结果,因为自动修复器有时会产生不希望的结果。

本地抑制 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

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

行为准则

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