Gamegos PHP Code Sniffer
Gamegos 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 Gamegos., (*1)
Requirements
Gamegos PHP Code Sniffer requires PHP 5.3 or later., (*2)
Install via Composer
{
"require-dev": {
"gamegos/php-code-sniffer": "*"
}
}
Binaries
Binaries are located in bin directory but composer installer creates links under
your vendor binary directory depending on your composer configuration., (*3)
-
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.
Pre-Commit Hook
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., (*4)
#!/bin/sh
./COMPOSER_BIN_DIR/phpcs-pre-commit
Make sure the hook script is executable., (*5)
chmod +x .git/hooks/pre-commit
Customize
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 Gamegos rule to import all the Gamegos rules., (*6)
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
<rule ref="Gamegos" />
</ruleset>
Using a custom bootstrap file
You can add custom bootstap 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., (*7)
<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
<rule ref="Gamegos" />
<arg name="bootstrap" value="vendor/autoload.php" />
</ruleset>
Imported Standards
PSR2
All PSR2 sniffs except Squiz.WhiteSpace.ControlStructureSpacing are imported by default.
* PSR2.ControlStructures.ElseIfDeclaration.NotAllowed rule type is considered as error instead of warning., (*8)
Generic
Imported sniffs:
* All sniffs in Generic.Formatting category except:
* DisallowMultipleStatements (replaced by Gamegos.Formatting.DisallowMultipleStatements)
* NoSpaceAfterCast
* SpaceAfterNot
* Generic.Arrays.DisallowLongArraySyntax, (*9)
Squiz
Imported sniffs:
* Squiz.Commenting.DocCommentAlignment
* Squiz.Commenting.InlineComment
* InvalidEndChar rule type is considered as warning instead of error.
* Squiz.WhiteSpace.SuperfluousWhitespace
* Squiz.WhiteSpace.OperatorSpacing, (*10)
Custom Sniffs
Gamegos.Arrays.ArrayDeclaration
- 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 override methods and PHPUnit test class methods [1].
- Changed
MissingShort rule type from error to warning.
- Removed rules for comments with long descriptions:
SpacingBetween
LongNotCapital
SpacingBeforeTags
ParamGroup
NonParamGroup
SpacingAfterTagGroup
TagValueIndent
ParamNotFirst
TagsNotGrouped
- Extended from
PEAR.Commenting.FunctionComment.
- Allowed override methods and PHPUnit test class methods without doc comments [1].
- Added
{@inheritdoc} validation for override methods [1].
- Removed
MissingParamComment, MissingReturn, SpacingAfterParamType and SpacingAfterParamName rules.
- Ignored
MissingParamTag rule for PHPUnit test class methods [1].
- Extended from
Squiz.Commenting.VariableComment.
- Added
bool and int into allowed variable types.
- Extended from
Generic.Formatting.DisallowMultipleStatements.
- Fixed adding 2 blank lines when applying
SameLine fixer with Squiz.Functions.MultiLineFunctionDeclaration.ContentAfterBrace fixer together.
Gamegos.Strings.ConcatenationSpacing
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., (*11)
Gamegos.WhiteSpace.FunctionSpacing
- 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.
Gamegos.WhiteSpace.MemberVarSpacing
- 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.
Development
Live Testing
You can test any modifications by running phpcs.php, phpcbf.php and
phpcs-pre-commit.php scripts under scripts directory., (*12)
Building Binaries
Run the command below to re-build binaries:, (*13)
php scripts/build.php
PHP_CodeSniffer Dependency
Current version is built on PHP_CodeSniffer 2.9.2
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 Gamegos sniffs, so you must carefully track any changes on PHP_CodeSniffer before updating., (*14)
[1] A class loader is required (eg. via a bootstrap file),
otherwise a warning (Internal.Gamegos.NeedClassLoader) will be generated.
You can override this rule in phpcs.xml file in your project to prevent warnings.
↩ ↩ ↩ ↩, (*15)
License Notices
PHP_CodeSniffer is licensed under the BSD 3-Clause license., (*16)