Skip to content
This repository has been archived by the owner on Oct 17, 2019. It is now read-only.
/ php-code-sniffer Public archive

PHP code standard checker/beautifier/fixer tool based on PHP_CodeSniffer.

License

Notifications You must be signed in to change notification settings

tavy315/php-code-sniffer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PHP Code Sniffer

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.

Requirements

PHP Code Sniffer requires PHP 5.6 or later.

Install via Composer

{
    "require-dev": {
        "tavy315/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 I2ct rule to import all the I2ct rules.

<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
    <rule ref="I2ct" />
</ruleset>

Using a custom bootstrap file

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>

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

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

I2ct.Commenting.DocComment

  • Extended from Generic.Commenting.DocComment.
  • Ignored MissingShort rule for 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

I2ct.Commenting.FunctionComment

  • 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 and SpacingAfterParamName rules.
  • Ignored MissingParamTag rule for PHPUnit test class methods [1].

I2ct.Commenting.VariableComment

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

I2ct.Formatting.DisallowMultipleStatements

  • Extended from Generic.Formatting.DisallowMultipleStatements.
  • Fixed adding 2 blank lines when applying SameLine fixer with Squiz.Functions.MultiLineFunctionDeclaration.ContentAfterBrace fixer together.

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

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

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


License Notices

PHP_CodeSniffer is licensed under the BSD 3-Clause license.

About

PHP code standard checker/beautifier/fixer tool based on PHP_CodeSniffer.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages