private static void AnalyzeThrowExpression(SyntaxNodeAnalysisContext context) { var throwExpression = (ThrowExpressionSyntax)context.Node; AddExceptionToDocumentationCommentAnalysis analysis = AddExceptionToDocumentationCommentRefactoring.Analyze(throwExpression, context.SemanticModel, context.CancellationToken); if (analysis.Success) { context.ReportDiagnostic( DiagnosticDescriptors.AddExceptionToDocumentationComment, throwExpression); } }
public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { SyntaxNode root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false); SyntaxNode node = root .FindNode(context.Span, getInnermostNodeForTie: true)? .FirstAncestorOrSelf(f => f.IsKind(SyntaxKind.ThrowStatement, SyntaxKind.ThrowExpression)); Debug.Assert(node != null, $"{nameof(node)} is null"); if (node == null) { return; } foreach (Diagnostic diagnostic in context.Diagnostics) { switch (diagnostic.Id) { case DiagnosticIdentifiers.AddExceptionToDocumentationComment: { switch (node.Kind()) { case SyntaxKind.ThrowStatement: { CodeAction codeAction = CodeAction.Create( "Add exception to documentation comment", cancellationToken => AddExceptionToDocumentationCommentRefactoring.RefactorAsync(context.Document, (ThrowStatementSyntax)node, cancellationToken), diagnostic.Id + EquivalenceKeySuffix); context.RegisterCodeFix(codeAction, diagnostic); break; } case SyntaxKind.ThrowExpression: { CodeAction codeAction = CodeAction.Create( "Add exception to documentation comment", cancellationToken => AddExceptionToDocumentationCommentRefactoring.RefactorAsync(context.Document, (ThrowExpressionSyntax)node, cancellationToken), diagnostic.Id + EquivalenceKeySuffix); context.RegisterCodeFix(codeAction, diagnostic); break; } } break; } } } }
public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context) { SyntaxNode root = await context.GetSyntaxRootAsync().ConfigureAwait(false); if (!TryFindFirstAncestorOrSelf(root, context.Span, out SyntaxNode node, predicate: f => f.IsKind(SyntaxKind.ThrowStatement, SyntaxKind.ThrowExpression))) { return; } foreach (Diagnostic diagnostic in context.Diagnostics) { switch (diagnostic.Id) { case DiagnosticIdentifiers.AddExceptionToDocumentationComment: { switch (node.Kind()) { case SyntaxKind.ThrowStatement: { CodeAction codeAction = CodeAction.Create( "Add exception to documentation comment", cancellationToken => AddExceptionToDocumentationCommentRefactoring.RefactorAsync(context.Document, (ThrowStatementSyntax)node, cancellationToken), GetEquivalenceKey(diagnostic)); context.RegisterCodeFix(codeAction, diagnostic); break; } case SyntaxKind.ThrowExpression: { CodeAction codeAction = CodeAction.Create( "Add exception to documentation comment", cancellationToken => AddExceptionToDocumentationCommentRefactoring.RefactorAsync(context.Document, (ThrowExpressionSyntax)node, cancellationToken), GetEquivalenceKey(diagnostic)); context.RegisterCodeFix(codeAction, diagnostic); break; } } break; } } } }