首页 > 解决方案 > 如何获得 clang-format 以将大括号初始化构造的参数放在同一行?

问题描述

我正在运行,在此输入上使用仅指定clang-format的文件(无效的 C++,但这对此并不重要):.clang-formatLanguage: Cpp

const auto SOME_VARIABLE_NAME = {{"key", { {"key2", std::array{ 0, 0, 0, 0, }}, }}};

我得到这个输出:

const auto SOME_VARIABLE_NAME = {{"key",
                                  {
                                      {"key2",
                                       std::array{
                                           0,
                                           0,
                                           0,
                                           0,
                                       }},
                                  }}};

我会更接近以下输出:

const auto SOME_VARIABLE_NAME = {{"key",
                                  {
                                      {"key2",
                                       std::array{0, 0, 0, 0}},
                                  }}};

我不确定为什么 clang-format 在第050 列左右在每个 之后放置一个换行符。

我应该添加什么设置.clang-format来实现这一点?

我尝试了一些我认为可能相关的说明符,但无济于事:

编辑:仍然有这个问题。在第一个大括号之后添加了一条注释,以至少使大括号更靠左:

const auto SOME_VARIABLE_NAME = {  //
    {"key",
     {
         {"key2",
          std::array{
              0,
              0,
              0,
              0,
          }},
     }}};

标签: c++clang-format

解决方案


问题在于右大括号之前的尾随逗号。尾随逗号(在 中是可选的c++)告诉clang-format将每个元素放在单独的行上。我不知道这个约定是从哪里来的,而且似乎没有记录在案。在你的情况下,它似乎妨碍了。

如果您仅删除最后一个“0”之后的逗号,则默认clang-format设置会生成:

const auto SOME_VARIABLE_NAME = {{"key",
                                  {
                                      {"key2", std::array{0, 0, 0, 0}},
                                  }}};

...这不是您所要求的,但相当接近。


推荐阅读