提交 b65381aa 编写于 作者: E Emile Fokkema

simplify further, changing four tests in the process

上级 986d69e4
......@@ -2479,10 +2479,10 @@ class Program
{
static void Main(string[] args)
{
Func<int, Func<int, int>> f = x =>
Func<int, Func<int, int>> f = x => y =>
{
var {|Rename:v|} = x + 1;
return y => v;
return v;
};
}
}",
......@@ -2539,8 +2539,11 @@ class Program
{
static void Main(string[] args)
{
Func<int, int> {|Rename:p|} = y => y + 1;
Func<int, Func<int, int>> f = x => p;
Func<int, Func<int, int>> f = x =>
{
Func<int, int> {|Rename:p|} = y => y + 1;
return p;
};
}
}");
}
......@@ -4377,11 +4380,11 @@ class TestClass
@"using System;
class TestClass
{
Func<int, int> Y()
Func<int, int> Y() => f =>
{
const int {|Rename:V|} = 9;
return f => f * V;
}
return f * V;
};
}";
await TestInRegularAndScriptAsync(code, expected, index: 2);
......@@ -4431,11 +4434,11 @@ class TestClass
@"using System;
class TestClass
{
Func<int, int> Y()
Func<int, int> Y() => (f) =>
{
const int {|Rename:V|} = 9;
return (f) => f * V;
}
return f * V;
};
}";
await TestInRegularAndScriptAsync(code, expected, index: 2);
......
......@@ -28,7 +28,8 @@ internal partial class CSharpIntroduceVariableService
bool isConstant,
CancellationToken cancellationToken)
{
var containerToGenerateInto = GetContainerToGenerateInto(document, expression, cancellationToken);
var containerToGenerateInto = expression.Ancestors().FirstOrDefault(s =>
s is BlockSyntax || s is ArrowExpressionClauseSyntax || s is LambdaExpressionSyntax);
var newLocalNameToken = GenerateUniqueLocalName(
document, expression, isConstant, containerToGenerateInto, cancellationToken);
......@@ -74,18 +75,6 @@ internal partial class CSharpIntroduceVariableService
throw new InvalidOperationException();
}
private SyntaxNode GetContainerToGenerateInto(
SemanticDocument document, ExpressionSyntax expression, CancellationToken cancellationToken)
{
var anonymousMethodParameters = GetAnonymousMethodParameters(document, expression, cancellationToken);
var lambdas = anonymousMethodParameters.SelectMany(p => p.ContainingSymbol.DeclaringSyntaxReferences.Select(r => r.GetSyntax(cancellationToken)).AsEnumerable())
.OfType<LambdaExpressionSyntax>()
.ToSet();
return expression.Ancestors().FirstOrDefault(s =>
s is BlockSyntax || s is ArrowExpressionClauseSyntax || lambdas.Contains(s));
}
private Document IntroduceLocalDeclarationIntoLambda(
SemanticDocument document,
LambdaExpressionSyntax oldLambda,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册