From 5e5c54bbc7ecf1a745700cdeb5f301c59b7068e4 Mon Sep 17 00:00:00 2001 From: Bela VanderVoort Date: Fri, 6 Feb 2026 13:18:41 -0600 Subject: [PATCH 1/2] Get stackalloc array initializers formatting consistently with other array initializers closes #1808 --- .../CSharp/SyntaxPrinter/RightHandSide.cs | 1 - .../ArrayCreationExpression.cs | 2 +- .../InitializerExpression.cs | 1 + .../StackAllocArrayCreationExpression.cs | 6 +++--- .../StackAllocArrayCreationExpressions.test | 19 ++++++++++--------- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Src/CSharpier.Core/CSharp/SyntaxPrinter/RightHandSide.cs b/Src/CSharpier.Core/CSharp/SyntaxPrinter/RightHandSide.cs index 272082060..76d2e1fab 100644 --- a/Src/CSharpier.Core/CSharp/SyntaxPrinter/RightHandSide.cs +++ b/Src/CSharpier.Core/CSharp/SyntaxPrinter/RightHandSide.cs @@ -126,7 +126,6 @@ or ConditionalExpressionSyntax or InterpolatedStringExpressionSyntax or IsPatternExpressionSyntax or LiteralExpressionSyntax - or StackAllocArrayCreationExpressionSyntax or QueryExpressionSyntax => Layout.BreakAfterOperator, _ => Layout.Fluid, }; diff --git a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/ArrayCreationExpression.cs b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/ArrayCreationExpression.cs index 780574eb7..9feaf0131 100644 --- a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/ArrayCreationExpression.cs +++ b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/ArrayCreationExpression.cs @@ -11,7 +11,7 @@ public static Doc Print(ArrayCreationExpressionSyntax node, PrintingContext cont Token.PrintWithSuffix(node.NewKeyword, " ", context), Node.Print(node.Type, context), node.Initializer != null - ? Doc.Concat(Doc.Line, Node.Print(node.Initializer, context)) + ? Doc.Concat(Doc.Line, InitializerExpression.Print(node.Initializer, context)) : Doc.Null ); } diff --git a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/InitializerExpression.cs b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/InitializerExpression.cs index 26ee3ba70..500a84817 100644 --- a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/InitializerExpression.cs +++ b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/InitializerExpression.cs @@ -58,6 +58,7 @@ is not SyntaxKind.ComplexElementInitializerExpression is not ( ObjectCreationExpressionSyntax or ArrayCreationExpressionSyntax + or StackAllocArrayCreationExpressionSyntax or ImplicitArrayCreationExpressionSyntax or ImplicitObjectCreationExpressionSyntax ) diff --git a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/StackAllocArrayCreationExpression.cs b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/StackAllocArrayCreationExpression.cs index 737600913..776a69f83 100644 --- a/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/StackAllocArrayCreationExpression.cs +++ b/Src/CSharpier.Core/CSharp/SyntaxPrinter/SyntaxNodePrinters/StackAllocArrayCreationExpression.cs @@ -7,12 +7,12 @@ internal static class StackAllocArrayCreationExpression { public static Doc Print(StackAllocArrayCreationExpressionSyntax node, PrintingContext context) { - return Doc.Concat( + return Doc.Group( Token.PrintWithSuffix(node.StackAllocKeyword, " ", context), Node.Print(node.Type, context), node.Initializer != null - ? Doc.Concat(" ", InitializerExpression.Print(node.Initializer, context)) - : string.Empty + ? Doc.Concat(Doc.Line, InitializerExpression.Print(node.Initializer, context)) + : Doc.Null ); } } diff --git a/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/StackAllocArrayCreationExpressions.test b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/StackAllocArrayCreationExpressions.test index a0bcba979..1aafa720c 100644 --- a/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/StackAllocArrayCreationExpressions.test +++ b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/StackAllocArrayCreationExpressions.test @@ -1,10 +1,11 @@ -class ClassName +Span a = stackalloc int[3]; +Span a = stackalloc int[3] { 1, 2, 3 }; +Span a = stackalloc int[] { 1, 2, 3 }; +Span a = stackalloc[] { 1, 2, 3 }; + +Span metatable = stackalloc int[] { - void MethodName() - { - Span a = stackalloc int[3]; - Span a = stackalloc int[3] { 1, 2, 3 }; - Span a = stackalloc int[] { 1, 2, 3 }; - Span a = stackalloc[] { 1, 2, 3 }; - } -} + 00000000000000000000000001, + 00000000000000000000000002, + 00000000000000000000000003, +}; From 0c65b47bd2192c91678c0440c9c7b0b14359b8d7 Mon Sep 17 00:00:00 2001 From: Bela VanderVoort Date: Fri, 6 Feb 2026 13:54:39 -0600 Subject: [PATCH 2/2] Cleaning up an edge case --- Src/CSharpier.Core/CSharp/SyntaxPrinter/RightHandSide.cs | 1 + .../TestFiles/cs/StackAllocArrayCreationExpressions.test | 3 +++ 2 files changed, 4 insertions(+) diff --git a/Src/CSharpier.Core/CSharp/SyntaxPrinter/RightHandSide.cs b/Src/CSharpier.Core/CSharp/SyntaxPrinter/RightHandSide.cs index 76d2e1fab..71773bfde 100644 --- a/Src/CSharpier.Core/CSharp/SyntaxPrinter/RightHandSide.cs +++ b/Src/CSharpier.Core/CSharp/SyntaxPrinter/RightHandSide.cs @@ -126,6 +126,7 @@ or ConditionalExpressionSyntax or InterpolatedStringExpressionSyntax or IsPatternExpressionSyntax or LiteralExpressionSyntax + or StackAllocArrayCreationExpressionSyntax { Initializer: null } or QueryExpressionSyntax => Layout.BreakAfterOperator, _ => Layout.Fluid, }; diff --git a/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/StackAllocArrayCreationExpressions.test b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/StackAllocArrayCreationExpressions.test index 1aafa720c..55081736f 100644 --- a/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/StackAllocArrayCreationExpressions.test +++ b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/StackAllocArrayCreationExpressions.test @@ -3,6 +3,9 @@ Span a = stackalloc int[3] { 1, 2, 3 }; Span a = stackalloc int[] { 1, 2, 3 }; Span a = stackalloc[] { 1, 2, 3 }; +Span someLongName_________________________ = + stackalloc byte[JsonConstants.MaximumEscapedDateTimeOffsetParseLength]; + Span metatable = stackalloc int[] { 00000000000000000000000001,