How to auto format PHP code curly braces to new lines in VS Code
Asked Answered
D

3

5

I'm currently using VS Code's latest version 1.41.1 (at the time of writing).

I've installed PHP CS Fixer to auto-format my code. However there's a behavious that I don't like. It always formats the code like this:

if (condition) {
    // code...
} else {
    // code
}

But this is not giving me good readability.

I'd like to achieve this:

if (condition)
{
    // code...
}
else
{
    // code
}

Is there any extentsion that supports this code formatting for PHP in VS Code? Or is there any option in PHP CS Fixer to skip formatting these curly brackets? Any other otpions?

Dow answered 16/1, 2020 at 12:47 Comment(2)
let's say this is highly debatable. There is an option to pass a config file with rules to your extension. Maybe there is a rule here that would do what you are looking for.Penstock
Also, you don't need php-cs to format code in Visual Studio Code - just mark the code you want to format, CTRL+K + CTRL+F. But please just use PSR2 like everyone else ;)Restful
D
6

Based on @Nicolas's comment I was able to make it work in 2 steps.

  1. I had to create a file in the root of my project with a name of .php_cs
  2. Add this block of code to the file:

    <?php
    
    return PhpCsFixer\Config::create()
    ->setRules(array(
        'braces' => array(
            'position_after_anonymous_constructs' => 'next',
            'position_after_control_structures' => 'next',
        )
    ));
    

All done and works like a charm. Thanks for the help @Nicolas!

Dow answered 16/1, 2020 at 13:23 Comment(1)
Glad i could help !Penstock
P
1

Now days:

'control_structure_braces' => true,
'control_structure_continuation_position' => [
    'position' => 'next_line'
],
Possessive answered 27/4, 2023 at 9:9 Comment(0)
D
0

Was looking for the same thing. I tried the (accepted) answer Radical_activity gave, but that didn't work for me. Found this another snippets here:

https://mcmap.net/q/1134478/-php-cs-fixer-keep-brace-on-the-same-line-of-function-declaration

Snippet:

<?php

$finder = PhpCsFixer\Finder::create()
    //->exclude('somedir')
    //->notPath('src/Symfony/Component/Translation/Tests/fixtures/resources.php'
    ->in(__DIR__)
;

return PhpCsFixer\Config::create()
    ->setRules([
        '@PSR2' => true,
        'strict_param' => false,
        'array_syntax' => ['syntax' => 'long'],
        'braces' => [
            'allow_single_line_closure' => true, 
            'position_after_functions_and_oop_constructs' => 'same'],
    ])
    ->setFinder($finder)
;

From which you also need to create a .php_cs file in your repository. That worked for me!

Descombes answered 11/10, 2020 at 20:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.