Skip to content

Commit 1ed8e92

Browse files
committed
Fixing double blank line between object inits and if statements
1 parent 3f46c8c commit 1ed8e92

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

ReadableExpressions.UnitTests/WhenFormattingCode.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,47 @@ public void ShouldNotLeaveDoubleBlankLinesBetweenIfStatements()
776776
{
777777
}
778778
779+
if (i == 1)
780+
{
781+
}";
782+
783+
var translated = block.ToReadableString();
784+
785+
Assert.AreEqual(EXPECTED.TrimStart(), translated);
786+
}
787+
788+
[TestMethod]
789+
public void ShouldNotLeaveDoubleBlankLinesBetweenInitAndIfStatements()
790+
{
791+
Expression<Action> writeWat = () => Console.WriteLine("Wat");
792+
Expression<Func<long>> read = () => Console.Read();
793+
794+
var newMemoryStream = Expression.New(typeof(MemoryStream));
795+
var positionProperty = newMemoryStream.Type.GetProperty("Position");
796+
var valueBlock = Expression.Block(writeWat.Body, read.Body);
797+
// ReSharper disable once AssignNullToNotNullAttribute
798+
var positionInit = Expression.Bind(positionProperty, valueBlock);
799+
var memoryStreamInit = Expression.MemberInit(newMemoryStream, positionInit);
800+
801+
var intVariable = Expression.Variable(typeof(int), "i");
802+
var one = Expression.Constant(1);
803+
var intVariableEqualsOne = Expression.Equal(intVariable, one);
804+
var doNothing = Expression.Default(typeof(void));
805+
var ifIntEqualsOneDoNothing = Expression.IfThen(intVariableEqualsOne, doNothing);
806+
807+
var block = Expression.Block(memoryStreamInit, ifIntEqualsOneDoNothing);
808+
809+
const string EXPECTED = @"
810+
new MemoryStream
811+
{
812+
Position =
813+
{
814+
Console.WriteLine(""Wat"");
815+
816+
return ((long)Console.Read());
817+
}
818+
};
819+
779820
if (i == 1)
780821
{
781822
}";

ReadableExpressions/Translators/BlockExpressionTranslator.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ private static bool StatementIsTerminated(string translation, Expression express
169169
return true;
170170

171171
case ExpressionType.Assign:
172+
case ExpressionType.MemberInit:
172173
return false;
173174
}
174175

@@ -200,13 +201,13 @@ private static bool UseFullTypeName(BinaryExpression assignment)
200201

201202
private static bool LeaveBlankLineBefore(string line, string previousLine = null)
202203
{
203-
if ((previousLine != null) && LeaveBlankLineBefore(previousLine))
204+
if ((previousLine != null) && LeaveBlankLineAfter(previousLine, line))
204205
{
205206
return false;
206207
}
207208

208209
return line.StartsWith("if (", StringComparison.Ordinal) ||
209-
line.StartsWith("switch ", StringComparison.Ordinal);
210+
line.StartsWith("switch ", StringComparison.Ordinal);
210211
}
211212

212213
private static bool LeaveBlankLineAfter(string line, string nextLine)

0 commit comments

Comments
 (0)