5

Is there a way to install PHPCodeSniffer and WordPress Coding Standards for PHP_CodeSniffer per project via Composer? I've installed both as dev dependencies and set the installed path to WordPress Coding Standards in CodeSniffer.conf. Unfortunately phpcs can not resolve to the config file when I run the command in the terminal because it is looking in "vendor" folder for "vendor/squizlabs/php_codesniffer/CodeSniffer.conf"

Here is my project setup:

composer.json

{
    "require-dev": {
        "squizlabs/php_codesniffer": "^3.2",
        "wp-coding-standards/wpcs": "^0.14.0"
    }
}

CodeSniffer.conf

<?php
    $phpCodeSnifferConfig = array (
        'installed_paths' => 'vendor/wp-coding-standards/wpcs',
    )
?>

Terminal

vendor/bin/phpcs -p THEME_NAME --standard=WordPress

"ERROR: the "WordPress" coding standard is not installed. The installed coding standards are PEAR, Zend, PSR2, MySource, Squiz and PSR1"

TylerH
  • 20,799
  • 66
  • 75
  • 101
marcobiedermann
  • 4,317
  • 3
  • 24
  • 37

1 Answers1

13

First, you don't need to require PHP CodeSniffer explicitly, because wp-coding-standards/wpcs pulls it automatically.

composer.json

{
    "require-dev": {
        "wp-coding-standards/wpcs": "^0.14.0"
    }
}

is sufficient.

To make CodeSniffer aware of the added coding standard, type on the console terminal:

$ vendor/bin/phpcs --config-set installed_paths vendor/wp-coding-standards/wpcs

It will automatically create (and later find) the vendor/squizlabs/php_codesniffer/CodeSniffer.conf file.

This should have happened automagically during the installation; the package contains instructions for that, but for some reason they were not executed.

Now, check the installed standards:

$ vendor/bin/phpcs -i
The installed coding standards are MySource, PSR2, Squiz, Zend, PSR1, PEAR, WordPress-Extra, WordPress, WordPress-Core, WordPress-VIP and WordPress-Docs
nibra
  • 3,958
  • 2
  • 20
  • 34
  • Thank you so much! This is exactly what I needed. Just a follow up question. I also came to a similar point but I wanted to add move the `CodeSniffer.conf` file to root level to track it via git and not have it stored in vendors, which you typically exclude. Is there a way to point phpcs to another path where to look for the config? – marcobiedermann Feb 27 '18 at 22:45
  • The `CodeSniffer.conf` is an internal file. Add your custom configuration to your own `ruleset.xml` - https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml – nibra Mar 01 '18 at 00:36
  • To automate the registration of the code standards on `composer install` and `composer update`, use the https://github.com/Dealerdirect/phpcodesniffer-composer-installer Composer plugin (which WPCS recommends). – GaryJ Aug 22 '18 at 18:37