This is a plugin for Sublime Text which provides checkstyle reports using the following tools (all optional):
- PHP_CodeSniffer (
phpcs) - Linter (
php -l) - PHP Mess Detector (
phpmd)
You can also configure the plugin to fix the issues using either
- PHP Coding Standards Fixer (php-cs-fixer)
- PHP Code Beautifier (phpcbf) application
Requirements for this plugin, should you want all the options to work:
- PHP_CodeSniffer 3.5+
- PHPMD 2.8+
- PHP CS Fixer 2.6+
This plugin has been tested on:
- Mac OS X 10.8.2
- Ubuntu 11.10
- Windows 7
- Sublime Text 2
- Sublime Text 3
- Sublime Text 4
It may work with other versions, but we cannot confirm that.
Use Sublime Textβs Package Control (Tools -> Command Palette -> Package Control: Install Package -> Phpcs) to install this plugin. This is the recommended installation path.
Or
Simply checkout the git repo into "~/Library/Application Support/Sublime Text/Packages/ or the equivalent folder on Windows or Linux.
cd ~/Library/Application\ Support/Sublime\ Text/Packages/ git clone git://github.com/benmatselby/sublime-phpcs.git Phpcs
In both cases, you may need to then configure the following with the actual path to the application:
- "phpcs_php_path"
- "phpcs_executable_path"
- "phpmd_executable_path"
- "php_cs_fixer_executable_path"
They are optional for the plugin. The path needs to include the application such as /usr/local/bin/phpcs.
In order to get the path of the application (On a Mac/Linux based environment), you can use:
which phpcs which phpmd which php-cs-fixer which phpcbf
- Ability to run PHP_CodeSniffer
- Ability to run php -l on the open file
- Ability to run PHP Mess Detector on the open file
- Show cached results from PHP_CodeSniffer in open file
- Show errors in the Quick Panel
- Show errors in the Gutter
- Highlight the errors in the editor
- Show the error for a given line in the status bar
- Ability to specify the regular expression of the linter errors
- Ability to specify the location of the PHP_CodeSniffer application
- Ability to specify the location of the PHP Mess Detector application
- Ability to run the PHP Coding Standards Fixer tool which fixes most issues in your code when you want to follow the PHP coding standards as defined in the PSR-1 and PSR-2 documents
- Ability to run the PHP Code Beautifier tool which fixes most issues in your code when you want to follow PHP coding standards
Once you have right clicked on a file and selected "PHP CodeSniffer" > "Sniff this file..." you will get the output as shown below (depending on the settings you have defined):
You can also define the configuration for the following settings, be it for a project, user settings or the default settings:
show_debugβ Do you want the debug information to be sent to the console?extensions_to_executeβ Which filetypes do you want the plugin to execute for?extensions_to_blacklistβ Override the extensions_to_execute in case you have a sub extension such as twig.php etc.phpcs_execute_on_saveβ Do you want the code sniffer plugin to run on file save for php files?phpcs_show_errors_on_saveβ Do you want the errors to be displayed in quick_panel on save?phpcs_show_gutter_marksβ Do you want the errors to be displayed in the gutter?phpcs_outline_for_errorsβ Do you want the errors to be highlighted in the editor?phpcs_show_errors_in_statusβ Do you want the errors to be displayed in status bar when clicking on the line with error?phpcs_show_quick_panelβ Do you want the errors to be displayed in the quick panel?phpcs_php_prefix_pathβ Needed on windows for phar based applications. Also if you cannot make phar executable. Avoid if possiblephpcs_commands_to_php_prefixβ List of commands you want the php path to prefix. This would be useful, if you have some commands as a phar that cannot be run without the php prefix, and others using native command.phpcs_icon_scope_color- What colour to stylise the icon. This needs knowledge of theming of Sublime Test, as it uses scope colours from the theme to "tint" the dot icon. See here
phpcs_sniffer_runβ Do you want the PHPCS checker to run?phpcs_command_on_saveβ Do you want the command to execute on save?phpcs_executable_pathβ The path to the phpcs executable. If empty string, use PATH to find itphpcs_additional_argsβ This is the extra information you want to pass to the phpcs command. For example which "standard" you want to run, and if you want to show warnings or not
php_cs_fixer_on_saveβ Do you want to run the fixer on file save?php_cs_fixer_show_quick_panelβ Do you want the quick panel to display on execution?php_cs_fixer_executable_pathβ The path to the php-cs-fixer application.php_cs_fixer_additional_argsβ This is the extra information you want to pass to the php-cs-fixer command. For example which "fixers" you want to run
phpcbf_on_saveβ Do you want to run the fixer on file save?phpcbf_show_quick_panelβ Do you want the quick panel to display on execution?phpcbf_executable_pathβ The path to the phpcbf application.phpcbf_additional_argsβ This is the extra information you want to pass to the phpcbf command. For example which "standard" to use in order to fix the issues
phpcs_linter_runβ Do you want the PHP linter to run?phpcs_linter_command_on_saveβ Do you want the command to execute on save?phpcs_php_pathβ The path to the PHP executable. If empty string, use PATH to find itphpcs_linter_regexβ The regex for the PHP linter output
phpmd_runβ Do you want the PHPMD to run? Off by defaultphpmd_command_on_saveβ Do you want the command to execute on save?phpmd_executable_pathβ The path to the phpmd executable. If empty string, use PATH to find itphpmd_additional_argsβ This is the extra information you want to pass to the phpmd command. For example which "rulesets" you want to run
Your .project file should look something like this:
{
"folders": [{}],
"settings": {
"phpcs": {
"phpcs_additional_args": {
"--standard": "/path/to/.composer/vendor/drupal/coder/coder_sniffer/Drupal"
}
}
}
}Of course this is a example to apply Drupal code sniffer. This could be anything. Whatever you can have on this package settings it can be overwritten under the settings -> phpcs
- This seems to be an issue you may get with regards to wrapper scripts.
- Please make sure that the application/script you are referencing has the correct shebang line, as per GH-79
- Well, first of all you need to check that you have PHP_CodeSniffer, and if being used, the phpmd application.
- If you have these applications installed, then it sounds like those applications are not in your PATH, or cannot be found in your PATH by the Python runtime, so configure "phpcs_php_path", "phpcs_executable_path", "phpmd_executable_path" and "php_cs_fixer_executable_path" with the actual paths to those applications
- It sounds like your path settings are incorrect.
- You need to make sure that when you specifiy the path you include the entire path including the application
$ which phpcs /usr/local/bin/phpcs
- That entire output is the path you need in your configs.
If you have installed php-cs-fixer, phpmd or phpcs via homebrew then please make sure that you define the "_executable_path" option to the .phar application and not the wrapper script that is placed in your bin folder, as this will cause odd behaviour.
The following is a list of commands that you can bind to a keyboard shortcut:
- phpcs_fix_this_file
- phpcs_clear_sniffer_marks
- phpcs_goto_next_error
- phpcs_show_previous_errors
- phpcs_sniff_this_file
In order to achieve this you need to add the following to one of your key bindings settings file:
{ "keys": ["ctrl+super+t"], "command": "phpcs_clear_sniffer_marks" }To decide which "Fixer" to use, you can do:
{ "keys": ["super+k", "super+f"], "command": "phpcs_fix_this_file", "args": {"tool": "CodeBeautifier"}},or
{ "keys": ["super+k", "super+f"], "command": "phpcs_fix_this_file", "args": {"tool": "Fixer"}},You can then change the ctrl+super+t combination to something of your choosing.