public override async Task RegisterCodeFixesAsync(CodeFixContext context)
        {
            SyntaxNode root = await context.GetSyntaxRootAsync().ConfigureAwait(false);

            if (!TryFindNode(root, context.Span, out SyntaxNode node))
            {
                return;
            }

            Diagnostic diagnostic = context.Diagnostics[0];

            if (diagnostic.Properties.TryGetValue("Identifier", out string identifier))
            {
                CodeAction codeAction = CodeAction.Create(
                    Title,
                    ct => UseNameOfOperatorRefactoring.RefactorAsync(context.Document, (LiteralExpressionSyntax)node, identifier, ct),
                    GetEquivalenceKey(diagnostic));

                context.RegisterCodeFix(codeAction, diagnostic);
            }
            else
            {
                CodeAction codeAction = CodeAction.Create(
                    Title,
                    ct => UseNameOfOperatorRefactoring.RefactorAsync(context.Document, (InvocationExpressionSyntax)node, ct),
                    GetEquivalenceKey(diagnostic));

                context.RegisterCodeFix(codeAction, diagnostic);
            }
        }
        public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
        {
            SyntaxNode root = await context.GetSyntaxRootAsync().ConfigureAwait(false);

            if (!TryFindFirstAncestorOrSelf(root, context.Span, out LiteralExpressionSyntax node))
            {
                return;
            }

            string identifier = context.Diagnostics[0].Properties["Identifier"];

            CodeAction codeAction = CodeAction.Create(
                "Use nameof operator",
                cancellationToken => UseNameOfOperatorRefactoring.RefactorAsync(context.Document, node, identifier, cancellationToken),
                GetEquivalenceKey(DiagnosticIdentifiers.UseNameOfOperator));

            context.RegisterCodeFix(codeAction, context.Diagnostics[0]);
        }
Esempio n. 3
0
        public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
        {
            SyntaxNode root = await context.GetSyntaxRootAsync().ConfigureAwait(false);

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

            if (node == null)
            {
                return;
            }

            CodeAction codeAction = CodeAction.Create(
                "Use nameof operator",
                cancellationToken => UseNameOfOperatorRefactoring.RefactorAsync(context.Document, node, cancellationToken),
                DiagnosticIdentifiers.UseNameOfOperator + EquivalenceKeySuffix);

            context.RegisterCodeFix(codeAction, context.Diagnostics);
        }