Skip to content

Commit 3836482

Browse files
committed
Including return keyword for block-ending coalesce statements
1 parent b767011 commit 3836482

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

ReadableExpressions.UnitTests/WhenTranslatingBlocks.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,5 +339,26 @@ public void ShouldIgnoreABlankLabelTargetLine()
339339

340340
Assert.AreEqual(EXPECTED, translated);
341341
}
342+
343+
[TestMethod]
344+
public void ShouldIncludeAReturnStatementForACoalesce()
345+
{
346+
var stringVariable1 = Expression.Variable(typeof(string), "myString");
347+
var stringVariable2 = Expression.Variable(typeof(string), "yourString");
348+
var assignStrings = Expression.Assign(stringVariable1, stringVariable2);
349+
350+
var stringEmpty = Expression.Field(null, typeof(string), "Empty");
351+
var variableOrNull = Expression.Coalesce(stringVariable1, stringEmpty);
352+
353+
var coalesceBlock = Expression.Block(assignStrings, variableOrNull);
354+
355+
var translated = coalesceBlock.ToReadableString();
356+
357+
const string EXPECTED = @"
358+
var myString = yourString;
359+
return (myString ?? string.Empty);";
360+
361+
Assert.AreEqual(EXPECTED.TrimStart(), translated);
362+
}
342363
}
343364
}

ReadableExpressions/Extensions/InternalExpressionExtensions.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
internal static class InternalExpressionExtensions
99
{
10-
11-
1210
public static bool IsReturnable(this Expression expression)
1311
{
1412
if (expression.Type == typeof(void))
@@ -27,6 +25,7 @@ public static bool IsReturnable(this Expression expression)
2725
case ExpressionType.Add:
2826
case ExpressionType.AddChecked:
2927
case ExpressionType.Call:
28+
case ExpressionType.Coalesce:
3029
case ExpressionType.Conditional:
3130
case ExpressionType.Convert:
3231
case ExpressionType.ConvertChecked:

ReadableExpressions/Translators/BlockExpressionTranslator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,8 @@ private static bool LeaveBlankLineBefore(string line, string previousLine = null
198198
return false;
199199
}
200200

201-
return line.StartsWith("if (") || line.StartsWith("switch ");
201+
return line.StartsWith("if (", StringComparison.Ordinal) ||
202+
line.StartsWith("switch ", StringComparison.Ordinal);
202203
}
203204

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

0 commit comments

Comments
 (0)