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); }
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); } }
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); }