[PATCH] D44609: [Clang-Format] New option BeforeLambdaBody to manage lambda line break inside function parameter call (in Allman style)

Christophe Calmejane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Oct 4 09:39:39 PDT 2018


christophe-calmejane added a comment.

I fixed it like this (not sure it's 100% correct though!!)

    State.Stack.back().HasMultipleNestedBlocks = Current.BlockParameterCount > 1;
    if (Style.BraceWrapping.BeforeLambdaBody && Current.Next != nullptr &&
        Current.Tok.getKind() == tok::TokenKind::l_paren &&
        Current.BlockParameterCount >= 1) {
  		// Search for any parameter that is a lambda
      auto const *nextTok = Current.Next;
      while (nextTok != nullptr) {
        if (nextTok->is(TT_LambdaLSquare)) {
          State.Stack.back().HasMultipleNestedBlocks = true;
          break;
        }
        nextTok = nextTok->Next;
      }
    }

It works for all cases I'm using to test:

  noOtherParams([](int x){call();});
  paramBeforeLambda(8,[](int x){call();});
  paramAfterLambda([](int x){call();},5);
  paramBeforeAndAfterLambda(8,[](int x){call();},5);
  doubleLambda(8,[](int x){call();},6,[](float f){return f*2;},5);
  nestedLambda1([](int x){return [](float f){return f*2;};});
  nestedLambda2([](int x){ call([](float f){return f*2;});});
  noExceptCall([](int x) noexcept {call();});
  mutableCall([](int x) mutable{call();});
  
  funcCallFunc(call(),[](int x){call();});
  
  auto const l=[](char v){if(v)call();};
  void f()
  {
  	return [](char v){ if(v) return v++;};
  }

I still think it's a hack (changing "HasMultipleNestedBlocks"), but it seems to work.


Repository:
  rC Clang

https://reviews.llvm.org/D44609





More information about the cfe-commits mailing list