public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { SyntaxNode root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false); ConditionalExpressionSyntax conditionalExpression = root .FindNode(context.Span, getInnermostNodeForTie: true)? .FirstAncestorOrSelf <ConditionalExpressionSyntax>(); foreach (Diagnostic diagnostic in context.Diagnostics) { switch (diagnostic.Id) { case DiagnosticIdentifiers.ParenthesizeConditionInConditionalExpression: { CodeAction codeAction = CodeAction.Create( "Wrap condition in parentheses", cancellationToken => ParenthesizeConditionInConditionalExpressionRefactoring.RefactorAsync(context.Document, conditionalExpression, cancellationToken), diagnostic.Id + EquivalenceKeySuffix); context.RegisterCodeFix(codeAction, diagnostic); break; } case DiagnosticIdentifiers.UseCoalesceExpressionInsteadOfConditionalExpression: { CodeAction codeAction = CodeAction.Create( "Use coalesce expression", cancellationToken => { return(UseCoalesceExpressionInsteadOfConditionalExpressionRefactoring.RefactorAsync( context.Document, conditionalExpression, cancellationToken)); }, diagnostic.Id + EquivalenceKeySuffix); context.RegisterCodeFix(codeAction, diagnostic); break; } case DiagnosticIdentifiers.SimplifyConditionalExpression: { CodeAction codeAction = CodeAction.Create( "Simplify conditional expression", cancellationToken => { return(SimplifyConditionalExpressionRefactoring.RefactorAsync( context.Document, conditionalExpression, cancellationToken)); }, diagnostic.Id + EquivalenceKeySuffix); context.RegisterCodeFix(codeAction, diagnostic); break; } } } }
private void AnalyzeConditionalExpression(SyntaxNodeAnalysisContext context) { var conditionalExpression = (ConditionalExpressionSyntax)context.Node; ParenthesizeConditionInConditionalExpressionRefactoring.Analyze(context, conditionalExpression); UseCoalesceExpressionInsteadOfConditionalExpressionRefactoring.Analyze(context, conditionalExpression); SimplifyConditionalExpressionRefactoring.Analyze(context, conditionalExpression); }
public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { SyntaxNode root = await context.GetSyntaxRootAsync().ConfigureAwait(false); if (!TryFindFirstAncestorOrSelf(root, context.Span, out ConditionalExpressionSyntax conditionalExpression)) { return; } foreach (Diagnostic diagnostic in context.Diagnostics) { switch (diagnostic.Id) { case DiagnosticIdentifiers.ParenthesizeConditionInConditionalExpression: { CodeAction codeAction = CodeAction.Create( "Wrap condition in parentheses", cancellationToken => ParenthesizeConditionInConditionalExpressionRefactoring.RefactorAsync(context.Document, conditionalExpression, cancellationToken), GetEquivalenceKey(diagnostic)); context.RegisterCodeFix(codeAction, diagnostic); break; } case DiagnosticIdentifiers.UseCoalesceExpressionInsteadOfConditionalExpression: { CodeAction codeAction = CodeAction.Create( "Use coalesce expression", cancellationToken => { return(UseCoalesceExpressionInsteadOfConditionalExpressionRefactoring.RefactorAsync( context.Document, conditionalExpression, cancellationToken)); }, GetEquivalenceKey(diagnostic)); context.RegisterCodeFix(codeAction, diagnostic); break; } case DiagnosticIdentifiers.SimplifyConditionalExpression: { CodeAction codeAction = CodeAction.Create( "Simplify conditional expression", cancellationToken => { return(SimplifyConditionalExpressionRefactoring.RefactorAsync( context.Document, conditionalExpression, cancellationToken)); }, GetEquivalenceKey(diagnostic)); context.RegisterCodeFix(codeAction, diagnostic); break; } case DiagnosticIdentifiers.FormatConditionalExpression: { CodeAction codeAction = CodeAction.Create( "Format ? and : on next line", cancellationToken => { return(FormatConditionalExpressionRefactoring.RefactorAsync( context.Document, conditionalExpression, cancellationToken)); }, GetEquivalenceKey(diagnostic)); context.RegisterCodeFix(codeAction, diagnostic); break; } case DiagnosticIdentifiers.UseConditionalAccessInsteadOfConditionalExpression: { CodeAction codeAction = CodeAction.Create( "Use conditional access", cancellationToken => { return(UseConditionalAccessRefactoring.RefactorAsync( context.Document, conditionalExpression, cancellationToken)); }, GetEquivalenceKey(diagnostic)); context.RegisterCodeFix(codeAction, diagnostic); break; } } } }