From cb3f20d27c9e91cb9f997f0401f388e62c4ba993 Mon Sep 17 00:00:00 2001 From: Jonathan Coe Date: Mon, 9 Mar 2020 18:00:03 +0000 Subject: [PATCH] [clang-format] Correct indentation for `[key] = value,` entries in C++ object initialisers Summary: Do not use continuation indent for '[' in blocks in C# code. Reviewers: krasimir Reviewed By: krasimir Subscribers: cfe-commits Tags: #clang-format, #clang Differential Revision: https://reviews.llvm.org/D75747 --- clang/lib/Format/ContinuationIndenter.cpp | 3 +++ clang/unittests/Format/FormatTestCSharp.cpp | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index a08f5a3df864..9a6d7877efaa 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -1047,6 +1047,9 @@ unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) { if (NextNonComment->is(TT_ArraySubscriptLSquare)) { if (State.Stack.back().StartOfArraySubscripts != 0) return State.Stack.back().StartOfArraySubscripts; + else if (Style.isCSharp()) // C# allows `["key"] = value` inside object + // initializers. + return State.Stack.back().Indent; return ContinuationIndent; } diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp index a22f48676065..7f819a61c70e 100644 --- a/clang/unittests/Format/FormatTestCSharp.cpp +++ b/clang/unittests/Format/FormatTestCSharp.cpp @@ -549,6 +549,15 @@ Shape[] shapes = new[] { new Circle { Radius = 2.7281, Colour = Colours.Red }, private Transformer _transformer = new X.Y { Filler = (Shape shape) => { return new Transform.Fill(shape, RED); }, Scaler = (Shape shape) => { return new Transform.Resize(shape, 0.1); }, +};)", + Style); + + // Dictionary initialisation. + verifyFormat(R"(// +var myDict = new Dictionary { + ["name"] = _donald, + ["age"] = Convert.ToString(DateTime.Today.Year - 1934), + ["type"] = _duck, };)", Style); }