c++ clang-format过度缩进概念

8ftvxx2r  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(137)

我使用clang-format-14来格式化我的C++代码。我写了一个缓冲区类的概念,它的行为类似于iostream对象,我希望它看起来像这样:

template <typename T>
concept Data = requires(T & t, Buffer & buffer) {
    { buffer << t } -> std::same_as<Buffer &>;
    { buffer >> t } -> std::same_as<Buffer &>;
};

但是当我使用clang-format-14来格式化文件时,我得到了这样的结果:

template <typename T>
concept Data = requires(T & t, Buffer & buffer) {
                   { buffer << t } -> std::same_as<Buffer &>;
                   { buffer >> t } -> std::same_as<Buffer &>;
               };

我不知道这些空间是从哪里来的。
大括号内的前两行保留了前导制表符(在StackOverflow上不可能看到,即使高亮显示空白)。
这是我的.clang-format文件:

# Pointers and references
PointerAlignment: Middle

# Indentation
UseTab: ForIndentation
IndentWidth: 2
TabWidth: 2
AccessModifierOffset: -2

# That weird function inlining
AllowShortFunctionsOnASingleLine: None

# Breaking
BreakBeforeBraces: Attach
AlignAfterOpenBracket: BlockIndent
BreakConstructorInitializers: AfterColon
BreakInheritanceList: AfterColon

# Namespaces
NamespaceIndentation: All
FixNamespaceComments: true

IndentRequires选项不会影响这种行为(显然BreakBeforeConceptDeclarations也不会)。尽管有趣的是,BreakBeforeConceptDeclarations没有任何影响,并且无论如何都会导致一个破碎的概念声明。
我所知道的样式选项列在this page上。

ffscu2ro

ffscu2ro1#

我不知道这些空格是从哪里来的
requires-expression的主体与关键字requires对齐;但是,目前还没有禁用对齐方法。
这是clang-format中的一个bug/缺陷,如https://github.com/llvm/llvm-project/issues/56283中所述。
然而,fix for this几乎要被合并到LLVM main中了。

相关问题