PHP Code Sniffer is a PHP code standard checker/beautifier/fixer tool based on PHP_CodeSniffer and includes custom sniffs used in PHP projects developed by I2ct.
PHP Code Sniffer requires PHP 5.6 or later.
{
"require-dev": {
"tavy315/php-code-sniffer": "*"
}
}
Binaries are located in bin
directory but composer installer creates links under
your vendor binary directory depending on your composer configuration.
- phpcs : Checks PHP files against defined coding standard rules.
- phpcbf : Corrects fixable coding standard violations.
- phpcs-pre-commit : Runs phpcs for modified files in git repository.
Save the following script as .git/hooks/pre-commit
by replacing COMPOSER_BIN_DIR
as your vendor binary directory name depending on your composer configuration.
#!/bin/sh
./COMPOSER_BIN_DIR/phpcs-pre-commit
Make sure the hook script is executable.
chmod +x .git/hooks/pre-commit
You can customize configuration by adding a file called phpcs.xml
file into
the root directory of your project. The phpcs.xml file has exactly the same
format as a normal ruleset.xml file, so all the same options are available in
it. You need to define I2ct
rule to import all the I2ct
rules.
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
<rule ref="I2ct" />
</ruleset>
You can add custom bootstrap files to be included before beginning the run. Some sniffs need to load classes from your project; so adding a autoload file will allow sniffs to do this.
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
<rule ref="I2ct" />
<arg name="bootstrap" value="vendor/autoload.php" />
</ruleset>
All PSR2 sniffs except Squiz.WhiteSpace.ControlStructureSpacing
are imported by default.
PSR2.ControlStructures.ElseIfDeclaration.NotAllowed
rule type is considered aserror
instead ofwarning
.
Imported sniffs:
- All sniffs in
Generic.Formatting
category except:DisallowMultipleStatements
(replaced byI2ct.Formatting.DisallowMultipleStatements
)NoSpaceAfterCast
SpaceAfterNot
Generic.Arrays.DisallowLongArraySyntax
Imported sniffs:
Squiz.Commenting.DocCommentAlignment
Squiz.Commenting.InlineComment
InvalidEndChar
rule type is considered aswarning
instead oferror
.
Squiz.WhiteSpace.SuperfluousWhitespace
Squiz.WhiteSpace.OperatorSpacing
- Extended from
Squiz.Arrays.ArrayDeclaration
. - Arranged array element indents by start position of the first (declaration) line.
- Number of spaces before array elements is increased from 1 to 4.
- Removed rules:
NoKeySpecified
KeySpecified
MultiLineNotAllowed
NoCommaAfterLast
NoComma
- Extended from
Generic.Commenting.DocComment
. - Ignored
MissingShort
rule for PHPUnit test class methods [1]. - Changed
MissingShort
rule type fromerror
towarning
. - Removed rules for comments with long descriptions:
SpacingBetween
LongNotCapital
SpacingBeforeTags
ParamGroup
NonParamGroup
SpacingAfterTagGroup
TagValueIndent
ParamNotFirst
TagsNotGrouped
- Extended from
PEAR.Commenting.FunctionComment
. - Added PHPUnit test class control for methods without doc comment [1].
- Added
{@inheritdoc}
validation for overrided methods [1]. - Removed
MissingParamComment
,MissingReturn
,SpacingAfterParamType
andSpacingAfterParamName
rules. - Ignored
MissingParamTag
rule for PHPUnit test class methods [1].
- Extended from
Squiz.Commenting.VariableComment
. - Added
bool
andint
into allowed variable types.
- Extended from
Generic.Formatting.DisallowMultipleStatements
. - Fixed adding 2 blank lines when applying
SameLine
fixer withSquiz.Functions.MultiLineFunctionDeclaration.ContentAfterBrace
fixer together.
This sniff has two rules and fixes.
PaddingFound
: There must be only one space between the concatenation operator (.) and the strings being concatenated.NotAligned
: Multiline string concatenations must be aligned.
- Extended from
Squiz.WhiteSpace.FunctionSpacing
. - Expected no blank lines before the method which is the first defined element of a class.
- Expected no blank lines after the method which is the last defined element of a class.
- Fixed fixing spaces before method definitions.
- Extended from
Squiz.WhiteSpace.MemberVarSpacing
. - Expected no blank lines before the property which is the first defined element of a class.
- Fixed fixing spaces before property definitions.
You can test any modifications by running phpcs.php, phpcbf.php and
phpcs-pre-commit.php scripts under scripts
directory.
Run the command below to re-build binaries:
php scripts/build.php
Current version is built on PHP_CodeSniffer 2.8.1
which is locked in composer.lock file. To import new versions; edit composer.json file if required and
run composer update
command, then commit the modified composer.lock file. Updating PHP_CodeSniffer version may
break some of I2ct sniffs, so you must carefully track any changes on PHP_CodeSniffer before updating.
[1] A class loader is required (eg. via a bootstrap file),
otherwise a warning (Internal.I2ct.NeedClassLoader
) will be generated.
You can override this rule in phpcs.xml
file in your project to prevent warnings.
↩ ↩ ↩ ↩
PHP_CodeSniffer is licensed under the BSD 3-Clause license.