2014-11-10 13:16:06 +02:00
[](https://travis-ci.org/WordPress-Coding-Standards/WordPress-Coding-Standards)
2014-09-15 07:56:02 +01:00
# WordPress Coding Standards for PHP_CodeSniffer
2012-11-12 21:11:25 -08:00
2014-11-10 13:16:06 +02:00
This project is a collection of [PHP_CodeSniffer ](https://github.com/squizlabs/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 ](http://make.wordpress.org/core/handbook/coding-standards/ ).
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
## Project history
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
- In April 2009 original project from [Urban Giraffe ](http://urbangiraffe.com/articles/wordpress-codesniffer-standard/ ) was published.
- In May 2011 the project was forked on GitHub by [Chris Adams ](http://chrisadams.me.uk/ ).
2014-11-10 20:57:12 +02:00
- In April 2012 [XWP ](https://xwp.co/ ) started to dedicate resources to the development and currently maintains the project.
2013-01-24 10:48:25 -08:00
2014-11-10 13:16:06 +02:00
## Installation
2013-01-24 10:48:25 -08:00
2014-11-10 13:16:06 +02:00
### Composer
2013-01-24 11:27:21 -08:00
2014-11-10 13:16:06 +02:00
Standards can be installed with [Composer ](https://getcomposer.org/ ) dependency manager:
2013-10-11 22:44:23 -04:00
2014-11-10 13:16:06 +02:00
composer create-project wp-coding-standards/wpcs:dev-master --no-dev
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
Running this command will:
2014-07-03 23:47:37 -07:00
2014-11-10 13:16:06 +02:00
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` .
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
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.
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
### Standalone
2011-05-02 14:19:03 +01:00
2014-11-10 13:16:06 +02:00
1. Install PHP_CodeSniffer by following its [installation instructions ](https://github.com/squizlabs/PHP_CodeSniffer#installation ) (via Composer, PEAR, or Git checkout).
2011-05-02 14:10:14 +01:00
2015-05-07 09:52:36 -04:00
Do ensure, if for example you're using [VVV ](https://github.com/Varying-Vagrant-Vagrants/VVV ), that PHP_CodeSniffer's version matches our requirements (you can check the required version in [composer.json ](composer.json#L18 )).
2014-12-24 13:47:45 +00:00
2014-11-10 13:16:06 +02:00
2. Clone WordPress standards repository:
2011-05-02 14:10:14 +01:00
2014-12-01 22:26:38 +02:00
git clone -b master https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git wpcs
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
3. Add its path to PHP_CodeSniffer configuration:
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
phpcs --config-set installed_paths /path/to/wpcs
2011-05-02 14:10:14 +01:00
2015-05-16 17:05:15 -07:00
To summarize:
```bash
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` .
2014-11-10 13:16:06 +02:00
## How to use
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
### Command line
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
Run the `phpcs` command line tool on a given file or directory, for example:
2014-05-31 16:18:35 -07:00
2014-11-10 13:16:06 +02:00
phpcs --standard=WordPress wp-load.php
2014-06-20 22:46:00 -07:00
2014-11-10 13:16:06 +02:00
Will result in following output:
2014-06-20 22:46:00 -07:00
2014-11-10 13:16:06 +02:00
--------------------------------------------------------------------------------
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
--------------------------------------------------------------------------------
2014-06-20 22:46:00 -07:00
2014-11-10 13:16:06 +02:00
### PhpStorm
2011-05-02 14:10:14 +01:00
2015-03-20 11:50:55 +11:00
Please see “[PHP Code Sniffer with WordPress Coding Standards Integration ](https://www.jetbrains.com/phpstorm/help/using-php-code-sniffer-tool.html )” in PhpStorm documentation.
2011-05-02 14:10:14 +01:00
2014-11-10 13:16:06 +02:00
## Standards subsets
2011-07-18 00:24:50 +01:00
2014-11-10 13:16:06 +02:00
The project encompasses a super– set 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.
2011-07-18 00:24:50 +01:00
2014-11-10 13:16:06 +02:00
You can use the following as standard names when invoking `phpcs` to select sniffs, fitting your needs:
2011-07-18 00:24:50 +01:00
2015-06-04 13:17:13 +03:00
- `WordPress` — complete set with all of the sniffs in the project
- `WordPress-Core` — main ruleset for [WordPress core coding standards ](http://make.wordpress.org/core/handbook/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 ](http://vip.wordpress.com/documentation/code-review-what-we-look-for/ )
- includes `WordPress-Core`
2011-05-02 14:22:16 +01:00
2014-11-10 13:16:06 +02:00
### Using custom ruleset
2011-05-02 14:22:16 +01:00
2014-11-10 13:16:06 +02:00
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 ](project.ruleset.xml.example ) file and [fully annotated example ](https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml ) in PHP_CodeSniffer documentation.
## Contributing
See [CONTRIBUTING ](CONTRIBUTING.md ), including information about [unit testing ](CONTRIBUTING.md#unit-testing ).
2014-09-14 17:08:30 -07:00
2014-09-15 07:56:02 +01:00
## License
2014-09-14 17:08:30 -07:00
2014-12-24 13:47:45 +00:00
See [LICENSE ](LICENSE ) (MIT).