Issue 76717
Summary clang-format-18 `AlignArrayOfStructures: Left` breaks braced initializer list
Labels clang-format
Assignees
Reporter MartinsSmirnovs
    Given following `.clang-format` file:
```.yaml
AlignArrayOfStructures: Left
ColumnLimit: 0
Cpp11BracedListStyle: false
IndentWidth: 4
```
And following `foo.cpp` file:
```cpp
#include <list>
#include <string>

enum Code {
    X,
    Y,
 Z
};

struct Entry {
    std::string data;
    Code code;
};

struct Message {
    Code code;
    Entry entry;
};

using Messages = std::list<Message>;

static const auto messages = Messages{
    {
        Code::X,
        {
 "data1",
            Code::Y,
        },
    },
    {
 Code::Y,
        {
            "data1",
 Code::Z,
        },
    },
};

using Entries = std::list<Entry>;

static const Entries entry = {
    { "data", Code::X },
    { "data1",  Code::Y },
    { "data12", Code::Z },
};
```
I expect that `clang-format foo.cpp` will not perform formatting, however, it does and breaks initializer list of `Messages`:
```cpp
#include <list>
#include <string>

enum Code {
    X,
    Y,
    Z
};

struct Entry {
 std::string data;
    Code code;
};

struct Message {
    Code code;
    Entry entry;
};

using Messages = std::list<Message>;

static const auto messages = Messages{
 {
     Code::X,
     {
            "data1",
 Code::Y,
        },
     },
    {
     Code::Y,
     {
 "data1",
            Code::Z,
        },
 },
};

using Entries = std::list<Entry>;

static const Entries entry = {
    { "data",   Code::X },
    { "data1",  Code::Y },
 { "data12", Code::Z },
};
```
If `AlignArrayOfStructures: Left` gets commented out, the formatting for `messages` works as expected, but the list of `Entries` is not aligned anymore:
```cpp
#include <list>
#include <string>

enum Code {
    X,
    Y,
 Z
};

struct Entry {
    std::string data;
    Code code;
};

struct Message {
    Code code;
    Entry entry;
};

using Messages = std::list<Message>;

static const auto messages = Messages{
    {
        Code::X,
        {
 "data1",
            Code::Y,
        },
    },
    {
 Code::Y,
        {
            "data1",
 Code::Z,
        },
    },
};

using Entries = std::list<Entry>;

static const Entries entry = {
    { "data", Code::X },
    { "data1", Code::Y },
    { "data12", Code::Z },
};
```
`clang-format`  version:
```
$ clang-format --version
Ubuntu clang-format version 18.0.0 (++20231208042253+5fc76e6b6da7-1~exp1~20231208042409.1357)
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to