- Star (400)
You must be signed in to star a gist - Fork (97)
You must be signed in to fork a gist
-
-
Save laravel-shift/cab527923ed2a109dda047b97d53c200 to your computer and use it in GitHub Desktop.
| <?php | |
| use PhpCsFixer\Config; | |
| use PhpCsFixer\Finder; | |
| $rules = [ | |
| 'array_indentation' => true, | |
| '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' => [ | |
| 'const' => 'one', | |
| 'method' => 'one', | |
| 'property' => 'one', | |
| 'trait_import' => 'none', | |
| ], | |
| ], | |
| 'class_definition' => [ | |
| 'multi_line_extends_each_single_line' => true, | |
| 'single_item_single_line' => true, | |
| 'single_line' => true, | |
| ], | |
| 'concat_space' => [ | |
| 'spacing' => 'none', | |
| ], | |
| 'constant_case' => ['case' => 'lower'], | |
| 'declare_equal_normalize' => true, | |
| 'elseif' => true, | |
| 'encoding' => true, | |
| 'full_opening_tag' => true, | |
| 'fully_qualified_strict_types' => true, // added by Shift | |
| 'function_declaration' => true, | |
| 'function_typehint_space' => true, | |
| 'general_phpdoc_tag_rename' => 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, | |
| 'lowercase_keywords' => true, | |
| 'lowercase_static_reference' => true, // added from Symfony | |
| 'magic_method_casing' => true, // added from Symfony | |
| 'magic_constant_casing' => true, | |
| 'method_argument_space' => [ | |
| 'on_multiline' => 'ignore', | |
| ], | |
| 'multiline_whitespace_before_semicolons' => [ | |
| 'strategy' => 'no_multi_line', | |
| ], | |
| 'native_function_casing' => true, | |
| 'no_alias_functions' => true, | |
| 'no_extra_blank_lines' => [ | |
| 'tokens' => [ | |
| 'extra', | |
| 'throw', | |
| 'use', | |
| ], | |
| ], | |
| '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, | |
| 'no_short_bool_cast' => true, | |
| 'no_singleline_whitespace_before_semicolons' => true, | |
| 'no_spaces_after_function_name' => true, | |
| 'no_spaces_around_offset' => [ | |
| 'positions' => ['inside', 'outside'], | |
| ], | |
| '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' => [ | |
| 'statements' => ['break', 'clone', 'continue', 'echo_print', 'return', 'switch_case', 'yield'], | |
| ], | |
| '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' => true, | |
| 'object_operator_without_whitespace' => true, | |
| 'ordered_imports' => ['sort_algorithm' => 'alpha'], | |
| 'psr_autoloading' => true, | |
| 'phpdoc_indent' => true, | |
| 'phpdoc_inline_tag_normalizer' => 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' => false, | |
| 'phpdoc_to_comment' => false, // override to preserve user preference | |
| 'phpdoc_tag_type' => true, | |
| 'phpdoc_trim' => true, | |
| 'phpdoc_types' => true, | |
| 'phpdoc_var_without_name' => true, | |
| 'self_accessor' => true, | |
| 'short_scalar_cast' => true, | |
| 'simplified_null_return' => false, // disabled as "risky" | |
| 'single_blank_line_at_eof' => true, | |
| 'single_blank_line_before_namespace' => true, | |
| 'single_class_element_per_statement' => [ | |
| 'elements' => ['const', 'property'], | |
| ], | |
| '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' => ['elements' => ['arrays']], | |
| 'trim_array_spaces' => true, | |
| 'unary_operator_spaces' => true, | |
| 'visibility_required' => [ | |
| 'elements' => ['method', 'property'], | |
| ], | |
| 'whitespace_after_comma_in_array' => 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); | |
| return (new Config) | |
| ->setFinder($finder) | |
| ->setRules($rules) | |
| ->setRiskyAllowed(true) | |
| ->setUsingCache(true); |
sort order, when using "use function" imports
'ordered_imports' => [
'sort_algorithm' => 'alpha',
'imports_order' => ['const', 'class', 'function'],
],
?
https://mlocati.github.io/php-cs-fixer-configurator/#version:3.3|fixer:ordered_imports
@chrillep what are you trying to say?
Is there a way to get this:
$response ->assertJson(fn (AssertableJson $json) => $json->has(3) ->first(fn ($json) => $json->where('id', 1) ->where('name', 'Victoria Faith') ->missing('password') ->etc() ) );(Get it from here: https://laravel.com/docs/8.x/http-tests#asserting-against-json-collections)
instead of
$response ->assertJson(fn (AssertableJson $json) =>$json->has(3) ->first(fn ($json) => $json->where('id', 1) ->where('name', 'Victoria Faith') ->missing('password') ->etc() ) );If I'm removing "no_multiline_whitespace_around_double_arrow" it will not fix arrays anymore :-(
Can someone help me? :-)
trivial, but maybe this would be an addition:
'return_type_declaration' => ['space_before' => 'none'],that checks/fixes a return type to show as
function foo(): T... and not, as
function foo():T...or
function foo() : TAs per https://www.php-fig.org/psr/psr-12/#45-method-and-function-arguments + https://docs.styleci.io/fixers#return_type_declaration. Docs: https://cs.symfony.com/doc/rules/function_notation/return_type_declaration.html
https://github.com/laravel/pint
https://laravel-news.com/laravel-pint
https://github.com/laravel/pint/blob/6e3ed122b88668533ab28a621f856999f1cb8b35/resources/presets/laravel.php
wonder if we can just export the php-cs-config from pint until IDE's support it
@chrillep, yes, Pint used this Gist as a base, but the community has since tweaked some of the rules (like one @epalmans mentioned). So if you aren't using Laravel Pint, but PHP CS Fixer directly, you may want to pull from their ruleset direction - as Shift will likely start using Pint internally.
I don't want that space in between! and empty for example, how to disable.
set/override the not_operator_with_space rule (https://cs.symfony.com/doc/rules/operator/not_operator_with_space.html)
@epalmans thanks!
I don’t think php-cs-fixer will do that, as it’s not necessarily a code-style issue. A static analyzer will pick up on such thing though (like PHPStan or Psalm)
@epalmans thanks!
@chrillep, yes, Pint used this Gist as a base, but the community has since tweaked some of the rules (like one @epalmans mentioned). So if you aren't using Laravel Pint, but PHP CS Fixer directly, you may want to pull from their ruleset direction - as Shift will likely start using Pint internally.
quite right - but needs some help :)
PHP-CS-Fixer/PHP-CS-Fixer#6441 (comment)
Fixed typo causing error and replaced deprecated rules:
<?php use PhpCsFixer\Config; use PhpCsFixer\Finder; $rules = [ 'array_syntax' => ['syntax' => 'short'], 'no_unused_imports' => true, 'blank_line_after_namespace' => true, 'blank_line_after_opening_tag' => true, 'cast_spaces' => true, 'concat_space' => [ 'spacing' => 'none', ], 'declare_equal_normalize' => true, 'elseif' => true, 'encoding' => true, 'full_opening_tag' => true, 'fully_qualified_strict_types' => true, // added by Shift 'function_declaration' => 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, 'lowercase_keywords' => true, 'lowercase_static_reference' => true, // added from Symfony 'magic_method_casing' => true, // added from Symfony 'magic_constant_casing' => true, 'method_argument_space' => true, 'native_function_casing' => true, 'no_alias_functions' => true, 'no_extra_blank_lines' => [ 'tokens' => [ 'extra', 'throw', '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_inside_parenthesis' => true, 'no_trailing_comma_in_singleline' => true, // updated from deprecated rules 'no_trailing_whitespace' => true, 'no_trailing_whitespace_in_comment' => 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' => true, 'object_operator_without_whitespace' => true, 'phpdoc_indent' => 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, 'self_accessor' => true, 'short_scalar_cast' => true, 'simplified_null_return' => false, // disabled by Shift 'single_blank_line_at_eof' => true, 'blank_lines_before_namespace' => true, // updated from deprecated rule '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, 'trim_array_spaces' => true, 'unary_operator_spaces' => true, 'whitespace_after_comma_in_array' => true, // php-cs-fixer 3: Renamed rules 'constant_case' => ['case' => 'lower'], 'general_phpdoc_tag_rename' => true, 'phpdoc_inline_tag_normalizer' => true, 'phpdoc_tag_type' => true, 'psr_autoloading' => true, 'trailing_comma_in_multiline' => ['elements' => ['arrays']], // php-cs-fixer 3: Changed options 'binary_operator_spaces' => [ 'default' => 'single_space', 'operators' => ['=>' => null], ], 'blank_line_before_statement' => [ 'statements' => ['return'], ], 'class_attributes_separation' => [ 'elements' => [ 'const' => 'one', 'method' => 'one', 'property' => 'one', 'trait_import' => 'one', // updated from deprecated rule ], ], 'class_definition' => [ 'multi_line_extends_each_single_line' => true, 'single_item_single_line' => true, 'single_line' => true, ], 'ordered_imports' => [ 'sort_algorithm' => 'alpha', ], // php-cs-fixer 3: Removed rootless options (*) 'no_unneeded_control_parentheses' => [ 'statements' => ['break', 'clone', 'continue', 'echo_print', 'return', 'switch_case', 'yield'], ], 'no_spaces_around_offset' => [ 'positions' => ['inside', 'outside'], ], 'visibility_required' => [ 'elements' => ['property', 'method', 'const'], ], ]; $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); return (new Config()) ->setFinder($finder) ->setRules($rules) ->setRiskyAllowed(true) ->setUsingCache(true); Detected deprecations in use:
- Rule "braces" is deprecated. Use "single_space_around_construct", "control_structure_braces", "control_structure_continuation_position", "declare_parentheses", "no_multiple_statements_per_line", "curly_braces_position", "statement_indentation" and "no_extra_blank_lines" instead.
- Rule "function_typehint_space" is deprecated. Use "type_declaration_spaces" instead.
- Rule "no_spaces_inside_parenthesis" is deprecated. Use "spaces_inside_parentheses" instead.
- Rule "no_trailing_comma_in_list_call" is deprecated. Use "no_trailing_comma_in_singleline" instead.
- Rule "no_trailing_comma_in_singleline_array" is deprecated. Use "no_trailing_comma_in_singleline" instead.
- Rule "single_blank_line_before_namespace" is deprecated. Use "blank_lines_before_namespace" instead.
This what I use with Laravel 10.x
<?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'] ], 'single_space_around_construct' => true, 'control_structure_braces' => true, 'control_structure_continuation_position' => true, 'declare_parentheses' => true, 'statement_indentation' => true, 'no_multiple_statements_per_line' => true, 'cast_spaces' => true, 'class_attributes_separation' => [ 'elements' => [ 'method' => 'one', 'trait_import' => 'none' ] ], 'declare_equal_normalize' => true, 'elseif' => true, 'encoding' => true, 'full_opening_tag' => true, 'fully_qualified_strict_types' => true, 'function_declaration' => true, 'spaces_inside_parentheses' => 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' ] ], '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, 'spaces_inside_parentheses' => true, 'no_trailing_comma_in_singleline' => 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, 'blank_lines_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);A reminder, this Gist is no longer being maintained as Laravel now has a first-party formatter - Laravel Pint. It is constantly updated to match their code style. I suggest using it. If for some reason you want to use PHP CS Fixer directly, I suggest copying Pint's base ruleset as a start.


@milanchheda, this is probably the default setting now. You may want to try setting it to
falseor looking at other options which deal with quotes.