Exemplo n.º 1
0
        private void AnalyzeWhileStatement(SyntaxNodeAnalysisContext context)
        {
            InfiniteLoopStyle style = context.GetInfiniteLoopStyle();

            if (style == InfiniteLoopStyle.ForStatement)
            {
                var whileStatement = (WhileStatementSyntax)context.Node;

                if (whileStatement.Condition.IsKind(SyntaxKind.TrueLiteralExpression))
                {
                    TextSpan span = TextSpan.FromBounds(
                        whileStatement.OpenParenToken.Span.End,
                        whileStatement.CloseParenToken.SpanStart);

                    if (whileStatement
                        .DescendantTrivia(span)
                        .All(f => f.IsWhitespaceOrEndOfLineTrivia()))
                    {
                        DiagnosticHelpers.ReportDiagnostic(
                            context,
                            DiagnosticRules.NormalizeUsageOfInfiniteLoop,
                            whileStatement.WhileKeyword,
                            "for");
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void AnalyzeDoStatement(SyntaxNodeAnalysisContext context)
        {
            var doStatement = (DoStatementSyntax)context.Node;

            if (doStatement.Condition.IsKind(SyntaxKind.TrueLiteralExpression))
            {
                InfiniteLoopStyle style = context.GetInfiniteLoopStyle();

                if (style == InfiniteLoopStyle.ForStatement)
                {
                    DiagnosticHelpers.ReportDiagnostic(
                        context,
                        DiagnosticRules.NormalizeUsageOfInfiniteLoop,
                        doStatement.DoKeyword,
                        "for");
                }
                else if (style == InfiniteLoopStyle.WhileStatement)
                {
                    DiagnosticHelpers.ReportDiagnostic(
                        context,
                        DiagnosticRules.NormalizeUsageOfInfiniteLoop,
                        doStatement.DoKeyword,
                        "while");
                }
            }
        }
Exemplo n.º 3
0
        private void AnalyzeForStatement(SyntaxNodeAnalysisContext context)
        {
            InfiniteLoopStyle style = context.GetInfiniteLoopStyle();

            if (style == InfiniteLoopStyle.WhileStatement)
            {
                var forStatement = (ForStatementSyntax)context.Node;

                if (forStatement.Declaration == null &&
                    forStatement.Condition == null &&
                    !forStatement.Incrementors.Any() &&
                    !forStatement.Initializers.Any() &&
                    !forStatement.OpenParenToken.ContainsDirectives &&
                    !forStatement.FirstSemicolonToken.ContainsDirectives &&
                    !forStatement.SecondSemicolonToken.ContainsDirectives &&
                    !forStatement.CloseParenToken.ContainsDirectives)
                {
                    DiagnosticHelpers.ReportDiagnostic(
                        context,
                        DiagnosticRules.NormalizeUsageOfInfiniteLoop,
                        forStatement.ForKeyword,
                        "while");
                }
            }
        }