为什么叮当格式在 getter 的大括号之前不会中断?

Why doesn't clang-format break before braces of getter?

本文关键字:中断 格式 叮当 getter 为什么      更新时间:2023-10-16

相关文章的答案是如何使clang格式在函数的大括号前添加新行?没有帮助。

我在Windows上的Eclipse CDT中使用了带有Cppstyle的clang格式9.0.0。clang格式格式化如下getter:

int returnNumber() { return 3; }

但是我更喜欢格式

int returnNumber()
{
return 3;
}

我无法使clang格式做到这一点,无论是使用破坏样式BS_Allman还是使用自定义样式。除了手动格式化,还有其他解决方案吗?

我的示例源文件如下:

收割台.h

#pragma once
namespace Test
{
class MyClass
{
public:
int returnNumber() { return 3; }
};
} /* namespace Test */

我的配置文件如下:

Language: Cpp
AlwaysBreakTemplateDeclarations: 'true'
BreakBeforeBraces: Allman
ColumnLimit: '80'
IndentWidth: '2'
NamespaceIndentation: None
Standard: Cpp11
TabWidth: '2'
UseTab: Always
PointerAlignment: Left
AlignAfterOpenBracket: DontAlign
BreakConstructorInitializers: AfterColon
MaxEmptyLinesToKeep: 2

配置的问题是您错过了这个用短函数控制clang-format行为的选项。

将此添加到您的配置中,一切都会很好:

AllowShortFunctionsOnASingleLine: None

引用clang格式文档:

AllowShortFunctionsOnSingleLine(ShortFunctionStyle(

根据值的不同,int f() { return 0; }可以放在一行上。

可能值:

  • SFS_None(配置中:无(从不将函数合并到一行中。

  • SFS_InlineOnly(配置中:InlineOnly(仅合并类内部定义的函数。与"内联"相同,只是它没有暗示"空":即顶层空函数也不合并。

  • SFS_Empty(配置中:空(仅合并空函数。

  • SFS_Inline(在配置中:内联(仅合并类内部定义的函数。意味着"空"。

  • SFS_All(配置中:全部(合并所有适合一行的函数。