private static void AnalyzeSwitchStatement(SyntaxNodeAnalysisContext context) { var switchStatement = (SwitchStatementSyntax)context.Node; SyntaxList <SwitchSectionSyntax> sections = switchStatement.Sections; SyntaxList <SwitchSectionSyntax> .Enumerator en = sections.GetEnumerator(); if (!en.MoveNext()) { return; } SwitchSectionSyntax previousSection = en.Current; while (en.MoveNext()) { SyntaxTriviaList leadingTrivia = en.Current.Labels[0].GetLeadingTrivia(); if (SyntaxTriviaAnalysis.IsEmptyOrSingleWhitespaceTrivia(leadingTrivia)) { SyntaxTriviaList trailingTrivia = previousSection.GetTrailingTrivia(); if (SyntaxTriviaAnalysis.IsOptionalWhitespaceThenOptionalSingleLineCommentThenEndOfLineTrivia(trailingTrivia)) { DiagnosticHelpers.ReportDiagnostic( context, DiagnosticDescriptors.AddEmptyLineBetweenSwitchSections, Location.Create(switchStatement.SyntaxTree, trailingTrivia.Last().Span.WithLength(0))); } } previousSection = en.Current; } }
public static SelectionResult Create <TNode>(SyntaxList <TNode> list, TextSpan span) where TNode : SyntaxNode { SyntaxList <TNode> .Enumerator en = list.GetEnumerator(); if (en.MoveNext()) { int i = 0; while (span.Start >= en.Current.FullSpan.End && en.MoveNext()) { i++; } if (span.Start >= en.Current.FullSpan.Start && span.Start <= en.Current.SpanStart) { int j = i; while (span.End > en.Current.FullSpan.End && en.MoveNext()) { j++; } if (span.End >= en.Current.Span.End && span.End <= en.Current.FullSpan.End) { return(new SelectionResult(i, j)); } } } return(Fail); }
protected static IndexPair GetIndexes(SyntaxList <TNode> list, TextSpan span) { SyntaxList <TNode> .Enumerator en = list.GetEnumerator(); if (en.MoveNext()) { int i = 0; while (span.Start >= en.Current.FullSpan.End && en.MoveNext()) { i++; } if (span.Start >= en.Current.FullSpan.Start && span.Start <= en.Current.Span.Start) { int j = i; while (span.End > en.Current.FullSpan.End && en.MoveNext()) { j++; } if (span.End >= en.Current.Span.End && span.End <= en.Current.FullSpan.End) { return(new IndexPair(i, j)); } } } return(new IndexPair(-1, -1)); }
public static IEnumerable <AttributeListSyntax> GetSelectedAttributeLists(SyntaxList <AttributeListSyntax> attributeLists, TextSpan span) { if (attributeLists.Count > 0) { SyntaxList <AttributeListSyntax> .Enumerator en = attributeLists.GetEnumerator(); while (en.MoveNext()) { if (span.Start >= en.Current.FullSpan.Start) { if (span.Start <= en.Current.Span.Start) { do { if (span.End >= en.Current.Span.End) { yield return(en.Current); } else { yield break; } } while (en.MoveNext()); } else if (span.Start <= en.Current.Span.End) { yield break; } } } } }
private SyntaxList <TNode> RemoveRange <TNode>( SyntaxList <TNode> list, int index, int count, Func <TNode, bool> predicate) where TNode : SyntaxNode { return(SyntaxFactory.List(RemoveRange())); IEnumerable <TNode> RemoveRange() { SyntaxList <TNode> .Enumerator en = list.GetEnumerator(); int i = 0; while (i < index && en.MoveNext()) { yield return(en.Current); i++; } int endIndex = index + count; while (i < endIndex && en.MoveNext()) { if (!predicate(en.Current)) { yield return(en.Current); } i++; } while (en.MoveNext()) { yield return(en.Current); } } }
private static void AnalyzeSwitchStatement(SyntaxNodeAnalysisContext context) { var switchStatement = (SwitchStatementSyntax)context.Node; SyntaxList <SwitchSectionSyntax> sections = switchStatement.Sections; SyntaxList <SwitchSectionSyntax> .Enumerator en = sections.GetEnumerator(); if (!en.MoveNext()) { return; } SwitchSectionSyntax previousSection = en.Current; var previousBlock = previousSection.Statements.SingleOrDefault(shouldThrow: false) as BlockSyntax; while (en.MoveNext()) { SyntaxTriviaList leadingTrivia = en.Current.Labels[0].GetLeadingTrivia(); if (SyntaxTriviaAnalysis.IsEmptyOrSingleWhitespaceTrivia(leadingTrivia)) { SyntaxTriviaList trailingTrivia = previousSection.GetTrailingTrivia(); if (SyntaxTriviaAnalysis.IsOptionalWhitespaceThenOptionalSingleLineCommentThenEndOfLineTrivia(trailingTrivia) && (context.GetBlankLineBetweenClosingBraceAndSwitchSection() != false || previousBlock == null)) { DiagnosticHelpers.ReportDiagnostic( context, DiagnosticRules.AddBlankLineBetweenSwitchSections, Location.Create(switchStatement.SyntaxTree, trailingTrivia.Last().Span.WithLength(0))); } } previousSection = en.Current; previousBlock = en.Current.Statements.SingleOrDefault(shouldThrow: false) as BlockSyntax; } }
public static void AnalyzerSwitchSection(SyntaxNodeAnalysisContext context) { var switchSection = (SwitchSectionSyntax)context.Node; if (!(switchSection.Statements.SingleOrDefault(shouldThrow: false) is BlockSyntax block)) { return; } SyntaxList <StatementSyntax> statements = block.Statements; SyntaxList <StatementSyntax> .Enumerator en = statements.GetEnumerator(); if (!en.MoveNext()) { return; } do { if (en.Current.IsKind(SyntaxKind.LocalDeclarationStatement)) { var localDeclaration = (LocalDeclarationStatementSyntax)en.Current; if (localDeclaration.UsingKeyword.IsKind(SyntaxKind.UsingKeyword)) { return; } } } while (en.MoveNext()); SyntaxToken openBrace = block.OpenBraceToken; if (!AnalyzeTrivia(openBrace.LeadingTrivia)) { return; } if (!AnalyzeTrivia(openBrace.TrailingTrivia)) { return; } if (!AnalyzeTrivia(statements[0].GetLeadingTrivia())) { return; } if (!AnalyzeTrivia(statements.Last().GetTrailingTrivia())) { return; } SyntaxToken closeBrace = block.CloseBraceToken; if (!AnalyzeTrivia(closeBrace.LeadingTrivia)) { return; } if (!AnalyzeTrivia(closeBrace.TrailingTrivia)) { return; } DiagnosticHelpers.ReportDiagnostic(context, DiagnosticDescriptors.RemoveUnnecessaryBraces, openBrace); DiagnosticHelpers.ReportDiagnostic(context, DiagnosticDescriptors.RemoveUnnecessaryBracesFadeOut, closeBrace);