将PHP_CodeSniffer引入系统中
我是jinjin1,负责编写格伦齐(グレンジ)2017年圣诞降临日历的第五天文章。我在格伦齐担任服务器端工程师的工作。
这次是关于如何设置PHP_CodeSniffer的内容。
安装
我用 composer 进行了安装。
"require-dev" : {
"squizlabs/php_codesniffer" : "2.*"
}
设定
我将目录结构设置如下。
├── app (対象となるソースコード)
├── rules
│ ├── php_codesniffer.xml (実行する対象や除外を定義)
│ └── php_codesniffer
│ └── standards
│ └── Custom
│ └── ruleset.xml (独自のカスタムコード規約)
└── vendor
创建了一个名为「Custom」的规则集,并描述了独特的定义。
在「PSR2」的基础上,根据原有的代码格式进行了排除和增加。
<?xml version="1.0"?>
<ruleset name="Custom">
<description>A custom coding standard.</description>
<rule ref="PSR2">
<!-- 名前空間のチェックなし -->
<exclude name="PSR1.Classes.ClassDeclaration"/>
<!-- 1行あたりの文字数チェックなし -->
<exclude name="Generic.Files.LineLength"/>
<!-- クラスの開き括弧を次の行に記述しない -->
<exclude name="PSR2.Classes.ClassDeclaration"/>
<!-- メソッドの開き括弧を次の行に記述しない -->
<exclude name="Squiz.Functions.MultiLineFunctionDeclaration"/>
<!-- elseifのチェックなし -->
<exclude name="PSR2.ControlStructures.ElseIfDeclaration"/>
</rule>
<!-- elseif でなく else if を使用する -->
<rule ref="Squiz.ControlStructures.ElseIfDeclaration"/>
<!-- 二項演算子の前後にスペース -->
<rule ref="Squiz.WhiteSpace.OperatorSpacing" />
<!-- セミコロンの前にスペースを入れない -->
<rule ref="Squiz.WhiteSpace.SemicolonSpacing.Incorrect"/>
<!-- ファンクションの開始ブレス直後に空行を入れない -->
<rule ref="Squiz.WhiteSpace.FunctionOpeningBraceSpace.SpacingAfter"/>
<!-- array()禁止 []を使うこと -->
<rule ref="Generic.Arrays.DisallowLongArraySyntax.Found"/>
<!-- キャスト演算子と変数の間にスペースがあってはならない -->
<rule ref="Generic.Formatting.NoSpaceAfterCast.SpaceFound"/>
<!-- 配列の最終行にカンマが必要 -->
<rule ref="Squiz.Arrays.ArrayDeclaration.NoCommaAfterLast">
<exclude name="Squiz.Arrays.ArrayDeclaration.CloseBraceNotAligned"/>
<exclude name="Squiz.Arrays.ArrayDeclaration.KeyNotAligned"/>
<exclude name="Squiz.Arrays.ArrayDeclaration.MultiLineNotAllowed"/>
<exclude name="Squiz.Arrays.ArrayDeclaration.NoSpaceAfterComma"/>
<exclude name="Squiz.Arrays.ArrayDeclaration.SingleLineNotAllowed"/>
<exclude name="Squiz.Arrays.ArrayDeclaration.ValueNoNewline"/>
<exclude name="Squiz.Arrays.ArrayDeclaration.ValueNotAligned"/>
</rule>
<!-- 空配列はスペース空けない -->
<rule ref="Squiz.Arrays.ArrayDeclaration.SpaceInEmptyArray"/>
<!-- 行末に不要なスペースを入れない -->
<rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
<properties>
<property name="ignoreBlankLines" value="false"/>
</properties>
</rule>
<!-- 言語の制御構造の後ろにスペース -->
<rule ref="Squiz.WhiteSpace.LanguageConstructSpacing.Incorrect"/>
<!-- ファンクションの前後は改行をいれる -->
<rule ref="Squiz.WhiteSpace.FunctionSpacing" >
<properties>
<property name="spacing" value="1" />
</properties>
</rule>
<!-- 必要のないまたは到達できないreturn -->
<rule ref="Squiz.PHP.NonExecutableCode.ReturnNotRequired"/>
<!-- ダブルコーテーション使わない -->
<rule ref="Squiz.Strings.DoubleQuoteUsage.NotRequired">
<exclude name="Squiz.Strings.DoubleQuoteUsage.ContainsVar"/>
</rule>
</ruleset>
在运行时,需要指定定义文件,其中包含有关目标目录、需要排除的文件以及每个目标的排除规则的描述。
<?xml version="1.0"?>
<ruleset name="Custom">
<description>A custom coding standard.</description>
<file>app</file>
<file>tests</file>
<exclude-pattern>app/cli.php</exclude-pattern>
<exclude-pattern>app/cache</exclude-pattern>
<arg name="colors"/>
<arg value="sp"/>
<rule ref="./php_codesniffer/standards/Custom"/>
<rule ref="PSR1.Methods.CamelCapsMethodName">
<!-- テストは除外 -->
<exclude-pattern>tests</exclude-pattern>
</rule>
<rule ref="Squiz.WhiteSpace.OperatorSpacing">
<!-- 設定ファイルは除外 -->
<exclude-pattern>config.php</exclude-pattern>
</rule>
<rule ref="Squiz.WhiteSpace.LanguageConstructSpacing.Incorrect">
<!-- 設定ファイルは除外 -->
<exclude-pattern>app/config/</exclude-pattern>
</rule>
</ruleset>
进行
执行时使用 rules/php_codesniffer.xml。
./vendor/bin/phpcs --standard=rules/php_codesniffer.xml