chancedigital / wp-coding-standards
Chance Digital编码规范
Requires
- php: >=7.1
- dealerdirect/phpcodesniffer-composer-installer: ^0.5.0
- fig-r/psr2r-sniffer: ^0.5.0
- squizlabs/php_codesniffer: ^3.4.2
- wp-coding-standards/wpcs: ^2.1.0
Requires (Dev)
- phpunit/phpunit: ^5.7
README
这是Chance Digital PHP CodeSniffer规则的规范化版本。它最初是基于Human Made编码规范的一个分支。
配置
composer require --dev chancedigital/wp-coding-standards
- 运行以下命令以运行标准检查
vendor/bin/phpcs --standard=vendor/chancedigital/wp-coding-standards .
这里的最后一个.
指定了您要测试的文件;这通常是当前目录(.
),但您也可以通过指定它们来选择性地检查文件或目录。
您可以将此添加到您的Travis YAML文件中作为测试
script: - phpunit - vendor/bin/phpcs --standard=vendor/chancedigital/wp-coding-standards .
排除文件
此标准包括对.phpcsignore
文件的特殊支持(将来,这应该被集成到phpcs本身)。只需在根目录(您将从那里运行phpcs
)中放置一个.phpcsignore
文件。
此文件的格式类似于.gitignore
和类似文件:每行一个模式,注释行应以#
开头,仅包含空白字符的行将被忽略。
# Exclude our tests directory.
tests/
# Exclude any file ending with ".inc"
*\.inc
请注意,模式应匹配PHP_CodeSniffer样式:为方便起见,*
被翻译为.*
,但所有其他字符都像正则表达式一样工作。
模式相对于包含.phpcsignore
文件的目录。在加载时,它们被转换为绝对模式:例如,在/your/dir/.phpcsignore
中的*/tests/*
将变成正则表达式/your/dir/.*/tests/.*
。**这与常规PHP_CodeSniffer实践不同**。
高级/扩展
如果您想添加更多规则(例如WordPress.com VIP特定的规则),您可以创建自己的自定义标准文件(例如phpcs.ruleset.xml
)。
<?xml version="1.0"?> <ruleset> <!-- Use Chance Digital Coding Standards --> <rule ref="vendor/chancedigital/wp-coding-standards" /> <!-- Add VIP-specific rules --> <rule ref="WordPress-VIP" /> </ruleset>
然后您可以在运行phpcs时引用此文件。
vendor/bin/phpcs --standard=phpcs.ruleset.xml .
排除/禁用检查
您还可以自定义规则以排除不适用于项目的元素。
<rule ref="vendor/chancedigital/wp-coding-standards"> <exclude name="ChanceDigital.Files.ClassFileNameSniff" /> </rule>
规则也可以在行内禁用。使用phpcs规则可以禁用注释// @codingStandardsIgnoreLine
。
要了解这些代码是什么,在运行phpcs
时指定-s
,然后将输出代码。您可以指定完整代码,或部分代码以禁用错误组。
包含的检查
phpcs标准基于WordPress编码规范的WordPress-Extra
标准,并进行了定制和添加以匹配我们的风格指南。
测试
运行测试
要在本地运行测试,您需要PHP CodeSniffer的源代码版本。
如果您尚未安装您的Composer依赖项
composer install --prefer-source
如果您已经安装,并且需要将phpcs目录转换为源版本
rm -r vendor/squizlabs/php_codesniffer composer install --prefer-source composer dump-autoload
编写嗅探测试
要添加测试,您应该镜像嗅探的目录结构。例如,对ChanceDigital/Sniffs/Layout/OrderSniff.php
的测试需要以下文件
ChanceDigital/Tests/Layout/OrderUnitTest.php # Unit test code
ChanceDigital/Tests/Layout/OrderUnitTest.inc # Code to be tested
实际上,您正在将后缀Sniff.php
替换为UnitTest.php
。
一个基本的单元测试类看起来如下所示
<?php namespace ChanceDigital\Tests\Layout; use PHP_CodeSniffer\Tests\Standards\AbstractSniffUnitTest; /** * Class name must follow the directory structure to be autoloaded correctly. */ class OrderUnitTest extends AbstractSniffUnitTest { /** * Returns the lines where errors should occur. * * @return array <int line number> => <int number of errors> */ public function getErrorList() { return [ 1 => 1, // line 1 expects 1 error ]; } /** * Returns the lines where warnings should occur. * * @return array <int line number> => <int number of warnings> */ public function getWarningList() { return []; } }
测试用例
而不是单独测试嗅探,FixtureTests.php
还会测试tests/fixtures
目录中的文件,并确保整个文件通过。
要添加一个预期通过的文件,只需将其添加到相应的子目录/文件中的tests/fixtures/pass
。
要添加一个预期失败的文件,将其添加到相应的子目录/文件中的tests/fixtures/fail
。然后您需要将预期的错误添加到与测试文件配套的JSON文件中(即,添加.json
后缀的文件名)。该文件应包含一个有效的JSON对象,键为行号,每个项是一个错误对象的列表
{ "1": [ { "source": "ChanceDigital.Files.FunctionFileName.WrongFile", "type": "error" } ] }
错误对象包含
source
:内部phpcs错误代码;使用phpcs
的-s
标志来获取代码。type
:根据检查的严重性,可以是error
或warning
。