Setup PHP-CS-Fixer for Laravel Project

When you are working on a small project or especially big projects with multiple team members then you need to follow proper coding standards in order to maintain the code stability.

Laravel follows the PSR-2 coding standard and the PSR-4 autoloading …


This content originally appeared on DEV Community and was authored by Ibrar Hussain

When you are working on a small project or especially big projects with multiple team members then you need to follow proper coding standards in order to maintain the code stability.

Laravel follows the PSR-2 coding standard and the PSR-4 autoloading standard. To maintain the same coding standard like PSR-2 for your project(s) there are multiple packages available that can help you fix your code to follow standards.

In this article we will use PHP Coding Standards Fixer to setup it on a Laravel project level.

Following are the steps:

Step # 1

Go to your project root folder and run the following command:

composer require friendsofphp/php-cs-fixer --dev

Step # 2

In your project root, create a new file named .php-cs-fixer.php and add the following code and then save it.

<?php

use PhpCsFixer\Config;
use PhpCsFixer\Finder;

$rules = [
    'array_syntax' => ['syntax' => 'short'],
    'binary_operator_spaces' => [
        'default' => 'single_space',
        'operators' => ['=>' => null]
    ],
    'blank_line_after_namespace' => true,
    'blank_line_after_opening_tag' => true,
    'blank_line_before_statement' => [
        'statements' => ['return']
    ],
    'braces' => true,
    'cast_spaces' => true,
    'class_attributes_separation' => [
        'elements' => ['method' => 'one']
    ],
    'class_definition' => true,
    'concat_space' => [
        'spacing' => 'one'
    ],
    'declare_equal_normalize' => true,
    'elseif' => true,
    'encoding' => true,
    'full_opening_tag' => true,
    'fully_qualified_strict_types' => true,
    'function_declaration' => true,
    'function_typehint_space' => true,
    'heredoc_to_nowdoc' => true,
    'include' => true,
    'increment_style' => ['style' => 'post'],
    'indentation_type' => true,
    'linebreak_after_opening_tag' => true,
    'line_ending' => true,
    'lowercase_cast' => true,
    'constant_case' => true,
    'lowercase_keywords' => true,
    'lowercase_static_reference' => true,    
    'magic_method_casing' => true,
    'magic_constant_casing' => true,
    'method_argument_space' => true,
    'native_function_casing' => true,
    'no_alias_functions' => true,
    'no_extra_blank_lines' => [
        'tokens' => [
            'extra',
            'throw',
            'use',
            'use_trait',
        ]
    ],
    'no_blank_lines_after_class_opening' => true,
    'no_blank_lines_after_phpdoc' => true,
    'no_closing_tag' => true,
    'no_empty_phpdoc' => true,
    'no_empty_statement' => true,
    'no_leading_import_slash' => true,
    'no_leading_namespace_whitespace' => true,
    'no_mixed_echo_print' => [
        'use' => 'echo'
    ],
    'no_multiline_whitespace_around_double_arrow' => true,
    'multiline_whitespace_before_semicolons' => [
        'strategy' => 'no_multi_line'
    ],
    'no_short_bool_cast' => true,
    'no_singleline_whitespace_before_semicolons' => true,
    'no_spaces_after_function_name' => true,
    'no_spaces_around_offset' => true,
    'no_spaces_inside_parenthesis' => true,
    'no_trailing_comma_in_list_call' => true,
    'no_trailing_comma_in_singleline_array' => true,
    'no_trailing_whitespace' => true,
    'no_trailing_whitespace_in_comment' => true,
    'no_unneeded_control_parentheses' => true,
    'no_unreachable_default_argument_value' => true,
    'no_useless_return' => true,
    'no_whitespace_before_comma_in_array' => true,
    'no_whitespace_in_blank_line' => true,
    'normalize_index_brace' => true,
    'not_operator_with_successor_space' => false,
    'object_operator_without_whitespace' => true,
    'ordered_imports' => ['sort_algorithm' => 'alpha'],
    'phpdoc_indent' => true,
    'general_phpdoc_tag_rename' => true,
    'phpdoc_inline_tag_normalizer' => true,
    'phpdoc_tag_type' => true,
    'phpdoc_no_access' => true,
    'phpdoc_no_package' => true,
    'phpdoc_no_useless_inheritdoc' => true,
    'phpdoc_scalar' => true,
    'phpdoc_single_line_var_spacing' => true,
    'phpdoc_summary' => true,
    'phpdoc_to_comment' => true,
    'phpdoc_trim' => true,
    'phpdoc_types' => true,
    'phpdoc_var_without_name' => true,
    'psr_autoloading' => true,
    'self_accessor' => true,
    'short_scalar_cast' => true,
    'simplified_null_return' => false,
    'single_blank_line_at_eof' => true,
    'single_blank_line_before_namespace' => true,
    'single_class_element_per_statement' => true,
    'single_import_per_statement' => true,
    'single_line_after_imports' => true,
    'single_line_comment_style' => [
        'comment_types' => ['hash']
    ],
    'single_quote' => true,
    'space_after_semicolon' => true,
    'standardize_not_equals' => true,
    'switch_case_semicolon_to_colon' => true,
    'switch_case_space' => true,
    'ternary_operator_spaces' => true,
    'trailing_comma_in_multiline' => true,
    'trim_array_spaces' => true,
    'unary_operator_spaces' => true,
    'visibility_required' => [
        'elements' => ['method', 'property']
    ],
    'whitespace_after_comma_in_array' => true,
    'no_unused_imports' => true,
];


$finder = Finder::create()
    ->in([
        __DIR__ . '/app',
        __DIR__ . '/config',
        __DIR__ . '/database',
        __DIR__ . '/resources',
        __DIR__ . '/routes',
        __DIR__ . '/tests',
    ])
    ->name('*.php')
    ->notName('*.blade.php')
    ->ignoreDotFiles(true)
    ->ignoreVCS(true);

$config = new Config();
return $config->setFinder($finder)
    ->setRules($rules)
    ->setRiskyAllowed(true)
    ->setUsingCache(true);

This file contains local configuration that will be used instead of project configurations. It will let you configure rules, the files and directories that need to be analysed.

Feel free to change the above file to suit your needs.

Step # 3

Open composer.json file and add the following lines to the script section:

"sniff": [
     "./vendor/bin/php-cs-fixer fix -vvv --dry-run --show-progress=dots"
],
"lint": [
    "./vendor/bin/php-cs-fixer fix -vvv --show-progress=dots"
],

With this we have added two scripts that we can run with composer command:

  • composer sniff
    This command is used for dry run in order to show you all the files that needs to be fixed without fixing them.

  • composer lint
    This command will try to auto fix your code and will show you the summary at the end.

Following are the some useful links:

If you want to install PHP Coding Standards Fixer in your favourite editor then following dedicated plugins are available:


This content originally appeared on DEV Community and was authored by Ibrar Hussain


Print Share Comment Cite Upload Translate Updates
APA

Ibrar Hussain | Sciencx (2021-07-23T22:45:12+00:00) Setup PHP-CS-Fixer for Laravel Project. Retrieved from https://www.scien.cx/2021/07/23/setup-php-cs-fixer-for-laravel-project/

MLA
" » Setup PHP-CS-Fixer for Laravel Project." Ibrar Hussain | Sciencx - Friday July 23, 2021, https://www.scien.cx/2021/07/23/setup-php-cs-fixer-for-laravel-project/
HARVARD
Ibrar Hussain | Sciencx Friday July 23, 2021 » Setup PHP-CS-Fixer for Laravel Project., viewed ,<https://www.scien.cx/2021/07/23/setup-php-cs-fixer-for-laravel-project/>
VANCOUVER
Ibrar Hussain | Sciencx - » Setup PHP-CS-Fixer for Laravel Project. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/07/23/setup-php-cs-fixer-for-laravel-project/
CHICAGO
" » Setup PHP-CS-Fixer for Laravel Project." Ibrar Hussain | Sciencx - Accessed . https://www.scien.cx/2021/07/23/setup-php-cs-fixer-for-laravel-project/
IEEE
" » Setup PHP-CS-Fixer for Laravel Project." Ibrar Hussain | Sciencx [Online]. Available: https://www.scien.cx/2021/07/23/setup-php-cs-fixer-for-laravel-project/. [Accessed: ]
rf:citation
» Setup PHP-CS-Fixer for Laravel Project | Ibrar Hussain | Sciencx | https://www.scien.cx/2021/07/23/setup-php-cs-fixer-for-laravel-project/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.