Skip to content

Commit

Permalink
Showing 2 changed files with 34 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System.Collections.Generic;
using System.Composition;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
@@ -29,17 +30,19 @@ protected override int GetInitializerCount(AnonymousObjectCreationExpressionSynt

protected override TupleExpressionSyntax ConvertToTuple(AnonymousObjectCreationExpressionSyntax anonCreation)
=> TupleExpression(
OpenParenToken.WithTriviaFrom(anonCreation.OpenBraceToken),
ConvertInitializers(anonCreation.Initializers),
CloseParenToken.WithTriviaFrom(anonCreation.CloseBraceToken))
.WithPrependedLeadingTrivia(anonCreation.GetLeadingTrivia());
OpenParenToken.WithTriviaFrom(anonCreation.OpenBraceToken),
ConvertInitializers(anonCreation.Initializers),
CloseParenToken.WithTriviaFrom(anonCreation.CloseBraceToken))
.WithPrependedLeadingTrivia(anonCreation.GetLeadingTrivia());

private static SeparatedSyntaxList<ArgumentSyntax> ConvertInitializers(SeparatedSyntaxList<AnonymousObjectMemberDeclaratorSyntax> initializers)
=> SeparatedList(initializers.Select(ConvertInitializer), initializers.GetSeparators());
=> SeparatedList(initializers.Select(ConvertInitializer), GetSeparators(initializers));

private static IEnumerable<SyntaxToken> GetSeparators(SeparatedSyntaxList<AnonymousObjectMemberDeclaratorSyntax> initializers)
=> initializers.Count == 0 ? [] : initializers.GetSeparators().Take(initializers.Count - 1);

private static ArgumentSyntax ConvertInitializer(AnonymousObjectMemberDeclaratorSyntax declarator)
=> Argument(ConvertName(declarator.NameEquals), default, declarator.Expression)
.WithTriviaFrom(declarator);
=> Argument(ConvertName(declarator.NameEquals), refKindKeyword: default, declarator.Expression).WithTriviaFrom(declarator);

private static NameColonSyntax? ConvertName(NameEqualsSyntax? nameEquals)
=> nameEquals == null
Original file line number Diff line number Diff line change
@@ -501,4 +501,28 @@ static void Main(string[] args)
}
""");
}

[Fact, WorkItem("https://github.com/dotnet/roslyn/issues/75950")]
public async Task RemoveTrailingComma()
{
var text = """
class Test
{
void Method()
{
var t1 = [||]new { a = 1, b = 2, };
}
}
""";
var expected = """
class Test
{
void Method()
{
var t1 = (a: 1, b: 2);
}
}
""";
await TestInRegularAndScriptAsync(text, expected);
}
}

0 comments on commit e0d0509

Please sign in to comment.