in src/Features/VisualBasic/Portable/EditAndContinue/StatementSyntaxComparer.vb [323:729]
Friend Shared Function Classify(kind As SyntaxKind, nodeOpt As SyntaxNode, <Out> ByRef isLeaf As Boolean) As Label
isLeaf = False
Select Case kind
Case SyntaxKind.SubBlock,
SyntaxKind.ConstructorBlock,
SyntaxKind.FunctionBlock,
SyntaxKind.OperatorBlock,
SyntaxKind.GetAccessorBlock,
SyntaxKind.SetAccessorBlock,
SyntaxKind.AddHandlerAccessorBlock,
SyntaxKind.RemoveHandlerAccessorBlock,
SyntaxKind.RaiseEventAccessorBlock
Return Label.BodyBlock
Case SyntaxKind.SubStatement,
SyntaxKind.SubNewStatement,
SyntaxKind.FunctionStatement,
SyntaxKind.OperatorStatement,
SyntaxKind.GetAccessorStatement,
SyntaxKind.SetAccessorStatement,
SyntaxKind.AddHandlerAccessorStatement,
SyntaxKind.RemoveHandlerAccessorStatement,
SyntaxKind.RaiseEventAccessorStatement
isLeaf = True
Return Label.BodyBegin
Case SyntaxKind.SubLambdaHeader,
SyntaxKind.FunctionLambdaHeader
isLeaf = True
Return Label.LambdaBodyBegin
Case SyntaxKind.EndSubStatement,
SyntaxKind.EndFunctionStatement,
SyntaxKind.EndOperatorStatement,
SyntaxKind.EndGetStatement,
SyntaxKind.EndSetStatement,
SyntaxKind.EndAddHandlerStatement,
SyntaxKind.EndRemoveHandlerStatement,
SyntaxKind.EndRaiseEventStatement
isLeaf = True
Return Label.BodyEnd
Case SyntaxKind.SimpleDoLoopBlock,
SyntaxKind.DoWhileLoopBlock,
SyntaxKind.DoUntilLoopBlock,
SyntaxKind.DoLoopWhileBlock,
SyntaxKind.DoLoopUntilBlock,
SyntaxKind.WhileBlock
Return Label.DoWhileBlock
Case SyntaxKind.SimpleDoStatement, SyntaxKind.DoWhileStatement, SyntaxKind.DoUntilStatement,
SyntaxKind.WhileStatement
Return Label.DoWhileStatement
Case SyntaxKind.WhileClause,
SyntaxKind.UntilClause
Return Label.WhileOrUntilClause
Case SyntaxKind.SimpleLoopStatement, SyntaxKind.LoopWhileStatement, SyntaxKind.LoopUntilStatement,
SyntaxKind.EndWhileStatement
Return Label.EndLoop
Case SyntaxKind.ForBlock
Return Label.ForBlock
Case SyntaxKind.ForEachBlock
Return Label.ForEachBlock
Case SyntaxKind.ForStatement
Return Label.ForStatement
Case SyntaxKind.ForEachStatement
Return Label.ForEachStatement
Case SyntaxKind.ForStepClause
Return Label.ForStepClause
Case SyntaxKind.NextStatement
isLeaf = True
Return Label.NextStatement
Case SyntaxKind.UsingBlock
Return Label.UsingBlock
Case SyntaxKind.UsingStatement
Return Label.UsingStatement
Case SyntaxKind.EndUsingStatement
isLeaf = True
Return Label.EndUsingStatement
Case SyntaxKind.SyncLockBlock
Return Label.SyncLockBlock
Case SyntaxKind.SyncLockStatement
Return Label.SyncLockStatement
Case SyntaxKind.EndSyncLockStatement
isLeaf = True
Return Label.EndSyncLockStatement
Case SyntaxKind.WithBlock
Return Label.WithBlock
Case SyntaxKind.WithStatement
Return Label.WithStatement
Case SyntaxKind.EndWithStatement
isLeaf = True
Return Label.EndWithStatement
Case SyntaxKind.LocalDeclarationStatement
Return Label.LocalDeclarationStatement
Case SyntaxKind.VariableDeclarator
Return Label.LocalVariableDeclarator
Case SyntaxKind.ModifiedIdentifier
Return Label.LocalVariableName
Case SyntaxKind.MultiLineIfBlock,
SyntaxKind.SingleLineIfStatement
Return Label.IfBlock
Case SyntaxKind.MultiLineIfBlock,
SyntaxKind.SingleLineIfStatement
Return Label.IfBlock
Case SyntaxKind.IfStatement
Return Label.IfStatement
Case SyntaxKind.ElseIfBlock
Return Label.ElseIfBlock
Case SyntaxKind.ElseIfStatement
Return Label.ElseIfStatement
Case SyntaxKind.ElseBlock,
SyntaxKind.SingleLineElseClause
Return Label.ElseBlock
Case SyntaxKind.ElseStatement
isLeaf = True
Return Label.ElseStatement
Case SyntaxKind.EndIfStatement
isLeaf = True
Return Label.EndIfStatement
Case SyntaxKind.TryBlock
Return Label.TryBlock
Case SyntaxKind.TryBlock
Return Label.TryBlock
Case SyntaxKind.TryStatement
Return Label.TryStatement
Case SyntaxKind.CatchBlock
Return Label.CatchBlock
Case SyntaxKind.CatchStatement
Return Label.CatchStatement
Case SyntaxKind.FinallyBlock
Return Label.FinallyBlock
Case SyntaxKind.FinallyStatement
Return Label.FinallyStatement
Case SyntaxKind.CatchFilterClause
Return Label.CatchFilterClause
Case SyntaxKind.EndTryStatement
isLeaf = True
Return Label.EndTryStatement
Case SyntaxKind.ErrorStatement
isLeaf = True
Return Label.ErrorStatement
Case SyntaxKind.ThrowStatement
Return Label.ThrowStatement
Case SyntaxKind.OnErrorGoToZeroStatement,
SyntaxKind.OnErrorGoToMinusOneStatement,
SyntaxKind.OnErrorGoToLabelStatement,
SyntaxKind.OnErrorResumeNextStatement
Return Label.OnErrorStatement
Case SyntaxKind.ResumeStatement,
SyntaxKind.ResumeLabelStatement,
SyntaxKind.ResumeNextStatement
Return Label.ResumeStatement
Case SyntaxKind.SelectBlock
Return Label.SelectBlock
Case SyntaxKind.SelectStatement
Return Label.SelectStatement
Case SyntaxKind.CaseBlock,
SyntaxKind.CaseElseBlock
Return Label.CaseBlock
Case SyntaxKind.CaseStatement,
SyntaxKind.CaseElseStatement
Return Label.CaseStatement
Case SyntaxKind.ElseCaseClause,
SyntaxKind.SimpleCaseClause,
SyntaxKind.RangeCaseClause,
SyntaxKind.CaseEqualsClause,
SyntaxKind.CaseNotEqualsClause,
SyntaxKind.CaseLessThanClause,
SyntaxKind.CaseLessThanOrEqualClause,
SyntaxKind.CaseGreaterThanOrEqualClause,
SyntaxKind.CaseGreaterThanClause
Return Label.CaseClause
Case SyntaxKind.EndSelectStatement
isLeaf = True
Return Label.EndSelectStatement
Case SyntaxKind.ExitForStatement,
SyntaxKind.ExitDoStatement,
SyntaxKind.ExitWhileStatement,
SyntaxKind.ExitSelectStatement,
SyntaxKind.ExitTryStatement,
SyntaxKind.ExitSubStatement,
SyntaxKind.ExitFunctionStatement,
SyntaxKind.ExitOperatorStatement,
SyntaxKind.ExitPropertyStatement
isLeaf = True
Return Label.ExitStatement
Case SyntaxKind.ContinueWhileStatement,
SyntaxKind.ContinueDoStatement,
SyntaxKind.ContinueForStatement
isLeaf = True
Return Label.ContinueStatement
Case SyntaxKind.ReturnStatement
Return Label.ReturnStatement
Case SyntaxKind.GoToStatement,
SyntaxKind.StopStatement,
SyntaxKind.EndStatement
isLeaf = True
Return Label.GoToStatement
Case SyntaxKind.LabelStatement
isLeaf = True
Return Label.LabelStatement
Case SyntaxKind.EraseStatement
isLeaf = True
Return Label.EraseStatement
Case SyntaxKind.ExpressionStatement,
SyntaxKind.CallStatement
Return Label.ExpressionStatement
Case SyntaxKind.MidAssignmentStatement,
SyntaxKind.SimpleAssignmentStatement,
SyntaxKind.AddAssignmentStatement,
SyntaxKind.SubtractAssignmentStatement,
SyntaxKind.MultiplyAssignmentStatement,
SyntaxKind.DivideAssignmentStatement,
SyntaxKind.IntegerDivideAssignmentStatement,
SyntaxKind.ExponentiateAssignmentStatement,
SyntaxKind.LeftShiftAssignmentStatement,
SyntaxKind.RightShiftAssignmentStatement,
SyntaxKind.ConcatenateAssignmentStatement
Return Label.AssignmentStatement
Case SyntaxKind.AddHandlerStatement,
SyntaxKind.RemoveHandlerStatement,
SyntaxKind.RaiseEventStatement
Return Label.EventHandlerStatement
Case SyntaxKind.ReDimStatement,
SyntaxKind.ReDimPreserveStatement
Return Label.ReDimStatement
Case SyntaxKind.RedimClause
Return Label.ReDimClause
Case SyntaxKind.YieldStatement
Return Label.YieldStatement
Case SyntaxKind.SingleLineFunctionLambdaExpression,
SyntaxKind.SingleLineSubLambdaExpression,
SyntaxKind.MultiLineFunctionLambdaExpression,
SyntaxKind.MultiLineSubLambdaExpression
Return Label.Lambda
Case SyntaxKind.FunctionLambdaHeader,
SyntaxKind.SubLambdaHeader
isLeaf = True
Return Label.Ignored
Case SyntaxKind.QueryExpression
Return Label.QueryExpression
Case SyntaxKind.WhereClause
Return Label.WhereClauseLambda
Case SyntaxKind.LetClause
Return Label.LetClause
Case SyntaxKind.SkipClause,
SyntaxKind.TakeClause
Return Label.PartitionClause
Case SyntaxKind.TakeWhileClause,
SyntaxKind.SkipWhileClause
Return Label.PartitionWhileLambda
Case SyntaxKind.AscendingOrdering,
SyntaxKind.DescendingOrdering
Return Label.OrderingLambda
Case SyntaxKind.FunctionAggregation
Return Label.FunctionAggregationLambda
Case SyntaxKind.SelectClause
Return Label.SelectClauseLambda
Case SyntaxKind.GroupByClause
Return Label.GroupByClause
Case SyntaxKind.OrderByClause
Return Label.OrderByClause
Case SyntaxKind.SimpleJoinClause,
SyntaxKind.GroupJoinClause
Return Label.JoinClause
Case SyntaxKind.AggregateClause
Return Label.AggregateClause
Case SyntaxKind.FromClause
Return Label.FromClause
Case SyntaxKind.ExpressionRangeVariable
If nodeOpt IsNot Nothing AndAlso
nodeOpt.Parent.IsKind(SyntaxKind.GroupByClause) AndAlso
nodeOpt.SpanStart < DirectCast(nodeOpt.Parent, GroupByClauseSyntax).ByKeyword.SpanStart Then
Return Label.ExpressionRangeVariableItems
Else
Return Label.ExpressionRangeVariable
End If
Case SyntaxKind.CollectionRangeVariable
Return Label.CollectionRangeVariable
Case SyntaxKind.JoinCondition
Return Label.JoinConditionLambda
Case SyntaxKind.GenericName
isLeaf = True
Return Label.Ignored
Case Else
Return Label.Ignored
End Select
End Function