如何让clang-format在Allman缩进风格下允许单行lambda表达式?
解决clang-format在Allman风格下短lambda被强制换行的问题
你遇到的问题是因为BraceWrapping中的BeforeLambdaBody配置优先级高于AllowShortLambdasOnASingleLine。当BeforeLambdaBody设为true时,clang-format会强制将所有lambda的大括号单独换行,完全忽略短lambda单行显示的配置。
正确的.clang-format配置
要同时保留Allman风格的大括号规则和短lambda单行显示的效果,需要调整BraceWrapping中的BeforeLambdaBody为false,并确保其他Allman风格的规则生效:
AllowShortLambdasOnASingleLine: true BraceWrapping: AfterFunction: true # 保持函数大括号Allman风格 BeforeLambdaBody: false # 允许短lambda大括号不单独换行 BreakBeforeBraces: Custom ColumnLimit: 0 Standard: c++17 IndentWidth: 4
格式化后的代码效果
应用上述配置后,clang-format会输出符合预期的代码:
int main() { auto shorter = [](){ return 5; }; auto longer = []() { int i = 5; return i; }; }
关键逻辑说明
AllowShortLambdasOnASingleLine: true告诉clang-format,当lambda足够短时可以放在单行BeforeLambdaBody: false取消强制所有lambda大括号换行的规则,让短lambda的单行配置生效AfterFunction: true确保函数的大括号仍遵循Allman风格(单独占一行)
内容的提问来源于stack exchange,提问作者Parker Coates
相关产品推荐
相关产品推荐

