如何在打开函数括号之前使clang-format添加新行?

时间:2015-04-06 18:55:41

标签: coding-style clang clang-format

我有兴趣为函数添加一个大括号(但不是if语句和其他上下文)。例如

void foo()
{
   ...
}

除了火焰战,这样做是否有充分的理由?虽然我对if / else和less块使用相同的开放括号,但我认为在这种情况下,更大的代码单元(函数/方法/类/结构)的可视化组织可以胜过完美的一致性。

此外,我如何让clang-format遵循这种风格?

2 个答案:

答案 0 :(得分:18)

documentation所述,使用clang-format调用-style=file,并使用放置在封闭目录中的.clang-format文件来自定义样式选项。指定括号放置的格式样式选项称为BreakBeforeBraces。来自文档,

  

BreakBeforeBraces BraceBreakingStyle

     

支撑打破风格   使用

     

可能的值:

     
      
  • BS_Attach(在配置中:Attach)始终将大括号附加到周围的上下文中。
  •   
  • BS_Linux(在配置中:Linux)与Attach类似,但在函数,命名空间和类定义的大括号之前中断。
  •   
  • BS_Stroustrup(在配置中:Stroustrup)与Attach类似,但在功能定义和“其他”之前中断。
  •   
  • BS_Allman(在配置中:Allman)在括号之前总是断开。
  •   
  • BS_GNU(在配置中:GNU)总是在大括号之前中断并为控制语句的大括号添加额外级别的缩进,而不是   类,功能或其他定义。
  •   

与您的说明匹配的样式为BS_Stroustrup。将以下条目添加到.clang-format

BreakBeforeBraces: Stroustrup

除文档外,clangformat.com列出了所有选项,并通过示例说明了其中许多选项。

答案 1 :(得分:9)

Pradhan有一个excellent answer,但你可能会发现你不想要它们就会得到休息(正如我发现的那样)。

还有另一个选项,“自定义”,至少是clang格式版本3.8和5(我使用3.8并在5个文档中找到了BS_Custom)。有了这个,您可以在BraceWrapping中指定您想要的内容,包括“AfterFunction”选项。

在下面的示例摘录中,我将其他人列为true / false,因为OP的问题仅指定AfterFunction(即“在打开函数括号之前”):

BraceWrapping:
  AfterClass:      true
  AfterControlStatement: true
  AfterEnum:       true/false
  AfterFunction:   true
  AfterNamespace:  true/false
  AfterObjCDeclaration: true/false
  AfterStruct:     true/false
  AfterUnion:      true/false
  BeforeCatch:     true/false
  BeforeElse:      true/false
  IndentBraces:    true/false
BreakBeforeBraces: Custom

我已经使用我的配置对此进行了测试,它可以更好地控制支撑破碎。