4

铿锵格式是什么:

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

我想要的是:

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

有没有办法可以使 clang 格式不缩进 lambda 主体?在文档中找不到任何关于它的信息。

这是我到目前为止所拥有的:

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
4

2 回答 2

1

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

最新版本(v3.9.0或 v 3.8.0)的默认配置几乎可以满足您的需求:

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

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

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

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像这样:

BasedOnStyle: LLVM
IndentWidth:  4
ColumnLimit:  80
Language:     Cpp

AlignAfterOpenBracket: AlwaysBreak
BinPackArguments:      false
BinPackParameters:     false

PointerAlignment:      Left

你会得到:

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没有 lambdas 的特殊成员。

于 2016-06-15T12:13:12.400 回答
0

对于 2021 年想知道的任何人,自 Clang 13 以来就有一个LambdaBodyIndentation选项。OP 想要的行为可以通过

LambdaBodyIndentation: OuterScope
于 2021-12-27T16:37:01.450 回答