arxeiss/coding-standards

自定义PHP CodeSniffer规则集

安装次数: 33,239

依赖: 3

建议者: 0

安全: 0

星标: 7

关注者: 2

分支: 1

开放问题: 0

类型:phpcodesniffer-standard

v0.12.0 2023-05-14 19:32 UTC

This package is auto-updated.

Last update: 2024-09-14 22:31:22 UTC


README

PHP from Packagist Packagist Version

针对PHP CodeSnifferSlevomat 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.xmlphpcs-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.xmlParts/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.xmlParts/phpcs-use-tabs.xml
以后可以添加更多附加规则。参见phpcs.example.xml

包含的嗅探器

请参阅SniffList,我在XML文件中为每个使用的嗅探器写了一句解释。

此外,Slevomat规则在其仓库的Readme中也有一些注释https://github.com/slevomat/coding-standard

更多建议

检查命名空间是否与文件结构匹配

这来自我的Laravel博客,其中主文件夹appBlogApp命名空间。

<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>