diff --git a/src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs b/src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs index 79bff6b40b8b3..d5f482bb80f08 100644 --- a/src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs +++ b/src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs @@ -5,8 +5,6 @@ using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp.Symbols; -using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.Text; using Roslyn.Utilities; @@ -604,7 +602,8 @@ private static bool NeedsSeparator(SyntaxToken token, SyntaxToken next) if (next.IsKind(SyntaxKind.ColonToken)) { if (next.Parent.IsKind(SyntaxKind.BaseList) || - next.Parent.IsKind(SyntaxKind.TypeParameterConstraintClause)) + next.Parent.IsKind(SyntaxKind.TypeParameterConstraintClause) || + next.Parent is ConstructorInitializerSyntax) { return true; } diff --git a/src/Compilers/CSharp/Test/Syntax/Syntax/SyntaxNormalizerTests.cs b/src/Compilers/CSharp/Test/Syntax/Syntax/SyntaxNormalizerTests.cs index 9def10856ffca..3b57464ac3a0f 100644 --- a/src/Compilers/CSharp/Test/Syntax/Syntax/SyntaxNormalizerTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Syntax/SyntaxNormalizerTests.cs @@ -540,12 +540,12 @@ public void TestSpacingOnInvocationLikeKeywords() // no space between this and ( TestNormalizeDeclaration( "class C { C() : this () { } }", - "class C\r\n{\r\n C(): this()\r\n {\r\n }\r\n}"); + "class C\r\n{\r\n C() : this()\r\n {\r\n }\r\n}"); // no space between base and ( TestNormalizeDeclaration( "class C { C() : base () { } }", - "class C\r\n{\r\n C(): base()\r\n {\r\n }\r\n}"); + "class C\r\n{\r\n C() : base()\r\n {\r\n }\r\n}"); // no space between checked and ( TestNormalizeExpression("checked (a)", "checked(a)"); @@ -920,6 +920,35 @@ public void TestNormalizeFunctionPointerWithUnmanagedCallingConventionAndSpecifi TestNormalizeDeclaration(content, expected); } + [Fact] + [WorkItem(53254, "https://github.com/dotnet/roslyn/issues/53254")] + public void TestNormalizeColonInConstructorInitializer() + { + var content = +@"class Base +{ +} + +class Derived : Base +{ + public Derived():base(){} +}"; + + var expected = +@"class Base +{ +} + +class Derived : Base +{ + public Derived() : base() + { + } +}"; + + TestNormalizeDeclaration(content, expected); + } + [Fact] [WorkItem(49732, "https://github.com/dotnet/roslyn/issues/49732")] public void TestNormalizeXmlInDocComment() diff --git a/src/Workspaces/CSharpTest/CodeGeneration/SyntaxGeneratorTests.cs b/src/Workspaces/CSharpTest/CodeGeneration/SyntaxGeneratorTests.cs index 013e0dd620b23..8635e1da7e696 100644 --- a/src/Workspaces/CSharpTest/CodeGeneration/SyntaxGeneratorTests.cs +++ b/src/Workspaces/CSharpTest/CodeGeneration/SyntaxGeneratorTests.cs @@ -971,7 +971,7 @@ public void TestConstructorDeclaration() Generator.ConstructorDeclaration("c", parameters: new[] { Generator.ParameterDeclaration("p", Generator.IdentifierName("t")) }, baseConstructorArguments: new[] { Generator.IdentifierName("p") }), - "c(t p): base(p)\r\n{\r\n}"); + "c(t p) : base(p)\r\n{\r\n}"); } [Fact]