αλε*_*λυτ 7 c++ lambda clang-format
我想用clang-format格式化代码,并完整保留lambda用作中间函数参数:
void f()
{
func(this, [this] { return false; }, this);
}
Run Code Online (Sandbox Code Playgroud)
我尝试用clang格式9.0进行的所有操作都将参数包装到下一行,即:
void f()
{
func(
this, [this] { return false; }, this);
}
Run Code Online (Sandbox Code Playgroud)
如果没有第一个或/和最后一个参数,则即使内置-style='WebKit'选项也可以提供所需的结果:
void f()
{
func([this] { return false; }, this); // ok
func(this, [this] { return false; }); // ok
func([this] { return false; }); // ok
}
Run Code Online (Sandbox Code Playgroud)
自LLVM 8.0起,似乎有所更改(损坏),因为7.1可根据需要工作。
最新版本clang-format(即 10)具有特定于格式化 lambda 的配置选项。具体来说,您所要求的可以通过为配置指令分配AllowShortLambdasOnASingleLinevalue来实现SLS_Inline。
以下是官方文档中提供的其他选项:
允许单行短 Lambda
(ShortLambdaStyle)根据值, auto lambda { return 0; } 可以放在一行中。
可能的值:
SLS_None(在配置中:无)切勿将 lambda 合并到一行中。
SLS_Empty(在配置中:空)仅合并空 lambda。
auto lambda = [](int a) {}
auto lambda2 = [](int a) {
return a;
};
Run Code Online (Sandbox Code Playgroud)
SLS_Inline(在配置中:内联)如果函数的参数将 lambda 合并到单行中。
auto lambda = [](int a) {
return a;
};
sort(a.begin(), a.end(), ()[] { return x < y; })
Run Code Online (Sandbox Code Playgroud)
SLS_All(在配置中:全部)将所有 lambda 合并到一条线上。
auto lambda = [](int a) {}
auto lambda2 = [](int a) { return a; };
Run Code Online (Sandbox Code Playgroud)
我没有找到一种方法可以在clang-format附带的LLVM 8. 我发现的最接近的配置如下
clang-format -style={BasedOnStyle: WebKit, AllowShortFunctionsOnASingleLine: true, AllowShortBlocksOnASingleLine: true}
Run Code Online (Sandbox Code Playgroud)
不管怎样,它没有达到你的全部要求,这就是它在我的 Windows 笔记本电脑上的样子:
void f() {
func([this] { return false; },
this); // ok
func(this, [this] { return false; }); // ok
func([this] { return false; }); // ok
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |