Author: Jonathan Coe Date: 2020-06-09T10:20:01+01:00 New Revision: 7117066bd6182f53ec9f97d2e5e81de27c2e0db0
URL: https://github.com/llvm/llvm-project/commit/7117066bd6182f53ec9f97d2e5e81de27c2e0db0 DIFF: https://github.com/llvm/llvm-project/commit/7117066bd6182f53ec9f97d2e5e81de27c2e0db0.diff LOG: [clang-format] Brace breaking for C# lambdas Reviewers: krasimir, MyDeveloperDay Reviewed By: krasimir Subscribers: cfe-commits Tags: #clang-format, #clang Differential Revision: https://reviews.llvm.org/D81394 Added: Modified: clang/lib/Format/UnwrappedLineParser.cpp clang/unittests/Format/FormatTestCSharp.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index b8da2c23b55a..0d488d1dda52 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -1459,8 +1459,14 @@ void UnwrappedLineParser::parseStructuralElement() { // followed by a curly. if (FormatTok->is(TT_JsFatArrow)) { nextToken(); - if (FormatTok->is(tok::l_brace)) + if (FormatTok->is(tok::l_brace)) { + // C# may break after => if the next character is a newline. + if (Style.isCSharp() && Style.BraceWrapping.AfterFunction == true) { + // calling `addUnwrappedLine()` here causes odd parsing errors. + FormatTok->MustBreakBefore = true; + } parseChildBlock(); + } break; } diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp index 584b8aea383f..bcf2c7a52141 100644 --- a/clang/unittests/Format/FormatTestCSharp.cpp +++ b/clang/unittests/Format/FormatTestCSharp.cpp @@ -525,6 +525,33 @@ var x = foo(className, $@"some code: EXPECT_EQ(Code, format(Code, Style)); } +TEST_F(FormatTestCSharp, CSharpLambdas) { + FormatStyle GoogleStyle = getGoogleStyle(FormatStyle::LK_CSharp); + FormatStyle MicrosoftStyle = getMicrosoftStyle(FormatStyle::LK_CSharp); + + verifyFormat(R"(// +class MyClass { + Action<string> greet = name => { + string greeting = $"Hello {name}!"; + Console.WriteLine(greeting); + }; +})", + GoogleStyle); + + // Microsoft Style: + // https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions#statement-lambdas + verifyFormat(R"(// +class MyClass +{ + Action<string> greet = name => + { + string greeting = $"Hello {name}!"; + Console.WriteLine(greeting); + }; +})", + MicrosoftStyle); +} + TEST_F(FormatTestCSharp, CSharpObjectInitializers) { FormatStyle Style = getGoogleStyle(FormatStyle::LK_CSharp); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits