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));
            }
        }
示例#3
0
 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);
 }
示例#4
0
        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);
        }