forked from OSchip/llvm-project
[clang-format] parse C# object initialisers
Summary: Treat C# object initializers as braced lists. Allow lambdas inside C# braced lists. Reviewers: krasimir Reviewed By: krasimir Subscribers: cfe-commits, MyDeveloperDay Tags: #clang-format, #clang Differential Revision: https://reviews.llvm.org/D75473
This commit is contained in:
parent
91acb5b3e1
commit
7d2fdd3f66
|
@ -1632,6 +1632,17 @@ bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons,
|
|||
// FIXME: Once we have an expression parser in the UnwrappedLineParser,
|
||||
// replace this by using parseAssigmentExpression() inside.
|
||||
do {
|
||||
if (Style.isCSharp()) {
|
||||
if (FormatTok->is(TT_JsFatArrow)) {
|
||||
nextToken();
|
||||
// Fat arrows can be followed by simple expressions or by child blocks
|
||||
// in curly braces.
|
||||
if (FormatTok->is(tok::l_brace)) {
|
||||
parseChildBlock();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Style.Language == FormatStyle::LK_JavaScript) {
|
||||
if (FormatTok->is(Keywords.kw_function) ||
|
||||
FormatTok->startsSequence(Keywords.kw_async, Keywords.kw_function)) {
|
||||
|
@ -1955,7 +1966,7 @@ void UnwrappedLineParser::parseNamespace() {
|
|||
DeclarationScopeStack.size() > 1);
|
||||
parseBlock(/*MustBeDeclaration=*/true, AddLevel);
|
||||
// Munch the semicolon after a namespace. This is more common than one would
|
||||
// think. Puttin the semicolon into its own line is very ugly.
|
||||
// think. Putting the semicolon into its own line is very ugly.
|
||||
if (FormatTok->Tok.is(tok::semi))
|
||||
nextToken();
|
||||
addUnwrappedLine();
|
||||
|
@ -1966,6 +1977,19 @@ void UnwrappedLineParser::parseNamespace() {
|
|||
void UnwrappedLineParser::parseNew() {
|
||||
assert(FormatTok->is(tok::kw_new) && "'new' expected");
|
||||
nextToken();
|
||||
|
||||
if (Style.isCSharp()) {
|
||||
do {
|
||||
if (FormatTok->is(tok::l_brace))
|
||||
parseBracedList();
|
||||
|
||||
if (FormatTok->isOneOf(tok::semi, tok::comma))
|
||||
return;
|
||||
|
||||
nextToken();
|
||||
} while (!eof());
|
||||
}
|
||||
|
||||
if (Style.Language != FormatStyle::LK_Java)
|
||||
return;
|
||||
|
||||
|
|
|
@ -546,6 +546,14 @@ Shape[] shapes = new[] { new Circle { Radius = 2.7281, Colour = Colours.Red },
|
|||
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); },
|
||||
};)",
|
||||
Style);
|
||||
}
|
||||
|
||||
TEST_F(FormatTestCSharp, CSharpNamedArguments) {
|
||||
|
|
Loading…
Reference in New Issue