diff --git a/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/NestedLoops.test b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/NestedLoops.test new file mode 100644 index 000000000..855ea5b8f --- /dev/null +++ b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/NestedLoops.test @@ -0,0 +1,82 @@ +public class ClassName +{ + public void MethodName() + { + foreach (var subsequence in sequence) + foreach (var item in subsequence) + item.DoSomething(); + + foreach (var item in subsequence) + while (item.IsSomething()) + item.DoSomething(); + + foreach (var item in sequence) + do item.DoSomething(); + while (false); + + foreach (var item in sequence) + for (; ; ) + item.DoSomething(); + + foreach (var subsequence in sequence) + { + foreach (var item in subsequence) + { + item.DoSomething(); + item.DoSomething(); + } + } + + await foreach (var subsequence in sequence) + await foreach (var item in subsequence) + item.DoSomething(); + + foreach (var subsequence in sequence) + await foreach (var item in subsequence) + { + item.DoSomething(); + item.DoSomething(); + } + + while (true) + foreach (var item in sequence) + item.DoSomething(); + + while (true) + while (true) + do Console.WriteLine(); + while (false); + + while (true) + for (; ; ) + Console.WriteLine(); + + while (true) + { + foreach (var item in sequence) + item.DoSomething(); + } + + for (; ; ) + foreach (var item in sequence) + item.DoSomething(); + + for (; ; ) + while (true) + Console.WriteLine(); + + for (; ; ) + do Console.WriteLine(); + while (false); + + for (; ; ) + for (; ; ) + item.DoSomething(); + + for (; ; ) + { + for (; ; ) + Console.WriteLine(); + } + } +} diff --git a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/CommonForEachStatement.cs b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/CommonForEachStatement.cs index 0d03b3e5a..d59bb9652 100644 --- a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/CommonForEachStatement.cs +++ b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/CommonForEachStatement.cs @@ -38,7 +38,12 @@ ForEachVariableStatementSyntax forEachVariable ), Token.Print(node.CloseParenToken, context) ), - OptionalBraces.Print(node.Statement, context) + node.Statement switch + { + CommonForEachStatementSyntax + => Doc.Group(Doc.HardLine, Node.Print(node.Statement, context)), + _ => OptionalBraces.Print(node.Statement, context) + } ); return docs; diff --git a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/ForStatement.cs b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/ForStatement.cs index 373c9d630..97854cc28 100644 --- a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/ForStatement.cs +++ b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/ForStatement.cs @@ -41,7 +41,11 @@ public static Doc Print(ForStatementSyntax node, FormattingContext context) ), Token.Print(node.CloseParenToken, context) ), - OptionalBraces.Print(node.Statement, context) + node.Statement switch + { + ForStatementSyntax => Doc.Group(Doc.HardLine, Node.Print(node.Statement, context)), + _ => OptionalBraces.Print(node.Statement, context) + } }; return Doc.Concat(docs); diff --git a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/WhileStatement.cs b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/WhileStatement.cs index abb671157..d87597509 100644 --- a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/WhileStatement.cs +++ b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/WhileStatement.cs @@ -16,7 +16,12 @@ public static Doc Print(WhileStatementSyntax node, FormattingContext context) ), Token.Print(node.CloseParenToken, context) ), - OptionalBraces.Print(node.Statement, context) + node.Statement switch + { + WhileStatementSyntax + => Doc.Group(Doc.HardLine, Node.Print(node.Statement, context)), + _ => OptionalBraces.Print(node.Statement, context) + } ); return result;