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"); } } } }
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"); } } }
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"); } } }