arxeiss / coding-standards
自定义PHP CodeSniffer规则集
v0.12.0
2023-05-14 19:32 UTC
Requires
- php: ^7.2 || ^8.0
- slevomat/coding-standard: ^8.11.0
README
针对PHP CodeSniffer和Slevomat sniffs的自定义规则集。规则集基于PSR2 + PSR12,并添加了额外的规则,更详细的列表如下。规则集可以使用空格缩进和制表符缩进。
安装和运行
使用composer安装
composer require --dev arxeiss/coding-standards
并运行CodeSniffer
./vendor/bin/phpcs --standard=./vendor/arxeiss/coding-standards/Rules/phpcs-spaces.xml .
自定义规则集文件
更好的方法是创建自定义文件phpcs.xml
,内容类似于phpcs.example.xml。之后可以运行
./vendor/bin/phpcs --standard=./phpcs.xml
有关PHP CodeSniffer的更多信息,请参阅PHP CS wiki
嗅探器组
包基于使用的嗅探器由多个文件组成。
包括包含所有选定嗅探器的3个基本文件。使用phpcs-spaces.xml或phpcs-tabs.xml,不要同时使用。可选地,还可以添加phpcs-strict.xml。
- phpcs-spaces.xml - 包含所有使用空格缩进的嗅探器
- phpcs-tabs.xml - 包含所有使用制表符缩进的嗅探器
- phpcs-strict.xml - 包含基于Slevomat规则的额外、更严格的规则
在迁移大型项目时,可能不需要一次包含所有嗅探器。上面的文件仅包含这些部分文件
- Parts/phpcs-psr.xml - PSR2 + PSR12标准
- Parts/phpcs-use-spaces.xml或Parts/phpcs-use-tabs.xml - 仅包含一个关于缩进偏好的文件
- Parts/phpcs-generic.xml - 额外的通用规则
- Parts/phpcs-pear.xml - 额外的PEAR规则
- Parts/phpcs-squiz.xml - 额外的Squiz规则
- Parts/phpcs-slevomat.xml - 选定的Slevomat规则
如果基于部分文件构建自己的规则集,请始终使用Parts/phpcs-psr.xml,然后是Parts/phpcs-use-spaces.xml或Parts/phpcs-use-tabs.xml。
以后可以添加更多附加规则。参见phpcs.example.xml。
包含的嗅探器
请参阅SniffList,我在XML文件中为每个使用的嗅探器写了一句解释。
此外,Slevomat规则在其仓库的Readme中也有一些注释https://github.com/slevomat/coding-standard
更多建议
检查命名空间是否与文件结构匹配
这来自我的Laravel博客,其中主文件夹app
是BlogApp
命名空间。
<rule ref="SlevomatCodingStandard.Files.TypeNameMatchesFileName"> <properties> <property name="rootNamespaces" type="array"> <element key="app" value="BlogApp"/> </property> </properties> </rule>
从v0.11.0版本开始,不需要使用mixed
类型提示
解释请见#6
如果您想强制linter使用mixed
类型提示,可以在phpcs.xml文件中添加以下内容来启用。
<rule ref="SlevomatCodingStandard.TypeHints.ParameterTypeHint"> <!-- Check correct type hints --> <properties> <property name="enableMixedTypeHint" value="true"/> </properties> </rule> <rule ref="SlevomatCodingStandard.TypeHints.PropertyTypeHint"> <!-- Check type hint for class property --> <properties> <property name="enableMixedTypeHint" value="true"/> </properties> </rule> <rule ref="SlevomatCodingStandard.TypeHints.ReturnTypeHint"> <!-- Correct return type hint --> <properties> <property name="enableMixedTypeHint" value="true"/> </properties> </rule>