提交 b779b9cc 编写于 作者: T Tomas Matousek

Fix an oversight in VB TryGetLambdaBodies and add a couple of tests to VB

上级 ab835f7d
......@@ -23,19 +23,24 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Case SyntaxKind.WhereClause
Return DirectCast(newLambda, WhereClauseSyntax).Condition
' source sequence in From and Aggregate (other than the first in the query)
Case SyntaxKind.CollectionRangeVariable
Return DirectCast(newLambda, CollectionRangeVariableSyntax).Expression
' function call in Group By, Group Join, Aggregate: the argument
Case SyntaxKind.FunctionAggregation
Return DirectCast(newLambda, FunctionAggregationSyntax).Argument
' variable in Let, Select, Group By: the RHS
Case SyntaxKind.ExpressionRangeVariable
Return DirectCast(newLambda, ExpressionRangeVariableSyntax).Expression
Case SyntaxKind.TakeWhileClause, SyntaxKind.SkipWhileClause
Case SyntaxKind.TakeWhileClause,
SyntaxKind.SkipWhileClause
Return DirectCast(newLambda, PartitionWhileClauseSyntax).Condition
Case SyntaxKind.AscendingOrdering, SyntaxKind.DescendingOrdering
Case SyntaxKind.AscendingOrdering,
SyntaxKind.DescendingOrdering
Return DirectCast(newLambda, OrderingSyntax).Expression
Case SyntaxKind.JoinCondition
......
......@@ -4166,6 +4166,34 @@ End Class
Diagnostic(RudeEditKind.RUDE_EDIT_LAMBDA_EXPRESSION, "Function(b)", "method"))
End Sub
<Fact>
Public Sub Lambdas_ActiveStatementRemoved4()
Dim src1 = "
Class C
Shared Sub Main()
Dim f = Function(a)
<AS:1>z(2)</AS:1>
return Function (b)
<AS:0>Return b</AS:0>
End Function
End Function
End Sub
End Class"
Dim src2 = "
Class C
<AS:0,1>Shared Sub Main()</AS:0,1>
End Sub
End Class
"
Dim edits = GetTopEdits(src1, src2)
Dim active = GetActiveStatements(src1, src2)
edits.VerifyRudeDiagnostics(active,
Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Shared Sub Main()", "lambda"),
Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Shared Sub Main()", "lambda"))
End Sub
<Fact>
Public Sub Queries_ActiveStatementRemoved_WhereClause()
Dim src1 = "
......
......@@ -2001,6 +2001,30 @@ End Class
Diagnostic(RudeEditKind.AwaitStatementUpdate, "a += Await F(1)"))
End Sub
<Fact(Skip:="TODO: Enable lambda edits")>
Public Sub MethodWithLambda_Update()
Dim src1 = "
Class C
Shared Sub F()
Dim a = Function() 1
End Sub
End Class
"
Dim src2 = "
Class C
Shared Sub F()
Dim a = Function() 1
Console.WriteLine(1)
End Sub
End Class
"
Dim edits = GetTopEdits(src1, src2)
edits.VerifySemantics(
ActiveStatementsDescription.Empty,
{SemanticEdit(SemanticEditKind.Update, Function(c) c.GetMember("C.F"), preserveLocalVariables:=True)})
End Sub
<Fact>
Public Sub MethodUpdate_AddAttribute()
Dim src1 = "Class C : " & vbLf & "Sub F() : End Sub : End Class"
......
......@@ -71,8 +71,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.EditAndContinue
Dim body1 As SyntaxNode = Nothing
Dim body2 As SyntaxNode = Nothing
Return TryGetLambdaBodies(parent, body1, body2) AndAlso
(node Is body1 OrElse node Is body2)
Dim result = TryGetLambdaBodies(parent, body1, body2)
body = If(node Is body2, body2, body1)
Return result
End Function
Public Shared Function TryGetLambdaBodies(node As SyntaxNode, <Out> ByRef body1 As SyntaxNode, <Out> ByRef body2 As SyntaxNode) As Boolean
......@@ -109,7 +110,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.EditAndContinue
' variable in Let, Select, Group By: the RHS
Case SyntaxKind.ExpressionRangeVariable
body1 = DirectCast(node, ExpressionRangeVariableSyntax)
body1 = DirectCast(node, ExpressionRangeVariableSyntax).Expression
Return True
Case SyntaxKind.TakeWhileClause,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册