Skip to content

Commit 6749d7c

Browse files
committed
Fix handling of tabs inside of documentation comments
Fixes #1830
1 parent cd6db3b commit 6749d7c

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers/SpacingRules/SA1027TabsMustNotBeUsed.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ private static void HandleSyntaxTree(SyntaxTreeAnalysisContext context)
6969
HandleWhitespaceTrivia(context, trivia);
7070
break;
7171

72+
case SyntaxKind.SingleLineDocumentationCommentTrivia:
73+
case SyntaxKind.MultiLineDocumentationCommentTrivia:
74+
HandleDocumentationCommentTrivia(context, trivia);
75+
break;
76+
7277
default:
7378
break;
7479
}
@@ -93,5 +98,34 @@ private static void HandleWhitespaceTrivia(SyntaxTreeAnalysisContext context, Sy
9398
// Tabs must not be used.
9499
context.ReportDiagnostic(Diagnostic.Create(Descriptor, trivia.GetLocation()));
95100
}
101+
102+
private static void HandleWhitespaceToken(SyntaxTreeAnalysisContext context, SyntaxToken token)
103+
{
104+
string fullString = token.ToFullString();
105+
if (fullString.IndexOf('\t') < 0)
106+
{
107+
// No hard tabs were found.
108+
return;
109+
}
110+
111+
// Tabs must not be used.
112+
context.ReportDiagnostic(Diagnostic.Create(Descriptor, token.GetLocation()));
113+
}
114+
115+
private static void HandleDocumentationCommentTrivia(SyntaxTreeAnalysisContext context, SyntaxTrivia trivia)
116+
{
117+
foreach (var token in trivia.GetStructure().DescendantTokens(descendIntoTrivia: true))
118+
{
119+
switch (token.Kind())
120+
{
121+
case SyntaxKind.XmlTextLiteralToken:
122+
HandleWhitespaceToken(context, token);
123+
break;
124+
125+
default:
126+
break;
127+
}
128+
}
129+
}
96130
}
97131
}

0 commit comments

Comments
 (0)