首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止clang-format缩进lambda

防止clang-format缩进lambda
EN

Stack Overflow用户
提问于 2015-10-13 05:39:03
回答 2查看 1.4K关注 0票数 4

clang-format的作用:

代码语言:javascript
复制
 QObject::connect(&w, &sap::Window::keyPress, [&w](auto* event)
                 {
                     if(event->key() == Qt::Key_Escape)
                         w.close();
                 });

我想要的:

代码语言:javascript
复制
QObject::connect(&w, &sap::Window::keyPress, [&w](auto* event)
{
    if(event->key() == Qt::Key_Escape)
    w.close();
});

有没有办法让clang-format不缩进lambda bodies?在文档中找不到任何有关它的内容。

这就是我到目前为止所知道的:

代码语言:javascript
复制
BasedOnStyle: LLVM,
BreakBeforeBraces: Allman,
NamespaceIndentation: All,
SpaceBeforeParens: Never,
AccessModifierOffset: -4,

AllowShortIfStatementsOnASingleLine: false,
AllowShortBlocksOnASingleLine: false,
AllowShortFunctionsOnASingleLine: None,
AllowShortCaseLabelsOnASingleLine: false,
AllowShortLoopsOnASingleLine: false,

ColumnLimit: 100,
AlwaysBreakTemplateDeclarations: true,
PenaltyReturnTypeOnItsOwnLine: 9999,
IndentWidth: 4,
PointerAlignment: Left
EN

回答 2

Stack Overflow用户

发布于 2016-06-15 20:13:12

您在clang-format上使用的是哪个版本?

最新版本(v3.9.0或v3.8.0)上的默认配置几乎可以执行您想要的操作:

代码语言:javascript
复制
QObject::connect(&w, &sap::Window::keyPress, [&w](auto *event) {
  if (event->key() == Qt::Key_Escape)
  w.close();
});

你可以在线试用:http://zed0.co.uk/clang-format-configurator/

但对于较长的参数包,默认配置将返回:

代码语言:javascript
复制
QObject::connect(sender, &sap::ClassName::signalName, receiver,
                 &sap::OtherClass::slotFunc,
                 [this](auto dummy, const auto* event) {
                     if (event->key() == Qt::Key_Escape)
                         doStuff();
                 });

按如下所示的.clang-format

代码语言:javascript
复制
BasedOnStyle: LLVM
IndentWidth:  4
ColumnLimit:  80
Language:     Cpp

AlignAfterOpenBracket: AlwaysBreak
BinPackArguments:      false
BinPackParameters:     false

PointerAlignment:      Left

你会得到:

代码语言:javascript
复制
QObject::connect(&w, &sap::Window::keyPress, [&w](auto* event) {
    if (event->key() == Qt::Key_Escape)
        w.close();
});

QObject::connect(
    sender,
    &sap::ClassName::signalName,
    receiver,
    &sap::OtherClass::slotFunc,
    [this](auto dummy, const auto* event) {
        if (event->key() == Qt::Key_Escape)
            doStuff();
    });

目前,BraceWrapping还没有专门针对lambda的成员。

票数 1
EN

Stack Overflow用户

发布于 2021-12-27 16:37:01

对于任何想知道2021年的人来说,从Clang 13开始有一个LambdaBodyIndentation选项。

代码语言:javascript
复制
LambdaBodyIndentation: OuterScope
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33090649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档