@@ -213,8 +213,16 @@ protected override void WriteLambda(LambdaExpression expr) {
213213 Write ( "{" ) ;
214214 Indent ( ) ;
215215 WriteEOL ( ) ;
216- if ( expr . Body . Type != typeof ( void ) ) { Write ( "return " ) ; }
217- WriteNode ( "Body" , expr . Body , CreateMetadata ( CSharpMultilineBlockTypes . Block ) ) ;
216+
217+ CSharpMultilineBlockTypes blockType = CSharpMultilineBlockTypes . Block ;
218+ if ( expr . Body . Type != typeof ( void ) ) {
219+ if ( expr . Body is BlockExpression bexpr && bexpr . HasMultipleLines ( ) ) {
220+ blockType = CSharpMultilineBlockTypes . Return ;
221+ } else {
222+ Write ( "return " ) ;
223+ }
224+ }
225+ WriteNode ( "Body" , expr . Body , CreateMetadata ( blockType ) ) ;
218226 WriteStatementEnd ( expr . Body ) ;
219227 WriteEOL ( true ) ;
220228 Write ( "}" ) ;
@@ -535,7 +543,7 @@ protected override void WriteIndex(IndexExpression expr) =>
535543 protected override void WriteBlock ( BlockExpression expr , object metadata ) {
536544 var ( blockType , parentIsBlock ) = ( CSharpBlockMetadata ) metadata ?? CreateMetadata ( Inline , false ) ;
537545 bool introduceNewBlock ;
538- if ( blockType == CSharpMultilineBlockTypes . Block ) {
546+ if ( blockType . In ( CSharpMultilineBlockTypes . Block , CSharpMultilineBlockTypes . Return ) ) {
539547 introduceNewBlock = expr . Variables . Any ( ) && parentIsBlock ;
540548 if ( introduceNewBlock ) {
541549 Write ( "{" ) ;
@@ -550,7 +558,16 @@ protected override void WriteBlock(BlockExpression expr, object metadata) {
550558 expr . Expressions . ForEach ( ( subexpr , index ) => {
551559 if ( index > 0 ) { WriteEOL ( ) ; }
552560 if ( subexpr is LabelExpression ) { TrimEnd ( ) ; }
553- WriteNode ( $ "Expressions[{ index } ]", subexpr , CreateMetadata ( blockType , true ) ) ;
561+ if ( blockType == CSharpMultilineBlockTypes . Return && index == expr . Expressions . Count - 1 ) {
562+ if ( subexpr is BlockExpression bexpr && bexpr . HasMultipleLines ( ) ) {
563+ WriteNode ( $ "Expressions[{ index } ]", subexpr , CreateMetadata ( CSharpMultilineBlockTypes . Return , true ) ) ;
564+ } else {
565+ Write ( "return " ) ;
566+ WriteNode ( $ "Expressions[{ index } ]", subexpr , CreateMetadata ( CSharpMultilineBlockTypes . Block , true ) ) ;
567+ }
568+ } else {
569+ WriteNode ( $ "Expressions[{ index } ]", subexpr , CreateMetadata ( CSharpMultilineBlockTypes . Block , true ) ) ;
570+ }
554571 WriteStatementEnd ( subexpr ) ;
555572 } ) ;
556573 if ( introduceNewBlock ) {
@@ -712,7 +729,7 @@ protected override void WriteGoto(GotoExpression expr) {
712729 case GotoExpressionKind . Goto :
713730 gotoKeyword = "goto" ;
714731 break ;
715- case Return :
732+ case GotoExpressionKind . Return :
716733 gotoKeyword = "return" ;
717734 break ;
718735 default :
0 commit comments