 phpstan
phpstan
phpstan documentation
- Version in MegaLinter: 1.10.15
- Visit Official Web Site
- See How to configure phpstan rules- If custom phpstan.neon.distconfig file isn't found, phpstan.neon.dist will be used
 
- If custom 
- See How to disable phpstan rules in files
Configuration in MegaLinter
- Enable phpstan by adding PHP_PHPSTANin ENABLE_LINTERS variable
- Disable phpstan by adding PHP_PHPSTANin DISABLE_LINTERS variable
| Variable | Description | Default value | 
|---|---|---|
| PHP_PHPSTAN_ARGUMENTS | User custom arguments to add in linter CLI call Ex: -s --foo "bar" | |
| PHP_PHPSTAN_FILTER_REGEX_INCLUDE | Custom regex including filter Ex: (src\|lib) | Include every file | 
| PHP_PHPSTAN_FILTER_REGEX_EXCLUDE | Custom regex excluding filter Ex: (test\|examples) | Exclude no file | 
| PHP_PHPSTAN_CLI_LINT_MODE | Override default CLI lint mode - file: Calls the linter for each file- list_of_files: Call the linter with the list of files as argument- project: Call the linter from the root of the project | list_of_files | 
| PHP_PHPSTAN_FILE_EXTENSIONS | Allowed file extensions. "*"matches any extension,""matches empty extension. Empty list excludes all filesEx: [".py", ""] | [".php"] | 
| PHP_PHPSTAN_FILE_NAMES_REGEX | File name regex filters. Regular expression list for filtering files by their base names using regex full match. Empty list includes all files Ex: ["Dockerfile(-.+)?", "Jenkinsfile"] | Include every file | 
| PHP_PHPSTAN_PRE_COMMANDS | List of bash commands to run before the linter | None | 
| PHP_PHPSTAN_POST_COMMANDS | List of bash commands to run after the linter | None | 
| PHP_PHPSTAN_CONFIG_FILE | phpstan configuration file nameUse LINTER_DEFAULTto let the linter find it | phpstan.neon.dist | 
| PHP_PHPSTAN_RULES_PATH | Path where to find linter configuration file | Workspace folder, then MegaLinter default rules | 
| PHP_PHPSTAN_DISABLE_ERRORS | Run linter but consider errors as warnings | false | 
| PHP_PHPSTAN_DISABLE_ERRORS_IF_LESS_THAN | Maximum number of errors allowed | 0 | 
| PHP_PHPSTAN_CLI_EXECUTABLE | Override CLI executable | ['phpstan'] | 
MegaLinter Flavours
This linter is available in the following flavours
| Flavor | Description | Embedded linters | Info | |
|---|---|---|---|---|
|  | all | Default MegaLinter Flavor | 113 | |
| cupcake | MegaLinter for the most commonly used languages | 81 | ||
| php | Optimized for PHP based projects | 50 | 
Behind the scenes
How are identified applicable files
- File extensions: .php
How the linting is performed
- phpstan is called once with the list of files as arguments (list_of_filesCLI lint mode)
Example calls
phpstan analyse --no-progress --no-ansi myfile.php
phpstan analyse --no-progress --no-ansi -c phpstan.neon myfile.php
phpstan analyse --no-progress --no-ansi myfile1.php myfile2.php
phpstan analyse --no-progress --no-ansi mydir1/ mydir2/ myfile.php
Help content
Description:
  Analyses source code
Usage:
  analyse [options] [--] [<paths>...]
  analyze
Arguments:
  paths                                        Paths with source code to run analysis on
Options:
  -c, --configuration=CONFIGURATION            Path to project configuration file
  -l, --level=LEVEL                            Level of rule options - the higher the stricter
      --no-progress                            Do not show progress bar, only results
      --debug                                  Show debug information - which file is analysed, do not catch internal errors
  -a, --autoload-file=AUTOLOAD-FILE            Project's additional autoload file path
      --error-format=ERROR-FORMAT              Format in which to print the result of the analysis
  -b, --generate-baseline[=GENERATE-BASELINE]  Path to a file where the baseline should be saved [default: false]
      --allow-empty-baseline                   Do not error out when the generated baseline is empty
      --memory-limit=MEMORY-LIMIT              Memory limit for analysis
      --xdebug                                 Allow running with XDebug for debugging purposes
      --fix                                    Launch PHPStan Pro
      --watch                                  Launch PHPStan Pro
      --pro                                    Launch PHPStan Pro
  -h, --help                                   Display help for the given command. When no command is given display help for the analyse command
  -q, --quiet                                  Do not output any message
  -V, --version                                Display this application version
      --ansi|--no-ansi                         Force (or disable --no-ansi) ANSI output
  -n, --no-interaction                         Do not ask any interactive question
  -v|vv|vvv, --verbose                         Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Installation on mega-linter Docker image
- Dockerfile commands :
# Parent descriptor install
RUN GITHUB_AUTH_TOKEN="$(cat /run/secrets/GITHUB_TOKEN)" \
    && export GITHUB_AUTH_TOKEN \
    && wget --tries=5 -q -O phive.phar https://phar.io/releases/phive.phar \
    && wget --tries=5 -q -O phive.phar.asc https://phar.io/releases/phive.phar.asc \
    && PHAR_KEY_ID="0x9D8A98B29B2D5D79" \
    && ( gpg --keyserver keyserver.pgp.com --recv-keys "$PHAR_KEY_ID" \
        || gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$PHAR_KEY_ID" \
        || gpg --keyserver pgp.mit.edu --recv-keys "$PHAR_KEY_ID" \
        || gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys "$PHAR_KEY_ID" ) \
    && gpg --verify phive.phar.asc phive.phar \
    && chmod +x phive.phar \
    && mv phive.phar /usr/local/bin/phive \
    && rm phive.phar.asc \
    && update-alternatives --install /usr/bin/php php /usr/bin/php81 110
# Linter install
FROM ghcr.io/phpstan/phpstan:latest-php8.1 as phpstan
COPY --link --from=phpstan /composer/vendor/phpstan/phpstan/phpstan.phar /usr/bin/phpstan
RUN chmod +x /usr/bin/phpstan