ClangFormat对带+号Lambda表达式格式化异常,是否为Bug?
问题分析:带+号的Lambda表达式导致ClangFormat格式化异常
使用的ClangFormat配置
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 2, TabWidth: 2, BreakBeforeBraces: Attach, AllowShortIfStatementsOnASingleLine: true, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -2 }",
格式化现象对比
- Lambda不带+号时,格式化符合预期:
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, [](void *buffer, size_t size, size_t count, std::string *stream) -> size_t { auto s_size = size * count; stream->append((char *)buffer, 0, s_size); return s_size; });
- Lambda添加+号后,出现异常格式化(函数被强制换行):
curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, +[](void *buffer, size_t size, size_t count, std::string *stream) -> size_t { auto s_size = size * count; stream->append((char *)buffer, 0, s_size); return s_size; });
结论
这属于ClangFormat的处理逻辑缺陷(Bug)。在ColumnLimit: 0(不限制行宽)的配置下,带+的Lambda表达式被错误判定为需要拆分换行的复杂参数,完全违背了单行格式化的预期。目前没有直接的配置项可以规避该问题,要么暂时接受该换行格式,要么等待ClangFormat后续版本修复该解析逻辑。
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

