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)); } }
private void ReportDiagnostics( SyntaxNodeAnalysisContext syntaxContext, StatementSyntax firstStatement, IfStatementSyntax ifStatement, ExpressionStatementSyntax expressionStatement, ReportDiagnostic severity, ImmutableArray <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. var fadeLocation = Location.Create(tree, TextSpan.FromBounds(firstStatement.SpanStart, previousToken.Span.End)); syntaxContext.ReportDiagnostic(DiagnosticHelper.CreateWithLocationTags( Descriptor, fadeLocation, ReportDiagnostic.Default, additionalLocations, additionalUnnecessaryLocations: ImmutableArray.Create(fadeLocation), 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) { fadeLocation = Location.Create(tree, TextSpan.FromBounds(nextToken.Span.Start, ifStatement.Span.End)); syntaxContext.ReportDiagnostic(DiagnosticHelper.CreateWithLocationTags( Descriptor, fadeLocation, ReportDiagnostic.Default, additionalLocations, additionalUnnecessaryLocations: ImmutableArray.Create(fadeLocation), properties)); } }
public override void VisitExpressionStatement(ExpressionStatementSyntax node) { if (entryNode is AnonymousFunctionExpressionSyntax && embeddedNode is AnonymousFunctionExpressionSyntax) { return; } if (_weComeFromMethod && _weInAnonymousMethod) { return; } if (!node.IsParent <AnonymousObjectCreationExpressionSyntax>()) { InsertLLOCMap(node.GetLocation()); } base.VisitExpressionStatement(node); }
private static string FindAvailableVariableName( string builderNameBase, ExpressionStatementSyntax assignmentExpression, SemanticModel semanticModel) { var builderName = builderNameBase; var builderNameIncrementer = 0; while (semanticModel .LookupSymbols(assignmentExpression.GetLocation() .SourceSpan.Start, name: builderName) .Any()) { builderName = builderNameBase + ++builderNameIncrementer; } return(builderName); }
public override SyntaxNode VisitExpressionStatement(ExpressionStatementSyntax node) { Location loc = node.GetLocation(); bool suppress = false; bool wroteHeader = false; foreach (Diagnostic error in errors) { if ((loc.SourceSpan.Start <= error.Location.SourceSpan.Start) && (loc.SourceSpan.End >= error.Location.SourceSpan.End)) { #pragma warning disable CS0162 // unreachable if (trace) { if (!wroteHeader) { Console.WriteLine("REMOVING BROKEN: {0}", node.ToFullString().Replace(Environment.NewLine, " ")); wroteHeader = true; } Console.WriteLine(" ERROR: {0}: {1}", error.Id, error.GetMessage()); } #pragma warning restore CS0162 suppress = true; break; } } SyntaxNode updated = base.VisitExpressionStatement(node); if (suppress) { updated = SyntaxFactory.EmptyStatement( SyntaxFactory.Token( node.GetLeadingTrivia(), node.SemicolonToken.Kind(), node.GetTrailingTrivia())); } suppress = false; return(updated); }