sublimetext-codeformatter icon indicating copy to clipboard operation
sublimetext-codeformatter copied to clipboard

Wrong indents with multilevel switch

Open SylwesterZarebski opened this issue 8 years ago • 4 comments

Hi, there is something wrong with indentation when using multiple levels of switch clauses. Current formatting is:

switch ($s)
{
    case 'a':
        if ($y)
        {
            echo 'y';
        }
        switch ($b)
        {
            case 'ab':
                if ($x)
            { <-- this
                }
                switch ($c)
            { <-- this
                    case 'aba':
                        if ($z)
                { <-- this
                            echo 'z';
                        }
                        break;
                }
                break;
        }
        if ($y)
    { <-- this
            echo 'y';
        }
        break;

    case 'b':
        if ($y)
        {
            echo '';
        }
        break;
}

It should be:

switch ($s)
{
    case 'a':
        if ($y)
        {
            echo 'y';
        }
        switch ($b)
        {
            case 'ab':
                if ($x)
                { <-- this
                }
                switch ($c)
                { <-- this
                    case 'aba':
                        if ($z)
                        {  <-- this
                            echo 'z';
                        }
                        break;
                }
                break;
        }
        if ($y)
        { <-- this
            echo 'y';
        }
        break;

    case 'b':
        if ($y)
        {
            echo '';
        }
        break;
}

My settings are:

"codeformatter_php_options": {
        "syntaxes": "php", // Syntax names which must process PHP formatter
        "php_path": "C:/Program Files/Programming/PHP/php.exe", // Path for PHP executable, e.g. "/usr/lib/php" or "C:/Program Files/PHP/php.exe". If empty, uses command "php" from system environments
        "format_on_save": false, // Format on save
        "php55_compat": false, // PHP 5.5 compatible mode
        "psr1": false, // Activate PSR1 style
        "psr1_naming": false, // Activate PSR1 style - Section 3 and 4.3 - Class and method names case
        "psr2": true, // Activate PSR2 style
        "indent_with_space": 4, // Use spaces instead of tabs for indentation
        "enable_auto_align": false, // Enable auto align of = and =>
        "visibility_order": true, // Fixes visibility order for method in classes - PSR-2 4.2
        "smart_linebreak_after_curly": true, // Convert multistatement blocks into multiline blocks
        "yoda": true,
        // Enable specific transformations. Example: ["ConvertOpenTagWithEcho", "PrettyPrintDocBlocks"]
        // You can list all available transformations from command palette: CodeFormatter: Show PHP Transformations
        "passes": ["AllmanStyleBraces", "AutoSemicolon", "IndentTernaryConditions", "OrderAndRemoveUseClauses", "ReindentSwitchBlocks", "StripSpaceWithinControlStructures"],
        // Disable specific transformations
        "exclude": []
    },

SylwesterZarebski avatar Oct 18 '17 18:10 SylwesterZarebski

@SylwesterZarebski, because you should remove "AllmanStyleBraces" from passes and use open bracket on the same line. Or have you solved this problem another way?

Scarboroid avatar Aug 31 '18 12:08 Scarboroid

I cannot remove AllmanStyleBraces because it change whole formatting and i do not want open bracket on the same line. I did not solve the problem and more often use another editor which has better formatting tools.

SylwesterZarebski avatar Aug 31 '18 12:08 SylwesterZarebski

@SylwesterZarebski, can you tell me what editor do you use?

Scarboroid avatar Aug 31 '18 12:08 Scarboroid

I'm mostly back to Netbeans, but i'm also trying to customize VSCode addons to have the same effect.

SylwesterZarebski avatar Sep 02 '18 11:09 SylwesterZarebski