private static void ReportDiagnostics( SyntaxNodeAnalysisContext syntaxContext, StatementSyntax firstStatement, IfStatementSyntax ifStatement, ExpressionStatementSyntax expressionStatement, DiagnosticSeverity 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(s_unnecessaryDescriptor, 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(Diagnostic.Create(CreateDescriptor(severity), expressionStatement.GetLocation(), 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(s_unnecessaryDescriptor, Location.Create(tree, TextSpan.FromBounds(nextToken.Span.Start, ifStatement.Span.End)), additionalLocations, properties)); } }