From d195f142e1bdc3a77ea1abc49cb73406037b6610 Mon Sep 17 00:00:00 2001 From: belav Date: Sat, 11 Sep 2021 10:44:16 -0500 Subject: [PATCH] Improving formatting of Conditional in Return closes #416 --- .../TestFiles/ConditionalExpressions.cst | 13 ++++++++++++ Src/CSharpier/DocTypes/Doc.cs | 2 +- .../SyntaxNodePrinters/BinaryExpression.cs | 20 +++++++++---------- .../ConditionalExpression.cs | 13 ++++++++++-- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/Src/CSharpier.Tests/FormattingTests/TestFiles/ConditionalExpressions.cst b/Src/CSharpier.Tests/FormattingTests/TestFiles/ConditionalExpressions.cst index 273af547f..e99975ea7 100644 --- a/Src/CSharpier.Tests/FormattingTests/TestFiles/ConditionalExpressions.cst +++ b/Src/CSharpier.Tests/FormattingTests/TestFiles/ConditionalExpressions.cst @@ -62,5 +62,18 @@ public class ClassName encoding ? GetEncoding(1252) : encoding, cancellationToken ); + + return + someLongCondition____________________________________ + && someOtherLongCondition____________________________________ + ? trueValue________________________________ + : falseValue_______________________________; + + return + someLongCondition____________________________________ + == someThingElse______________________ + && someOtherLongCondition____________________________________ + ? trueValue________________________________ + : falseValue_______________________________; } } diff --git a/Src/CSharpier/DocTypes/Doc.cs b/Src/CSharpier/DocTypes/Doc.cs index 93eaea4d5..104987d52 100644 --- a/Src/CSharpier/DocTypes/Doc.cs +++ b/Src/CSharpier/DocTypes/Doc.cs @@ -96,7 +96,7 @@ public static IndentDoc Indent(params Doc[] contents) => public static IndentDoc Indent(List contents) => new() { Contents = Concat(contents) }; - public static Doc IndentIf(bool condition, Concat contents) + public static Doc IndentIf(bool condition, Doc contents) { return condition ? Doc.Indent(contents) : contents; } diff --git a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/BinaryExpression.cs b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/BinaryExpression.cs index 091440d30..76ac4c6a7 100644 --- a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/BinaryExpression.cs +++ b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/BinaryExpression.cs @@ -18,21 +18,21 @@ public static Doc Print(BinaryExpressionSyntax node) var shouldNotIndent = node.Parent - is ReturnStatementSyntax - or WhereClauseSyntax + is ArrowExpressionClauseSyntax + or AssignmentExpressionSyntax + or CatchFilterClauseSyntax + or CheckedExpressionSyntax + or DoStatementSyntax or EqualsValueClauseSyntax - or ArrowExpressionClauseSyntax + or IfStatementSyntax + or ParenthesizedExpressionSyntax or ParenthesizedLambdaExpressionSyntax - or AssignmentExpressionSyntax or SimpleLambdaExpressionSyntax - or IfStatementSyntax - or WhileStatementSyntax + or ReturnStatementSyntax or SwitchExpressionSyntax - or DoStatementSyntax - or CheckedExpressionSyntax - or CatchFilterClauseSyntax - or ParenthesizedExpressionSyntax or SwitchStatementSyntax + or WhereClauseSyntax + or WhileStatementSyntax || node.Parent is ConditionalExpressionSyntax && node.Parent.Parent is not ArgumentSyntax; diff --git a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/ConditionalExpression.cs b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/ConditionalExpression.cs index 20911d500..dfdf6d4c6 100644 --- a/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/ConditionalExpression.cs +++ b/Src/CSharpier/SyntaxPrinter/SyntaxNodePrinters/ConditionalExpression.cs @@ -18,8 +18,17 @@ public static Doc Print(ConditionalExpressionSyntax node) }; return Doc.Group( - Node.Print(node.Condition), - node.Parent is ConditionalExpressionSyntax or ArgumentSyntax + Doc.IndentIf( + node.Parent is ReturnStatementSyntax, + Doc.Concat( + node.Parent is ReturnStatementSyntax ? Doc.SoftLine : Doc.Null, + Node.Print(node.Condition) + ) + ), + node.Parent + is ConditionalExpressionSyntax + or ArgumentSyntax + or ReturnStatementSyntax ? Doc.Align(2, contents) : Doc.Indent(contents) );