Skip to content

Commit a8d180a

Browse files
committed
Leaving blank lines after multiline statements in a block
1 parent f32e04f commit a8d180a

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

ReadableExpressions.UnitTests/WhenFormattingCode.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ public void ShouldNotVarAssignAnOuterBlockDeclaredVariable()
218218
Console.WriteLine(name);
219219
Console.WriteLine(name);
220220
};
221+
221222
name = ""Alice"";
222223
writeNameTwice.Invoke();";
223224

@@ -498,6 +499,35 @@ public void ShouldTranslateNullToNull()
498499

499500
Assert.IsNull(translated);
500501
}
502+
503+
[TestMethod]
504+
public void ShouldLeaveABlankLineAfterAMultipleLineExpression()
505+
{
506+
Expression<Func<List<int>, IEnumerable<int>>> longCallChain = list => list
507+
.Select(i => i * 2)
508+
.Select(i => i * 3)
509+
.Select(i => i * 4)
510+
.ToArray();
511+
512+
var longChainblock = Expression.Block(longCallChain.Body, longCallChain.Body);
513+
514+
const string EXPECTED = @"
515+
list
516+
.Select(i => i * 2)
517+
.Select(i => i * 3)
518+
.Select(i => i * 4)
519+
.ToArray();
520+
521+
return list
522+
.Select(i => i * 2)
523+
.Select(i => i * 3)
524+
.Select(i => i * 4)
525+
.ToArray();";
526+
527+
var translated = longChainblock.ToReadableString();
528+
529+
Assert.AreEqual(EXPECTED.TrimStart(), translated);
530+
}
501531
}
502532

503533
#region Helper Classes

ReadableExpressions/StringExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ public static string Unterminated(this string codeLine)
2424

2525
private static readonly string[] _newLines = { Environment.NewLine };
2626

27-
public static string[] SplitToLines(this string line)
27+
public static string[] SplitToLines(this string line, StringSplitOptions splitOptions = StringSplitOptions.None)
2828
{
29-
return line.Split(_newLines, StringSplitOptions.None);
29+
return line.Split(_newLines, splitOptions);
3030
}
3131

3232
private const string IndentSpaces = " ";

ReadableExpressions/Translators/BlockExpressionTranslator.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,20 @@ private static IEnumerable<string> ProcessBlockContents(IList<string> lines, Blo
136136

137137
private static bool LeaveBlankLineAfter(string line, string nextLine)
138138
{
139-
return line.EndsWith('}') && !(string.IsNullOrEmpty(nextLine) || nextLine.StartsWithNewLine());
139+
return (line.EndsWith('}') || IsMultiLineStatement(line)) &&
140+
!(string.IsNullOrEmpty(nextLine) || nextLine.StartsWithNewLine());
141+
}
142+
143+
private static bool IsMultiLineStatement(string line)
144+
{
145+
if (!line.Contains(Environment.NewLine))
146+
{
147+
return false;
148+
}
149+
150+
return line
151+
.SplitToLines(StringSplitOptions.RemoveEmptyEntries)
152+
.Any(l => !l.IsTerminated());
140153
}
141154

142155
private static bool IncludeReturnStatement(BlockExpression block, ICollection<string> lines)

0 commit comments

Comments
 (0)