Setting up static analysis

Introduction

This topic provides steps to set up most static analyzers that are used in our build pipeline to work in your local PHPStorm environment. This guide is written specifically for those using PHPStorm on MacOS.

Before you begin

If you have not already, verify that node and npm are installed. Then, in the Magento root directory, run npm install. After installation, ensure there is a node_modules directory in the root of your project before proceeding.

For all of the static configuration installations below involving the PHPStorm Preferences dialog, make sure you are clicking the “Apply” button before clicking “OK” to close the Preferences dialog.

Javascript Code Style check

JSCS is deprecated in PHPStorm 2020.2. You must install the JSCS plugin.

To install the JSCS plugin:

  1. Go to PHPStorm preferences > Languages & Frameworks > JavaScript > Code Quality Tools > JSCS.
  2. Check Enable, if it is unchecked.
  3. Enter the path to your node binary (the result of outputting which node in your terminal).
  4. Enter the path to your JSCS package: [magento_root]/node_modules/jscs
  5. Click Configuration File and in the adjacent input field enter the path to the JSCS file Magento uses, which is located in: https://github.com/magento/magento-coding-standard/blob/develop/jscs/.jscsrc

JSCS config

To verify it works, in any JS file add snake_case: [], to any object literal, and you should see a warning about not using camel case for the object key.

ESLint

  1. Go to PHPStorm preferences > Languages & Frameworks > JavaScript > Code Quality Tools > ESLint.
  2. Click Manual ESLint configuration.
  3. Fill in the adjacent input fields with the path to your node binary (the result of outputting which node in your terminal).
  4. Enter the path to your ESLint package: [magento_root]/node_modules/eslint
  5. Click Configuration File and in the adjacent input field enter the path to the ESLint file Magento uses, which is located in dev/tests/static/testsuite/Magento/Test/Js/_files/eslint/.eslintrc-magento.

See the image below for example configuration:

ESLint

To verify it works, in any JS file add /** Hello world */ as a doc comment to any method, and you should see a warning about the comment being on one line.

PHPCS

  1. Go to PHPStorm preferences > Languages & Frameworks > PHP > Quality Tools > PHP_CodeSniffer.
  2. Click the ... button to bring up another configuration modal.
  3. Enter the PHP_CodeSniffer path: [magento_root]/vendor/bin/phpcs

Configuring for Magento Coding Standard

  1. Go to the Magento Coding Standard GitHub Repository
  2. Follow instructions within the README to install the Magento Coding Standard for PHPCS. Verify it is installed with vendor/bin/phpcs -i. You should see Magento2 in the output.
  3. Go to PHPStorm preferences > Editor > Inspections, and in the adjacent window go to PHP > Quality Tools > PHP_CodeSniffer validation.
  4. Under Coding Standard dropdown, select Magento2.

See the image below for example configuration:

PHPCS

To verify it works, add the following PHP snippet: $base = basename($_SERVER['SCRIPT_FILENAME']);. You should see a warning that the use of basename is forbidden, as well as the use of superglobals.

PHPMD

  1. Go to PHPStorm preferences > Languages & Frameworks > PHP > Quality Tools > Mess Detector.
  2. Click the ... button to bring up another configuration modal.
  3. Enter the PHP Mess Detector path: [magento_root]/vendor/phpmd/phpmd/src/bin/phpmd
  4. Go to PHPStorm preferences > Editor > Inspections and in the adjacent window go to > PHP > Quality Tools > PHP Mess Detector validation.
  5. Under custom rulesets, add the path to the PHPMD ruleset Magento uses: [magento_root]/dev/tests/static/testsuite/Magento/Test/Php/_files/phpmd/ruleset.xml

See the image below for example configuration:

PHPMD

To verify it works, add an unused private method to a class, and you should see a warning from PHPMD about it not being used.