IE,指的是:
if (x > 5)
return test;
始终会成为:
if (x > 5)
{
return test;
}
我不是在谈论括号风格(Allman,GNU,Whiteman等),我只是指有没有括号。
有一些内容可以防止/启用单行控制语句,例如:
if (x > 5) return test;
这个内容是
AllowShortBlocksOnASingleLine
,但这不是我想要的。如果它适用于clang 7,那就太理想了,但如果不适用,请告诉我。
IE,指的是:
if (x > 5)
return test;
始终会成为:
if (x > 5)
{
return test;
}
if (x > 5) return test;
AllowShortBlocksOnASingleLine
,但这不是我想要的。我同意dovedevic的看法,目前clang-format
无法实现此功能。另一个值得考虑的选择是clang-tidy
。您可以使用以下方法强制控制语句周围的大括号:
clang-tidy -checks='-*,readability-braces-around-statements' -fix-errors myfile.cpp
解释:
-*
抑制所有检查readability-braces-around-statements
启用了一个检查-fix-errors
告诉 clang-tidy
修复任何发现的问题,即使出现编译错误有关更多信息,请参见文档。
InsertBraces
,这个选项应该正好符合您的要求。Insert braces after control statements (if, else, for, do, and while) in C++ unless the control statements are inside macro definitions or the braces would enclose preprocessor directives.
我理解您想要坚持使用 clang-format
,然而我的最近一篇文章让我陷入了与您类似的困境。看起来 clang-format
主要用作仅处理空格的格式化程序。为了确切地得到您想要的结果,我建议使用 Uncrustify。构建过程非常简单(请参阅 github 页面以获取详细信息),您需要的配置如下:
$ cat .uncrustify
# Uncrustify-0.70.1
nl_if_brace = remove
nl_brace_else = force
nl_elseif_brace = remove
nl_else_brace = remove
nl_else_if = remove
nl_before_if_closing_paren = remove
nl_for_brace = remove
nl_while_brace = remove
nl_do_brace = remove
nl_brace_while = remove
nl_multi_line_sparen_open = remove
nl_multi_line_sparen_close = remove
nl_after_vbrace_close = true
mod_full_brace_do = force
mod_full_brace_for = force
mod_full_brace_function = force
mod_full_brace_if = force
mod_full_brace_while = force
$ uncrustify -c /path/to/.uncrustify --no-backup example.c
恐怕到目前为止(我研究并测试了clang-format 6.0,以及我研究过的7.0),这似乎是不可能的。我不想安装第二个工具——它必须适用于未修改的clang-format安装。[...]
clang-tidy
是否可以集成到您的构建工作流程中? - dovedevicclang-format
,那么您不能重新配置它正在运行的可执行文件吗? - dovedevic