private void ReportDiagnostics( SyntaxNodeAnalysisContext syntaxContext, StatementSyntax firstStatement, IfStatementSyntax ifStatement, ExpressionStatementSyntax expressionStatement, ReportDiagnostic severity, List <Location> additionalLocations, string kind) { var tree = syntaxContext.Node.SyntaxTree; var properties = ImmutableDictionary <string, string> .Empty.Add( Constants.Kind, kind); var previousToken = expressionStatement.GetFirstToken().GetPreviousToken(); var nextToken = expressionStatement.GetLastToken().GetNextToken(); // Fade out the code up to the expression statement. syntaxContext.ReportDiagnostic(Diagnostic.Create(this.UnnecessaryWithSuggestionDescriptor, Location.Create(tree, TextSpan.FromBounds(firstStatement.SpanStart, previousToken.Span.End)), additionalLocations, properties)); // Put a diagnostic with the appropriate severity on the expression-statement itself. syntaxContext.ReportDiagnostic(DiagnosticHelper.Create( Descriptor, expressionStatement.GetLocation(), severity, additionalLocations, properties)); // If the if-statement extends past the expression statement, then fade out the rest. if (nextToken.Span.Start < ifStatement.Span.End) { syntaxContext.ReportDiagnostic(Diagnostic.Create(this.UnnecessaryWithSuggestionDescriptor, Location.Create(tree, TextSpan.FromBounds(nextToken.Span.Start, ifStatement.Span.End)), additionalLocations, properties)); } }