private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context) { if (GeneratedCodeAnalyzer?.IsGeneratedCode(context) == true) { return; } var elseClause = (ElseClauseSyntax)context.Node; StatementSyntax statement = elseClause.Statement; if (statement != null) { if (!statement.IsKind(SyntaxKind.Block) && !statement.IsKind(SyntaxKind.IfStatement) && elseClause.ElseKeyword.GetSpanStartLine() == statement.GetSpanStartLine()) { context.ReportDiagnostic( DiagnosticDescriptors.FormatEmbeddedStatementOnSeparateLine, statement.GetLocation()); } if (statement.IsKind(SyntaxKind.Block)) { var block = (BlockSyntax)statement; if (block.Statements.Count == 0) { if (elseClause.ElseKeyword.TrailingTrivia.IsWhitespaceOrEndOfLine() && block.OpenBraceToken.LeadingTrivia.IsWhitespaceOrEndOfLine() && block.OpenBraceToken.TrailingTrivia.IsWhitespaceOrEndOfLine() && block.CloseBraceToken.LeadingTrivia.IsWhitespaceOrEndOfLine()) { context.ReportDiagnostic( DiagnosticDescriptors.RemoveEmptyElseClause, elseClause.GetLocation()); } } else if (block.Statements.Count == 1) { if (block.Statements[0].IsKind(SyntaxKind.IfStatement)) { var ifStatement = (IfStatementSyntax)block.Statements[0]; if (ifStatement.Else == null) { context.ReportDiagnostic( DiagnosticDescriptors.SimplifyElseClauseContainingIfStatement, block.GetLocation()); DiagnosticHelper.FadeOutBraces( context, block, DiagnosticDescriptors.SimplifyElseClauseContainingIfStatementFadeOut); } } } } } }
private static void Analyze(SyntaxNodeAnalysisContext context, SyntaxList <StatementSyntax> statements) { if (statements.Count <= 1) { return; } int previousEndLine = statements[0].GetSpanEndLine(); for (int i = 1; i < statements.Count; i++) { StatementSyntax statement = statements[i]; if (!statement.IsKind(SyntaxKind.Block, SyntaxKind.EmptyStatement) && statement.GetSpanStartLine() == previousEndLine) { DiagnosticHelpers.ReportDiagnostic( context, DiagnosticDescriptors.AddNewLineBeforeStatement, Location.Create(statement.SyntaxTree, statement.Span.WithLength(0))); } previousEndLine = statement.GetSpanEndLine(); } }
private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context) { if (GeneratedCodeAnalyzer?.IsGeneratedCode(context) == true) { return; } var elseClause = (ElseClauseSyntax)context.Node; StatementSyntax statement = elseClause.Statement; if (statement != null) { if (!statement.IsKind(SyntaxKind.Block) && !statement.IsKind(SyntaxKind.IfStatement) && elseClause.ElseKeyword.GetSpanStartLine() == statement.GetSpanStartLine()) { context.ReportDiagnostic( DiagnosticDescriptors.FormatEmbeddedStatementOnSeparateLine, statement.GetLocation()); } if (statement.IsKind(SyntaxKind.Block)) { var block = (BlockSyntax)statement; if (block.Statements.Count == 0) { if (elseClause .DescendantTrivia(elseClause.Span) .All(f => f.IsWhitespaceOrEndOfLineTrivia())) { context.ReportDiagnostic( DiagnosticDescriptors.RemoveEmptyElseClause, elseClause.GetLocation()); } } else if (block.Statements.Count == 1) { if (block.Statements[0].IsKind(SyntaxKind.IfStatement)) { var ifStatement = (IfStatementSyntax)block.Statements[0]; if (ifStatement.Else == null && CheckTrivia(elseClause, ifStatement)) { context.ReportDiagnostic( DiagnosticDescriptors.MergeElseClauseWithNestedIfStatement, block.GetLocation()); context.FadeOutBraces( DiagnosticDescriptors.MergeElseClauseWithNestedIfStatementFadeOut, block); } } } } } }
private static void AnalyzeEmbeddedStatement(SyntaxNodeAnalysisContext context) { SyntaxToken token = GetToken(context.Node); if (token.IsMissing) { return; } StatementSyntax statement = GetStatement(context.Node); if (statement.IsKind(SyntaxKind.Block)) { return; } if (statement.IsKind(SyntaxKind.EmptyStatement)) { return; } if (token.GetSpanStartLine() == statement.GetSpanStartLine()) { context.ReportDiagnostic( DiagnosticDescriptors.FormatEmbeddedStatementOnSeparateLine, statement.GetLocation()); } else { var parentStatement = (StatementSyntax)context.Node; var block = parentStatement.Parent as BlockSyntax; if (block == null) { return; } int index = block.Statements.IndexOf(parentStatement); if (index == block.Statements.Count - 1) { return; } int diff = block.Statements[index + 1].GetSpanStartLine() - statement.GetSpanEndLine(); if (diff < 2) { context.ReportDiagnostic( DiagnosticDescriptors.AddEmptyLineAfterEmbeddedStatement, statement.GetLocation()); } } }
private static void Analyze(SyntaxNodeAnalysisContext context, SyntaxList <StatementSyntax> statements) { if (statements.Count > 1) { int previousEndLine = statements[0].GetSpanEndLine(); for (int i = 1; i < statements.Count; i++) { StatementSyntax statement = statements[i]; if (!statement.IsKind(SyntaxKind.Block, SyntaxKind.EmptyStatement) && statement.GetSpanStartLine() == previousEndLine) { context.ReportDiagnostic(DiagnosticDescriptors.FormatEachStatementOnSeparateLine, statement); } previousEndLine = statement.GetSpanEndLine(); } } }
private void AnalyzeStatement(SyntaxNodeAnalysisContext context, StatementSyntax statement, SyntaxToken openBrace, SyntaxToken closeBrace) { var block = (BlockSyntax)statement.Parent; SyntaxList <StatementSyntax> statements = block.Statements; int index = statements.IndexOf(statement); Debug.Assert(index != -1, ""); if (index != -1 && index < statements.Count - 1) { int startLine = openBrace.GetSpanStartLine(); int endLine = closeBrace.GetSpanEndLine(); if (startLine < endLine) { StatementSyntax nextStatement = statements[index + 1]; if (nextStatement.GetSpanStartLine() - endLine == 1) { SyntaxTrivia trivia = closeBrace .TrailingTrivia .FirstOrDefault(f => f.IsEndOfLineTrivia()); if (trivia.IsEndOfLineTrivia()) { context.ReportDiagnostic( DiagnosticDescriptors.AddEmptyLineAfterClosingBrace, trivia); } } } } }