Skip to content

Commit

Permalink
Including lambda parameters in expression analysis - fixes #31
Browse files Browse the repository at this point in the history
  • Loading branch information
SteveWilkes committed Feb 7, 2019
1 parent e5a5696 commit 16b02f3
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
14 changes: 14 additions & 0 deletions ReadableExpressions.UnitTests/WhenTranslatingLambdas.cs
Expand Up @@ -140,6 +140,20 @@ public void ShouldTranslateQuotedLambdaWithAnAnnotation()
translated.ShouldBe(EXPECTED);
}

// See https://github.com/agileobjects/ReadableExpressions/issues/31
[Fact]
public void ShouldTranslateUnnamedLambdaParameters()
{
var stringsParameter = Expression.Parameter(typeof(string[]));
var linqSelect = CreateLambda((string[] ints) => ints.Select(int.Parse));
var linqSelectWithUnnamed = Expression.Lambda(linqSelect.Body, stringsParameter);
var quoted = Expression.Quote(linqSelectWithUnnamed);

var translated = ToReadableString(quoted);

translated.ShouldBe("stringArray => ints.Select(int.Parse)");
}

[Fact]
public void ShouldTranslateRuntimeVariables()
{
Expand Down
10 changes: 8 additions & 2 deletions ReadableExpressions/ExpressionAnalysis.cs
Expand Up @@ -196,8 +196,8 @@ private void Visit(Expression expression)
continue;

case ExpressionType.Lambda:
expression = ((LambdaExpression)expression).Body;
continue;
Visit((LambdaExpression)expression);
return;

case ExpressionType.ListInit:
Visit((ListInitExpression)expression);
Expand Down Expand Up @@ -381,6 +381,12 @@ private void Visit(InvocationExpression invocation)
Visit(invocation.Expression);
}

private void Visit(LambdaExpression lambda)
{
Visit(lambda.Parameters);
Visit(lambda.Body);
}

private void Visit(ListInitExpression init)
{
Visit(init.NewExpression);
Expand Down

0 comments on commit 16b02f3

Please sign in to comment.