PHP CodeSniffer WordPress via Composer
Asked Answered
J

1

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"

Josefajosefina answered 28/1, 2018 at 11:22 Comment(0)
U
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
Ugo answered 27/2, 2018 at 19:32 Comment(3)
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?Josefajosefina
The CodeSniffer.conf is an internal file. Add your custom configuration to your own ruleset.xml - github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xmlUgo
To automate the registration of the code standards on composer install and composer update, use the github.com/Dealerdirect/phpcodesniffer-composer-installer Composer plugin (which WPCS recommends).Legator

© 2022 - 2024 — McMap. All rights reserved.