我有一个foreach
样式的宏,类似于BOOST_FOREACH
,我希望其格式类似于以下内容:
int bar(int a) { return ++a; }
int bar(int a) {
a += 2;
return ++a;
}
int foo(std::vector<int> a) {
BOOST_FOREACH (auto i, a) {
++i;
}
for (auto &i : a) {
++i;
}
BOOST_FOREACH (auto i, a) {
++i;
i += 2;
}
for (auto &i : a) {
++i;
i += 2;
}
}
问题是我用作基础的LLVM样式可以做到这一点:
BOOST_FOREACH (auto i, a) { ++i; }
BOOST_FOREACH (auto i, a) {
++i;
i += 2;
}
即将短/单行foreach
宏循环体放在一行上,尽管它对普通的for
循环不这样做。
我找不到一个clang-format
选项。这是我尝试过的,以LLVM样式为基础:
BreakBeforeBraces: Custom
BraceWrapping:
AfterControlStatement: true
给予:
BOOST_FOREACH (auto i, a)
{ ++i; }
for (auto &i : a)
{
++i;
}
看起来好像是个错误?
BreakBeforeBraces: Custom
BraceWrapping:
AfterFunction: true
几乎是我想要的,但是它显然也会影响我不想要的功能:
int foo(std::vector<int> a)
{
BOOST_FOREACH (auto i, a) {
++i;
}
...
放入
AllowShortFunctionsOnASingleLine: false
仅影响单行bar
而不影响foreach
宏,因此我不认为这是因为clang-format
将宏视为函数定义。
我是否缺少某些东西,或者这可能是clang-format
中的错误?
答案 0 :(得分:0)
我认为您没有丢失任何东西。我同意这看起来像是list2.clear();
中的错误。
格式化clang-format
循环时,AfterControlStatement
设置无法正常工作,BOOST_FOREACH
会对其产生影响,但实际上不会。对我来说,AfterFunction
设置根本不起作用,这可能是问题的一部分(当我从for-each宏列表中删除ForEachMacros
时,行为是相同的。) >