aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Coe <jbcoe@google.com>2020-03-09 17:33:53 +0000
committerJonathan Coe <jbcoe@google.com>2020-03-09 17:36:21 +0000
commiteb682b80274d5486d062e3f53040969f592277e4 (patch)
treee071ae3956aae56b270cdedae82b2c81340847cb
parent63b683a8168fa03bd8dfa7567c73ad507104f666 (diff)
downloadllvm-eb682b80274d5486d062e3f53040969f592277e4.zip
llvm-eb682b80274d5486d062e3f53040969f592277e4.tar.gz
llvm-eb682b80274d5486d062e3f53040969f592277e4.tar.bz2
[clang-format] C# does not indent braced initializers as continuations
Summary: C# treats object initializers as braced init blocks. Braced init blocks are no longer indented as continuations. Reviewers: krasimir Reviewed By: krasimir Subscribers: cfe-commits Tags: #clang-format, #clang Differential Revision: https://reviews.llvm.org/D75731
-rw-r--r--clang/lib/Format/FormatToken.h3
-rw-r--r--clang/lib/Format/UnwrappedLineParser.cpp5
-rw-r--r--clang/unittests/Format/FormatTestCSharp.cpp25
3 files changed, 18 insertions, 15 deletions
diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h
index 072e1ad..1b885b5 100644
--- a/clang/lib/Format/FormatToken.h
+++ b/clang/lib/Format/FormatToken.h
@@ -509,6 +509,9 @@ struct FormatToken {
/// Returns \c true if this tokens starts a block-type list, i.e. a
/// list that should be indented with a block indent.
bool opensBlockOrBlockTypeList(const FormatStyle &Style) const {
+ // C# Does not indent object initialisers as continuations.
+ if (is(tok::l_brace) && BlockKind == BK_BracedInit && Style.isCSharp())
+ return true;
if (is(TT_TemplateString) && opensScope())
return true;
return is(TT_ArrayInitializerLSquare) || is(TT_ProtoExtensionLSquare) ||
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index 58cc679..00447eb 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -1677,7 +1677,10 @@ bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons,
}
break;
case tok::l_square:
- tryToParseLambda();
+ if (Style.isCSharp())
+ parseSquare();
+ else
+ tryToParseLambda();
break;
case tok::l_paren:
parseParens();
diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp
index e303889..a22f486 100644
--- a/clang/unittests/Format/FormatTestCSharp.cpp
+++ b/clang/unittests/Format/FormatTestCSharp.cpp
@@ -527,31 +527,28 @@ TEST_F(FormatTestCSharp, CSharpObjectInitializers) {
verifyFormat(R"(//
Shape[] shapes = new[] {
- new Circle {
- Radius = 2.7281,
- Colour = Colours.Red,
- },
- new Square {
- Side = 101.1,
- Colour = Colours.Yellow,
- },
+ new Circle {
+ Radius = 2.7281,
+ Colour = Colours.Red,
+ },
+ new Square {
+ Side = 101.1,
+ Colour = Colours.Yellow,
+ },
};)",
Style);
// Omitted final `,`s will change the formatting.
verifyFormat(R"(//
Shape[] shapes = new[] { new Circle { Radius = 2.7281, Colour = Colours.Red },
- new Square {
- Side = 101.1,
- Colour = Colours.Yellow,
- } };)",
+ new Square { Side = 101.1, Colour = Colours.Yellow } };)",
Style);
// Lambdas can be supplied as initialiser arguments.
verifyFormat(R"(//
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); },
+ Filler = (Shape shape) => { return new Transform.Fill(shape, RED); },
+ Scaler = (Shape shape) => { return new Transform.Resize(shape, 0.1); },
};)",
Style);
}