- Introduction
- Project history
- Installation
- Rulesets
- How to use
- Running your code through WPCS automatically using CI tools
- [Travis CI](#-travis-ci--https---travis-ciorg--)
- Fixing errors or whitelisting them
- Contributing
- License
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.
- 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.
The WordPress Coding Standards require the PHP_CodeSniffer version 2.7.0 or higher. The WordPress Coding Standards are currently not compatible with the upcoming PHPCS 3 release.
Standards can be installed with Composer dependency manager:
composer create-project wp-coding-standards/wpcs --no-dev
Running this command will:
- Install WordPress standards into
wpcs
directory. - Install PHP_CodeSniffer.
- Register WordPress standards in PHP_CodeSniffer configuration.
- Make
phpcs
command available fromwpcs/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.
-
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.
-
Clone WordPress standards repository:
git clone -b master https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git wpcs
-
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
.
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.
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 projectWordPress-Core
— main ruleset for WordPress core coding standardsWordPress-Docs
— additional ruleset for WordPress inline documentation standardsWordPress-Extra
— extended ruleset for recommended best practices, not sufficiently covered in the WordPress core coding standards- includes
WordPress-Core
- includes
WordPress-VIP
— extended ruleset for WordPress VIP coding requirements- includes
WordPress-Core
- includes
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.
The PHPCompatibility ruleset comes highly recommended. The PHPCompatibility sniffs are designed to analyse your code for cross-PHP version compatibility. Install it as a separate ruleset and either run it separately against your code or add it to your custom ruleset.
Whichever way you run it, do make sure you set the testVersion
to run the sniffs against. The testVersion
determines for which PHP versions you will received compatibility information. The recommended setting for this at this moment is 5.2-7.1
to support the same PHP versions as WordPress Core supports.
For more information about setting the testVersion
, see:
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 8 ERRORS AND 2 WARNINGS AFFECTING 7 LINES
--------------------------------------------------------------------------------
1 | ERROR | [x] End of line character is invalid; expected "\n" but found "\r\n"
36 | ERROR | [x] Expected 1 spaces before closing bracket; 0 found
41 | WARNING | [ ] Silencing errors is discouraged
41 | WARNING | [ ] Silencing errors is discouraged
48 | ERROR | [ ] Inline comments must end in full-stops, exclamation marks, or
| | question marks
48 | ERROR | [x] There must be no blank line following an inline comment
76 | ERROR | [ ] Inline comments must end in full-stops, exclamation marks, or
| | question marks
92 | ERROR | [x] String "Create a Configuration File" does not require double
| | quotes; use single quotes instead
94 | ERROR | [ ] Expected next thing to be an escaping function (see Codex for
| | 'Data Validation'), not '$die'
94 | ERROR | [ ] Expected next thing to be an escaping function (see Codex for
| | 'Data Validation'), not '__'
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 4 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------
Please see “PHP Code Sniffer with WordPress Coding Standards Integration” in PhpStorm documentation.
Install the sublime-phpcs package, then use the "Switch coding standard" command in the Command Palette to switch between coding standards.
sublime-phpcs is insanely powerful, but if you'd prefer automatic linting, SublimeLinter-phpcs can do that.
- Install PHP Sniffer and WordPress Coding Standards per above.
- Use Package Control to search for and install SublimeLinter then SublimeLinter-phpcs.
- From the command palette, select
Preferences: SublimeLinter Settings - User
and changeuser.linters.phpcs.standard
to the phpcs standard of your choice (e.g.WordPress
,WordPress-VIP
, etc.).
- You may need to restart Sublime for these settings to take effect. Error messages appear in the bottom of the editor.
- Install PHP Sniffer and WordPress Coding Standards per above.
- Install linter-phpcs via Atom's package manager.
- Run
which phpcs
to get yourphpcs
executable path. - Enter your
phpcs
executable path and one of the coding standards specified above (e.g.WordPress
,WordPress-VIP
, etc.).
Please see “Setting up PHP CodeSniffer in Visual Studio Code”, a tutorial by Tom McFarlin.
To integrate PHPCS with WPCS with Travis CI, you'll need to install both before_install
and add the run command to the script
.
If your project uses Composer, the typical instructions might be different.
If you use a matrix setup in Travis to test your code against different PHP and/or WordPress versions, you don't need to run PHPCS on each variant of the matrix as the results will be same. You can set an environment variable in the Travis matrix to only run the sniffs against one setup in the matrix.
language: php
matrix:
include:
# Arbitrary PHP version to run the sniffs against.
- php: '7.0'
env: SNIFF=1
before_install:
- if [[ "$SNIFF" == "1" ]]; export PHPCS_DIR=/tmp/phpcs; fi
- if [[ "$SNIFF" == "1" ]]; export SNIFFS_DIR=/tmp/sniffs; fi
# Install PHP CodeSniffer.
- if [[ "$SNIFF" == "1" ]]; then git clone -b master --depth 1 https://github.com/squizlabs/PHP_CodeSniffer.git $PHPCS_DIR; fi
# Install WordPress Coding Standards.
- if [[ "$SNIFF" == "1" ]]; then git clone -b master --depth 1 https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git $SNIFFS_DIR; fi
# Set install path for WordPress Coding Standards.
- if [[ "$SNIFF" == "1" ]]; then $PHPCS_DIR/scripts/phpcs --config-set installed_paths $SNIFFS_DIR; fi
# After CodeSniffer install you should refresh your path.
- if [[ "$SNIFF" == "1" ]]; then phpenv rehash; fi
script:
# Run against WordPress Coding Standards.
# If you use a custom ruleset, change `--standard=WordPress` to point to your ruleset file,
# for example: `--standard=wpcs.xml`.
# You can use any of the normal PHPCS command line arguments in the command:
# https://github.com/squizlabs/PHP_CodeSniffer/wiki/Usage
- if [[ "$SNIFF" == "1" ]]; then $PHPCS_DIR/scripts/phpcs -p . --standard=WordPress; fi
You can find information on how to deal with some of the more frequent issues in the wiki.
See CONTRIBUTING, including information about unit testing.
See LICENSE (MIT).