phpcs
phpcs documentation
- Version in MegaLinter: 3.9.0
- Visit Official Web Site
- See How to configure phpcs rules
- If custom
phpcs.xml
config file isn't found, phpcs.xml will be used
- If custom
- See How to disable phpcs rules in files
- See How to ignore files and directories with phpcs
- See Index of problems detected by phpcs
Configuration in MegaLinter
- Enable phpcs by adding
PHP_PHPCS
in ENABLE_LINTERS variable - Disable phpcs by adding
PHP_PHPCS
in DISABLE_LINTERS variable
Variable | Description | Default value |
---|---|---|
PHP_PHPCS_ARGUMENTS | User custom arguments to add in linter CLI call Ex: -s --foo "bar" |
|
PHP_PHPCS_COMMAND_REMOVE_ARGUMENTS | User custom arguments to remove from command line before calling the linter Ex: -s --foo "bar" |
|
PHP_PHPCS_FILTER_REGEX_INCLUDE | Custom regex including filter Ex: (src\|lib) |
Include every file |
PHP_PHPCS_FILTER_REGEX_EXCLUDE | Custom regex excluding filter Ex: (test\|examples) |
Exclude no file |
PHP_PHPCS_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_PHPCS_FILE_EXTENSIONS | Allowed file extensions. "*" matches any extension, "" matches empty extension. Empty list excludes all filesEx: [".py", ""] |
[".php"] |
PHP_PHPCS_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_PHPCS_PRE_COMMANDS | List of bash commands to run before the linter | None |
PHP_PHPCS_POST_COMMANDS | List of bash commands to run after the linter | None |
PHP_PHPCS_UNSECURED_ENV_VARIABLES | List of env variables explicitly not filtered before calling PHP_PHPCS and its pre/post commands | None |
PHP_PHPCS_CONFIG_FILE | phpcs configuration file nameUse LINTER_DEFAULT to let the linter find it |
phpcs.xml |
PHP_PHPCS_RULES_PATH | Path where to find linter configuration file | Workspace folder, then MegaLinter default rules |
PHP_PHPCS_DISABLE_ERRORS | Run linter but consider errors as warnings | false |
PHP_PHPCS_DISABLE_ERRORS_IF_LESS_THAN | Maximum number of errors allowed | 0 |
PHP_PHPCS_CLI_EXECUTABLE | Override CLI executable | ['phpcs'] |
IDE Integration
Use phpcs in your favorite IDE to catch errors before MegaLinter !
MegaLinter Flavours
This linter is available in the following flavours
Flavor | Description | Embedded linters | Info | |
---|---|---|---|---|
all | Default MegaLinter Flavor | 121 | ||
cupcake | MegaLinter for the most commonly used languages | 84 | ||
php | Optimized for PHP based projects | 54 |
Behind the scenes
How are identified applicable files
- File extensions:
.php
How the linting is performed
- phpcs is called once with the list of files as arguments (
list_of_files
CLI lint mode)
Example calls
phpcs myfile.php
phpcs --standard=phpcs.xml myfile.php
phpcs --standard=phpcs.xml mydir/ myfile.php
Help content
Usage: phpcs [-nwlsaepqvi] [-d key[=value]] [--colors] [--no-colors]
[--cache[=<cacheFile>]] [--no-cache] [--tab-width=<tabWidth>]
[--report=<report>] [--report-file=<reportFile>] [--report-<report>=<reportFile>]
[--report-width=<reportWidth>] [--basepath=<basepath>] [--bootstrap=<bootstrap>]
[--severity=<severity>] [--error-severity=<severity>] [--warning-severity=<severity>]
[--runtime-set key value] [--config-set key value] [--config-delete key] [--config-show]
[--standard=<standard>] [--sniffs=<sniffs>] [--exclude=<sniffs>]
[--encoding=<encoding>] [--parallel=<processes>] [--generator=<generator>]
[--extensions=<extensions>] [--ignore=<patterns>] [--ignore-annotations]
[--stdin-path=<stdinPath>] [--file-list=<fileList>] [--filter=<filter>] <file> - ...
- Check STDIN instead of local files and directories
-n Do not print warnings (shortcut for --warning-severity=0)
-w Print both warnings and errors (this is the default)
-l Local directory only, no recursion
-s Show error codes in all reports
-a Run interactively
-e Explain a standard by showing the sniffs it includes
-p Show progress of the run
-q Quiet mode; disables progress and verbose output
-m Stop error messages from being recorded
(saves a lot of memory, but stops many reports from being used)
-v Print processed files
-vv Print ruleset and token output
-vvv Print sniff processing information
-i Show a list of installed coding standards
-d Set the [key] php.ini value to [value] or [true] if value is omitted
--help Print this help message
--version Print version information
--colors Use colors in output
--no-colors Do not use colors in output (this is the default)
--cache Cache results between runs
--no-cache Do not cache results between runs (this is the default)
--ignore-annotations Ignore all phpcs: annotations in code comments
<cacheFile> Use a specific file for caching (uses a temporary file by default)
<basepath> A path to strip from the front of file paths inside reports
<bootstrap> A comma separated list of files to run before processing begins
<encoding> The encoding of the files being checked (default is utf-8)
<extensions> A comma separated list of file extensions to check
The type of the file can be specified using: ext/type
e.g., module/php,es/js
<file> One or more files and/or directories to check
<fileList> A file containing a list of files and/or directories to check (one per line)
<filter> Use either the "GitModified" or "GitStaged" filter,
or specify the path to a custom filter class
<generator> Use either the "HTML", "Markdown" or "Text" generator
(forces documentation generation instead of checking)
<patterns> A comma separated list of patterns to ignore files and directories
<processes> How many files should be checked simultaneously (default is 1)
<report> Print either the "full", "xml", "checkstyle", "csv"
"json", "junit", "emacs", "source", "summary", "diff"
"svnblame", "gitblame", "hgblame", "notifysend" or "performance",
report or specify the path to a custom report class
(the "full" report is printed by default)
<reportFile> Write the report to the specified file path
<reportWidth> How many columns wide screen reports should be printed
or set to "auto" to use current screen width, where supported
<severity> The minimum severity required to display an error or warning
<sniffs> A comma separated list of sniff codes to include or exclude from checking
(all sniffs must be part of the specified standard)
<standard> The name or path of the coding standard to use
<stdinPath> If processing STDIN, the file path that STDIN will be processed as
<tabWidth> The number of spaces each tab represents
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="0x6AF725270AB81E04D79442549D8A98B29B2D5D79" \
&& ( gpg --keyserver hkps://keys.openpgp.org --recv-keys "$PHAR_KEY_ID" \
|| gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys "$PHAR_KEY_ID" \
|| gpg --keyserver keyserver.pgp.com --recv-keys "$PHAR_KEY_ID" \
|| gpg --keyserver pgp.mit.edu --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
RUN GITHUB_AUTH_TOKEN="$(cat /run/secrets/GITHUB_TOKEN)" && export GITHUB_AUTH_TOKEN && phive --no-progress install phpcs -g --trust-gpg-keys 31C7E470E2138192,95DE904AB800754A11D80B605E6DDE998AB73B8E