Example #1
0
        public override async Task ComputeRefactoringsAsync(CodeRefactoringContext context)
        {
            SyntaxNode root = await context.Document.GetSyntaxRootAsync(context.CancellationToken);

            ConditionalExpressionSyntax conditionalExpression = root
                                                                .FindNode(context.Span, getInnermostNodeForTie: true)?
                                                                .FirstAncestorOrSelf <ConditionalExpressionSyntax>();

            if (conditionalExpression == null)
            {
                return;
            }

            if (conditionalExpression.IsSingleline())
            {
                context.RegisterRefactoring(
                    "Format conditional expression on multiple lines",
                    cancellationToken => FormatConditionalExpressionOnMultipleLinesAsync(context.Document, conditionalExpression, cancellationToken));
            }
            else
            {
                context.RegisterRefactoring(
                    "Format conditional expression on a single line",
                    cancellationToken => FormatConditionalExpressionOnSingleLineAsync(context.Document, conditionalExpression, cancellationToken));
            }

            ConditionalExpressionToIfElseRefactoring.Refactor(context, conditionalExpression);

            if (conditionalExpression.Condition != null &&
                conditionalExpression.WhenTrue != null &&
                conditionalExpression.WhenFalse != null &&
                conditionalExpression.Condition.Span.Contains(context.Span))
            {
                context.RegisterRefactoring(
                    "Swap conditional expression's statements",
                    cancellationToken =>
                {
                    return(SwapStatementsAsync(
                               context.Document,
                               conditionalExpression,
                               cancellationToken));
                });
            }
        }