Search code examples
eclipse-cdtindentationstm32cubeide

Eclipse / CDT auto-indent on new line only incorrect for structs?


Using new Eclipse and CDT versions built into STM32CubeIDE. I have the built in formatter options adjusted and use clang-format as my main beautifier. Everywhere I can see in the Window >> Preferences menus I have indent turned to 2 spaces-only.

Next line indent works correctly with everything but structs which the indentation seems to be doubled.

It doesn't seem to be indenting 2 units twice, because pressing tab moves me 4 spaces while inside a struct block. Clang-Format with CTRL + SHIFT + F does fix the incorrect formatting, but I'd rather a proper solution.

Either it's a bug, or somewhere this is yet another setting for "4 space indent but only while inside a struct block"?

See examples:

typedef struct
{

    //New lines created inside the block start here, indented at 4 and not 2

    //I get here if I press tab from the start column 

  //This is where it should intent to, manually pressed spaced twice

} some_new_t;



void foo()
{
  //Correct
}

if (something)
{
  //Correct
}

while(1)
{
  //Correct
}

#ifdef TEST
//Doesn't indent, that's fine
#endif

EDIT: Applies to unions as well


Solution

  • Figured it out. This was not a 2 spaces vs 4 spaces issue, rather double indent when you only wanted one.

    For some reason CDT has a lot more references to C++ and still Java than C and this was labeled under something misleading.

    Under Window, Preferences, C/C++, Code Style, Formatter >> Edit >> Indentation >> Indent there are two options that can be checked.

    'public', 'protected', 'private' within class body

    and

    Declarations relative to 'public' 'private'

    You can check ONLY ONE of these for C structures and unions to indent at your chosen width. For whatever non-C reason, each one counts as including one indent width.

    Eclipse formatter indents too much on C structures and unions