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

            SyntaxNode node = root.FindNode(context.Span, findInsideTrivia: true, getInnermostNodeForTie: true);

            if (node?.IsKind(
                    SyntaxKind.QualifiedName,
                    SyntaxKind.IdentifierName,
                    SyntaxKind.SimpleMemberAccessExpression) == true)
            {
                SemanticModel semanticModel = await context.Document.GetSemanticModelAsync(context.CancellationToken).ConfigureAwait(false);

                var typeSymbol = semanticModel.GetSymbol(node, context.CancellationToken) as INamedTypeSymbol;

                if (typeSymbol?.SupportsPredefinedType() == true)
                {
                    CodeAction codeAction = CodeAction.Create(
                        $"Use predefined type '{SymbolDisplay.GetString(typeSymbol)}'",
                        cancellationToken => UsePredefinedTypeRefactoring.RefactorAsync(context.Document, node, typeSymbol, cancellationToken),
                        DiagnosticIdentifiers.UsePredefinedType + EquivalenceKeySuffix);

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

            if (!TryFindNode(root, context.Span, out SyntaxNode node, findInsideTrivia: true, predicate: f => f.IsKind(
                                 SyntaxKind.QualifiedName,
                                 SyntaxKind.IdentifierName,
                                 SyntaxKind.SimpleMemberAccessExpression,
                                 SyntaxKind.NameMemberCref,
                                 SyntaxKind.QualifiedCref)))
            {
                return;
            }

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

            var typeSymbol = semanticModel.GetSymbol(node, context.CancellationToken) as INamedTypeSymbol;

            CodeAction codeAction = CodeAction.Create(
                $"Use predefined type '{SymbolDisplay.GetString(typeSymbol)}'",
                cancellationToken => UsePredefinedTypeRefactoring.RefactorAsync(context.Document, node, typeSymbol, cancellationToken),
                GetEquivalenceKey(DiagnosticIdentifiers.UsePredefinedType));

            context.RegisterCodeFix(codeAction, context.Diagnostics);
        }
        private void AnalyzeQualifiedName(SyntaxNodeAnalysisContext context)
        {
            var qualifiedName = (QualifiedNameSyntax)context.Node;

            UsePredefinedTypeRefactoring.Analyze(context, qualifiedName);

            SimplifyNullableOfTRefactoring.Analyze(context, qualifiedName);
        }
Exemple #4
0
        private void AnalyzeSimpleMemberAccessExpression(SyntaxNodeAnalysisContext context)
        {
            var memberAccess = (MemberAccessExpressionSyntax)context.Node;

            UsePredefinedTypeRefactoring.Analyze(context, memberAccess);

            if (UseEmptyStringLiteralInsteadOfStringEmptyRefactoring.CanRefactor(memberAccess, context.SemanticModel, context.CancellationToken))
            {
                context.ReportDiagnostic(DiagnosticDescriptors.UseEmptyStringLiteralInsteadOfStringEmpty, memberAccess);
            }
        }
Exemple #5
0
        public override void Initialize(AnalysisContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            base.Initialize(context);
            context.EnableConcurrentExecution();

            context.RegisterSyntaxNodeAction(
                f => UsePredefinedTypeRefactoring.AnalyzeIdentifierName(f),
                SyntaxKind.IdentifierName);

            context.RegisterSyntaxNodeAction(
                f => UsePredefinedTypeRefactoring.AnalyzeXmlCrefAttribute(f),
                SyntaxKind.XmlCrefAttribute);
        }
        private void AnalyzeIdentifierName(SyntaxNodeAnalysisContext context)
        {
            var identifierName = (IdentifierNameSyntax)context.Node;

            UsePredefinedTypeRefactoring.Analyze(context, identifierName);
        }