我正在尝试将clang格式应用于现有代码库,并遇到以下问题:
简化(和格式化)的示例代码:
#define QUERY_BEGIN()
#define QUERY_NORESULT()
#define QUERY_END()
void foo()
{
int a = 0;
QUERY_BEGIN()
a = 1;
QUERY_NORESULT()
a = 2;
QUERY_END()
}
我设置了以下选项:
MacroBlockEnd: 'QUERY_END'
MacroBlockBegin: 'QUERY_BEGIN'
我要实现的是宏部分的以下格式:
QUERY_BEGIN()
a = 1;
QUERY_NORESULT()
a = 2;
QUERY_END()
我的第一个猜测是将QUERY_NORESULT
设置为MacroBlockEnd
和MacroBlockBegin
,但这没有帮助。结果为以下格式:
QUERY_BEGIN()
a = 1;
QUERY_NORESULT
a = 2;
QUERY_END()
目前是否有实现上述缩进的方法?
答案 0 :(得分:-1)
StatementMacros
选项,自clang格式8(尚未发布,但您可以从源代码构建)开始可用。 请参见this commit:
摘要: 在函数的主体中使用了一些宏,它们实际上包含尾随的分号:因此应在它们之后自动添加新行,而不与下一行合并。例如,Qt的Q_UNUSED宏就是这种情况:
void foo(int a, int b) { Q_UNUSED(a) return b; }
此修补程序通过引入新的选项来指定语句宏列表来处理这些情况。这样可以将系统重新用于foreach宏,以确保不影响性能。
◆StatementMacros
std :: vector clang :: format :: FormatStyle :: StatementMacros 宏的向量,应将其解释为完整的语句。
典型的宏是表达式,需要添加分号。有时情况并非如此,这可以让clang格式意识到这种情况。
例如:Q_UNUSED
Format.h文件第1061行的定义。
由clang :: format :: FormatTokenLexer :: FormatTokenLexer(),clang :: format :: getLLVMStyle(),llvm :: yaml :: MappingTraits
:: mapping()和operator ==()引用
build clang from source /等待llvm / clang8发布,然后
将StatementMacros ['QUERY_BEGIN()', 'QUERY_NORESULT()', 'QUERY_END()']
放入您的.clang-format
。
// clang-format off
void unformatted_code ;
// clang-format on
在此宏语句中关闭clang格式。