gamegos/php-code-sniffer

Gamegos PHP Code Sniffer

0.8.0 2023-08-23 07:04 UTC

This package is auto-updated.

Last update: 2024-12-23 09:47:14 UTC


README

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.

Requirements

Gamegos PHP Code Sniffer requires PHP 5.3 or later.

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.

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

#!/bin/sh
./COMPOSER_BIN_DIR/phpcs-pre-commit

Make sure the hook script is executable.

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.

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

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

Generic

Imported sniffs:

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

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

Gamegos.Commenting.DocComment

  • 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

Gamegos.Commenting.FunctionComment

  • 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].

Gamegos.Commenting.VariableComment

  • Extended from Squiz.Commenting.VariableComment.
  • Added bool and int into allowed variable types.

Gamegos.Formatting.DisallowMultipleStatements

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

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.

Building Binaries

Run the command below to re-build binaries:

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.

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

License Notices

PHP_CodeSniffer is licensed under the BSD 3-Clause license.