PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions
Find a file
Weston Ruter 7cc95d66c9 Merge pull request #526 from WordPress-Coding-Standards/JDGrimes-patch-1
Note about some issues coming from upstream
2016-02-05 16:21:01 -08:00
bin Update pre-commit hook to look for phpcs on PATH 2014-07-04 15:09:25 -07:00
WordPress Remove extra right paren from unit test 2016-02-05 11:30:03 -08:00
WordPress-Core Introduce WordPress.NamingConventions.ValidVariableName 2015-12-17 11:28:00 -08:00
WordPress-Docs Fix docs ruleset indentation 2015-05-17 07:32:55 +01:00
WordPress-Extra Add WordPress.PHP.StrictInArray to WordPress-Extra 2015-11-16 23:36:28 +11:00
WordPress-VIP Introduce WordPress.PHP.StrictInArray for WordPress-VIP 2015-11-16 18:03:51 +11:00
.gitignore Added composer.json with install/update scripts. 2014-07-04 22:22:12 +03:00
.travis.yml Revert "Skip phpunit for PHP 5.2" 2015-11-02 17:05:14 -05:00
CHANGELOG.md Change log for 0.9.0 2016-02-01 11:12:16 -05:00
composer.json Composer: Update PHPCS to ~2.2 2015-05-18 09:55:27 -04:00
CONTRIBUTING.md Note about some issues coming from upstream 2016-02-05 17:03:57 -05:00
LICENSE Create LICENSE 2014-09-15 07:45:57 +01:00
project.ruleset.xml.example Remove reference to removed sniff 2016-01-04 15:12:05 -05:00
README.md Add Atom Linter instructions to README 2016-02-02 00:17:06 -05:00

Build Status

WordPress Coding Standards for PHP_CodeSniffer

This project is a collection of PHP_CodeSniffer rules (sniffs) to validate code developed for WordPress. It ensures code quality and adherence to coding conventions, especially the official WordPress Coding Standards.

Project history

  • In April 2009 original project from Urban Giraffe was published.
  • In May 2011 the project was forked on GitHub by Chris Adams.
  • In April 2012 XWP started to dedicate resources to the development and currently maintains the project, along with J.D. Grimes and Gary Jones.

Installation

Composer

Standards can be installed with Composer dependency manager:

composer create-project wp-coding-standards/wpcs:dev-master --no-dev

Running this command will:

  1. Install WordPress standards into wpcs directory.
  2. Install PHP_CodeSniffer.
  3. Register WordPress standards in PHP_CodeSniffer configuration.
  4. Make phpcs command available from wpcs/vendor/bin.

For convenience of using phpcs as global command you might want to add path to wpcs/vendor/bin directory to a PATH environment of your operating system.

Standalone

  1. Install PHP_CodeSniffer by following its installation instructions (via Composer, PEAR, or Git checkout).

Do ensure, if for example you're using VVV, that PHP_CodeSniffer's version matches our requirements (you can check the required version in composer.json).

  1. Clone WordPress standards repository:

     git clone -b master https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git wpcs
    
  2. Add its path to PHP_CodeSniffer configuration:

     phpcs --config-set installed_paths /path/to/wpcs
    

To summarize:

cd ~/projects
git clone https://github.com/squizlabs/PHP_CodeSniffer.git phpcs
git clone -b master https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git wpcs
cd phpcs
./scripts/phpcs --config-set installed_paths ../wpcs

And then add the ~/projects/phpcs/scripts directory to your PATH environment variable via your .bashrc.

You should then see WordPress-Core et al listed when you run phpcs -i.

How to use

Command line

Run the phpcs command line tool on a given file or directory, for example:

phpcs --standard=WordPress wp-load.php

Will result in following output:

--------------------------------------------------------------------------------
FOUND 13 ERROR(S) AFFECTING 7 LINE(S)
--------------------------------------------------------------------------------
  1 | ERROR | End of line character is invalid; expected "\n" but found "\r\n"
 22 | ERROR | No space after opening parenthesis of function  prohibited
 22 | ERROR | No space before closing parenthesis of function  prohibited
 26 | ERROR | No space before closing parenthesis of function  prohibited
 31 | ERROR | No space after opening parenthesis of function  prohibited
 31 | ERROR | No space before closing parenthesis of function  prohibited
 31 | ERROR | No space after opening parenthesis of function  prohibited
 31 | ERROR | No space before closing parenthesis of function  prohibited
 34 | ERROR | No space after opening parenthesis of function  prohibited
 34 | ERROR | No space before closing parenthesis of function  prohibited
 55 | ERROR | Detected usage of a non-validated input variable: $_SERVER
 55 | ERROR | Detected usage of a non-sanitized input variable: $_SERVER
 70 | ERROR | String "Create a Configuration File" does not require double
	|       | quotes; use single quotes instead
--------------------------------------------------------------------------------

PhpStorm

Please see “PHP Code Sniffer with WordPress Coding Standards Integration” in PhpStorm documentation.

Sublime Text

Install the sublime-phpcs package, then use the "Switch coding standard" command in the Command Palette to switch between coding standards.

Atom

  • Install PHP Sniffer and WordPress Coding Standards per above
  • Install linter-phpcs via Atom's package manager
  • Run which phpcs to get your phpcs executable path
  • Enter your phpcs executable path and one of the coding standards specified above (e.g. WordPress, WordPress-VIP, etc.)

Atom Linter WordPress Coding Standards configuration

Atom Linter in action using WordPress Coding Standards

Standards subsets

The project encompasses a superset of the sniffs that the WordPress community may need. If you use the WordPress standard you will get all the checks. Some of them might be unnecessary for your environment, for example those specific to WordPress VIP coding requirements.

You can use the following as standard names when invoking phpcs to select sniffs, fitting your needs:

  • WordPress — complete set with all of the sniffs in the project
  • WordPress-Core — main ruleset for WordPress core coding standards
  • WordPress-Docs — additional ruleset for inline documentation
  • WordPress-Extra — extended ruleset for optional best practices sniffs
    • includes WordPress-Core
  • WordPress-VIP — extended ruleset for WordPress VIP coding requirements
    • includes WordPress-Core

Using custom ruleset

If you need to further customize selection of sniffs for your project — you can create custom ruleset.xml standard. See provided project.ruleset.xml.example file and fully annotated example in PHP_CodeSniffer documentation.

Contributing

See CONTRIBUTING, including information about unit testing.

License

See LICENSE (MIT).