Hi, developers. 😄
I will teach you how to configure php-cs-fixer for laravel in the visual code editor.
Often, when I write PHP code, I can make mistakes, such as lack of spaces, structure of conditions, etc. 😅
What is PHP-CS-Fixer?
PHP-CS-Fixer is a standard for ordened your code and apply code style guide PSR for PHP.
PHP-CS-Fixer It is a tool that helps to organize the application code, following the PSR standards.
Installation PHP-CS-Fixer.
$ brew install php-cs-fixer
Installation VSCode
brew update
brew tap caskroom/cask
brew cask search visual-studio-code
Configuration
- Open VSCode editor
- Add extension php cs fixer to VSCode
- Add to
settings.json
file
{
"editor.formatOnSave": true,
"php-cs-fixer.onsave": true,
"php-cs-fixer.executablePath": "${extensionPath}/php-cs-fixer.phar",
"php-cs-fixer.config": "~/.vscode/.php_cs;",
}
- Add config file
.php_cs
```
$ cd ~/.vscode
$ touch .php_cs
- Open config file `.php_cs` and add PHPCSFixer configuration.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php
return PhpCsFixer\Config::create()
->setRules(array(
'@PSR2' => true,
'array_indentation' => true,
'array_syntax' => array('syntax' => 'short'),
'combine_consecutive_unsets' => true,
'method_separation' => true,
'no_multiline_whitespace_before_semicolons' => true,
'single_quote' => true,
'binary_operator_spaces' => array(
'align_double_arrow' => false,
'align_equals' => false,
),
// 'blank_line_after_opening_tag' => true,
// 'blank_line_before_return' => true,
'braces' => array(
'allow_single_line_closure' => true,
),
// 'cast_spaces' => true,
// 'class_definition' => array('singleLine' => true),
'concat_space' => array('spacing' => 'none'),
'declare_equal_normalize' => true,
'function_typehint_space' => true,
'hash_to_slash_comment' => true,
'include' => true,
'lowercase_cast' => true,
// 'native_function_casing' => true,
// 'new_with_braces' => true,
// 'no_blank_lines_after_class_opening' => true,
// 'no_blank_lines_after_phpdoc' => true,
// 'no_empty_comment' => true,
// 'no_empty_phpdoc' => true,
// 'no_empty_statement' => true,
'no_extra_consecutive_blank_lines' => array(
'curly_brace_block',
'extra',
'parenthesis_brace_block',
'square_brace_block',
'throw',
'use',
),
// 'no_leading_import_slash' => true,
// 'no_leading_namespace_whitespace' => true,
// 'no_mixed_echo_print' => array('use' => 'echo'),
'no_multiline_whitespace_around_double_arrow' => true,
// 'no_short_bool_cast' => true,
// 'no_singleline_whitespace_before_semicolons' => true,
'no_spaces_around_offset' => true,
// 'no_trailing_comma_in_list_call' => true,
// 'no_trailing_comma_in_singleline_array' => true,
// 'no_unneeded_control_parentheses' => true,
'no_unused_imports' => true,
'ordered_imports' => array('sort_algorithm' => 'alpha'),
'no_whitespace_before_comma_in_array' => true,
'no_whitespace_in_blank_line' => true,
// 'normalize_index_brace' => true,
'object_operator_without_whitespace' => true,
// 'php_unit_fqcn_annotation' => true,
//'phpdoc_align' => true,
// 'phpdoc_annotation_without_dot' => true,
// 'phpdoc_indent' => true,
// 'phpdoc_inline_tag' => true,
// 'phpdoc_no_access' => true,
// 'phpdoc_no_alias_tag' => true,
// 'phpdoc_no_empty_return' => true,
// 'phpdoc_no_package' => true,
// 'phpdoc_no_useless_inheritdoc' => true,
'phpdoc_order' => false,
// 'phpdoc_return_self_reference' => true,
// 'phpdoc_scalar' => true,
// 'phpdoc_separation' => 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,
// 'pre_increment' => true,
'return_type_declaration' => array('space_before' => 'one'),
// 'self_accessor' => true,
// 'short_scalar_cast' => true,
'single_blank_line_before_namespace' => true,
// 'single_class_element_per_statement' => true,
// 'space_after_semicolon' => true,
// 'standardize_not_equals' => true,
'ternary_operator_spaces' => true,
// 'trailing_comma_in_multiline_array' => true,
'trim_array_spaces' => true,
'unary_operator_spaces' => true,
'whitespace_after_comma_in_array' => true,
'function_declaration' => true,
'indentation_type' => true,
'no_spaces_after_function_name' => true,
'no_spaces_inside_parenthesis' => true,
'not_operator_with_successor_space' => true,
))
//->setIndent("\t")
->setLineEnding("\n")
;
Ok, The configuration that I use to work PHP-CS-Fixer with Laravel applications is optional. :smile:
I will begin to explain the changes that I have made in the configuration file .php_cs
.
concat_space:
'concat_space' => array('spacing' => 'none'),
Example
$this->load(__DIR__.'/Commands');
</code></pre></div>
<p>Spacing to apply around concatenation operator, I like it with no space.</p>
<h4>
<a name="unsend-imports" href="#unsend-imports">
</a>
unsend imports:
</h4>
<p><code>'no_unused_imports' => true,</code></p>
<p>Remove imports that are not used in a class.</p>
<h4>
<a name="orderedimports" href="#orderedimports">
</a>
ordered_imports
</h4>
<p><code>'ordered_imports' => array('sort_algorithm' => 'alpha'),</code></p>
<p>Currently in Laravel 6, the order of imports was included alphabetically, Here the <a href="https://github.com/laravel/framework/pull/29933">Pull Request</a> of the discussion for this change. :grimacing:</p>
<p>Personally, I liked the order by length. :smile:</p>
<h4>
<a name="returntypedeclaration" href="#returntypedeclaration">
</a>
return_type_declaration
</h4>
<p><code>'return_type_declaration' => array('space_before' => 'one'),</code></p>
<p>There should be one or no space before colon, and one space after it in return type declarations, according to configuration.</p>
<p>example of my configuration.</p>
<div class="highlight"><pre class="highlight php"><code>
<span class="cd">/**
* Check if the user is a admin.
*
* @return bool
*/</span>
<span class="k">public</span> <span class="k">function</span> <span class="n">isAdmin</span><span class="p">()</span> <span class="p">:</span> <span class="kt">bool</span>
<span class="p">{</span>
<span class="k">return</span> <span class="nv">$this</span><span class="o">-></span><span class="n">roles</span><span class="o">-></span><span class="nf">contains</span><span class="p">(</span><span class="s1">'name'</span><span class="p">,</span> <span class="nc">Role</span><span class="o">::</span><span class="no">ADMIN</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>
<p>Add a space before the colon.</p>
<h4>
<a name="notoperatorwithsuccessorspace" href="#notoperatorwithsuccessorspace">
</a>
not_operator_with_successor_space
</h4>
<p><code>'not_operator_with_successor_space' => true,</code></p>
<p>Logical NOT operators (!) should have one trailing whitespace.</p>
<p>Example.</p>
<p>Input</p>
<div class="highlight"><pre class="highlight php"><code>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nv">$foo</span><span class="p">)</span> <span class="p">{</span>
<span class="k">echo</span> <span class="s2">"Help!"</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<p>Output</p>
<div class="highlight"><pre class="highlight php"><code>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span> <span class="nv">$foo</span><span class="p">)</span> <span class="p">{</span>
<span class="k">echo</span> <span class="s2">"Help!"</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div><h1>
<a name="conclusion" href="#conclusion">
</a>
Conclusion.
</h1>
<p><strong>PHP-CS-Fixer</strong> is a very useful tool when writing PHP code in Laravel applications. :nerd_face: </p>
<p>I hope you like this post, if you have questions about me you can write a comment below or send a message to my twitter. :wave:</p>
<p>Thanks.</p>
Top comments (3)
Nice!!
Thanks Dude!
Great Article.... Thanks, it helped me understand some stuff around.