mglaman / drupal-check

Check Drupal code for deprecations and discover bugs via static analysis
GNU General Public License v2.0
332 stars 67 forks source link
drupal drupal-8 hacktoberfest phpstan

drupal-check Build CircleCI Latest release

Built on PHPStan, this static analysis tool will check for correctness (e.g. using a class that doesn't exist), deprecation errors, and more.

Why? While there are many static analysis tools out there, none of them run with the Drupal context in mind. This allows checking contrib modules for deprecation errors thrown by core.

Are you ready for Drupal 9? Check out our Drupal 9 Readiness instructions for details on how this tool can help.

Sponsors

undpaul undpaul

Would you like to sponsor?

Requirements

Installation

You can install this in your project using Composer as a development dependency like so:

composer require mglaman/drupal-check --dev

You can also install this globally using Composer like so:

composer global require mglaman/drupal-check

Refer to Composer's documentation on how to ensure global binaries are in your PATH: https://getcomposer.org/doc/00-intro.md#manual-installation.

Usage

php vendor/bin/drupal-check [options] [--] <path>...

Arguments:

Options:

Examples:

php vendor/bin/drupal-check web/modules/contrib/address
php vendor/bin/drupal-check -d web/modules/contrib/address
php vendor/bin/drupal-check -a web/modules/contrib/address

Rollback update to PHPStan level 2 for deprecation analysis

drupal-check:1.4.0 set PHPStan's analysis level to 2 for deprecations and 6 for analysis. This ensures basic analysis errors are fixed to provide the best deprecated code detection experience. You can read more about PHPStan's rule levels here: https://phpstan.org/user-guide/rule-levels

If you do not want to run PHPStan at level 2 and only report deprecation messages, use the following instructions

composer remove mglaman/drupal-check
composer require  --dev phpstan/phpstan \
  phpstan/extension-installer \
  mglaman/phpstan-drupal \
  phpstan/phpstan-deprecation-rules

Create a phpstan.neon file with the following:

parameters:
    customRulesetUsed: true
    ignoreErrors:
        - '#\Drupal calls should be avoided in classes, use dependency injection instead#'
        - '#Plugin definitions cannot be altered.#'
        - '#Missing cache backend declaration for performance.#'
        - '#Plugin manager has cache backend specified but does not declare cache tags.#'

    # FROM mglaman/drupal-check/phpstan/base_config.neon
    reportUnmatchedIgnoredErrors: false
    excludePaths:
        - */tests/Drupal/Tests/Listeners/Legacy/*
        - */tests/fixtures/*.php
        - */settings*.php
        - */bower_components/*
        - */node_modules/*

You can copy this from the Upgrade Status module directly https://git.drupalcode.org/project/upgrade_status/-/blob/8.x-3.x/deprecation_testing_template.neon

Drupal Check - VS Code Extension

You can run Drupal Check from VSCode using this extension: https://marketplace.visualstudio.com/items?itemName=bbeversdorf.drupal-check

The code can be found at: https://github.com/bbeversdorf/vscode-drupal-check

License

GPL v2

Issues

Submit issues and feature requests here: https://github.com/mglaman/drupal-check/issues.

Known Issues

There are conflicts with dependencies shared with other libraries that might be installed on a Drupal project:

Contributing

See the CONTRIBUTING.md.

References