public static void AnalyzeAnonymousMethodExpression(SyntaxNodeAnalysisContext context)
        {
            var anonymousMethod = (AnonymousMethodExpressionSyntax)context.Node;

            if (anonymousMethod.SpanContainsDirectives())
            {
                return;
            }

            SyntaxToken asyncKeyword = anonymousMethod.AsyncKeyword;

            if (!asyncKeyword.IsKind(SyntaxKind.AsyncKeyword))
            {
                return;
            }

            RemoveAsyncAwaitResult result = RemoveAsyncAwaitAnalysis.Analyze(anonymousMethod, context.SemanticModel, context.CancellationToken);

            if (!result.Success)
            {
                return;
            }

            ReportDiagnostic(context, asyncKeyword, result);
        }
        public static void AnalyzeLocalFunctionStatement(SyntaxNodeAnalysisContext context)
        {
            var localFunction = (LocalFunctionStatementSyntax)context.Node;

            if (localFunction.SpanContainsDirectives())
            {
                return;
            }

            SyntaxToken asyncKeyword = localFunction.Modifiers.Find(SyntaxKind.AsyncKeyword);

            if (!asyncKeyword.IsKind(SyntaxKind.AsyncKeyword))
            {
                return;
            }

            RemoveAsyncAwaitResult result = RemoveAsyncAwaitAnalysis.Analyze(localFunction, context.SemanticModel, context.CancellationToken);

            if (!result.Success)
            {
                return;
            }

            ReportDiagnostic(context, asyncKeyword, result);
        }
        public static async Task ComputeRefactoringsAsync(RefactoringContext context, SyntaxToken token)
        {
            SyntaxNode parent = token.Parent;

            switch (parent.Kind())
            {
            case SyntaxKind.MethodDeclaration:
            {
                var methodDeclaration = (MethodDeclarationSyntax)parent;

                SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false);

                RemoveAsyncAwaitResult result = RemoveAsyncAwaitAnalysis.Analyze(methodDeclaration, semanticModel, context.CancellationToken);

                ComputeRefactoring(context, token, result);

                return;
            }

            case SyntaxKind.LocalFunctionStatement:
            {
                var localFunction = (LocalFunctionStatementSyntax)parent;

                SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false);

                RemoveAsyncAwaitResult result = RemoveAsyncAwaitAnalysis.Analyze(localFunction, semanticModel, context.CancellationToken);

                ComputeRefactoring(context, token, result);

                return;
            }

            case SyntaxKind.ParenthesizedLambdaExpression:
            {
                var parenthesizedLambda = (ParenthesizedLambdaExpressionSyntax)parent;

                SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false);

                RemoveAsyncAwaitResult result = RemoveAsyncAwaitAnalysis.Analyze(parenthesizedLambda, semanticModel, context.CancellationToken);

                ComputeRefactoring(context, token, result);

                return;
            }

            case SyntaxKind.SimpleLambdaExpression:
            {
                var simpleLambda = (SimpleLambdaExpressionSyntax)parent;

                SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false);

                RemoveAsyncAwaitResult result = RemoveAsyncAwaitAnalysis.Analyze(simpleLambda, semanticModel, context.CancellationToken);

                ComputeRefactoring(context, token, result);

                return;
            }

            case SyntaxKind.AnonymousMethodExpression:
            {
                var anonymousMethod = (AnonymousMethodExpressionSyntax)parent;

                SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false);

                RemoveAsyncAwaitResult result = RemoveAsyncAwaitAnalysis.Analyze(anonymousMethod, semanticModel, context.CancellationToken);

                ComputeRefactoring(context, token, result);

                return;
            }
            }
        }