Skip to content

Commit efcb8c1

Browse files
committed
Extract helper class SyntaxKinds and use where appropriate
1 parent e31cef3 commit efcb8c1

24 files changed

Lines changed: 249 additions & 127 deletions

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/ElementDocumentationSummaryBase.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,6 @@ namespace StyleCop.Analyzers.DocumentationRules
1818
/// </summary>
1919
internal abstract class ElementDocumentationSummaryBase : DiagnosticAnalyzer
2020
{
21-
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
22-
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.EnumDeclaration);
23-
24-
private static readonly ImmutableArray<SyntaxKind> BaseFieldDeclarationKinds =
25-
ImmutableArray.Create(SyntaxKind.FieldDeclaration, SyntaxKind.EventFieldDeclaration);
26-
2721
private readonly Action<CompilationStartAnalysisContext> compilationStartAction;
2822
private readonly Action<SyntaxNodeAnalysisContext> typeDeclarationAction;
2923
private readonly Action<SyntaxNodeAnalysisContext> methodDeclarationAction;
@@ -71,13 +65,13 @@ public override void Initialize(AnalysisContext context)
7165

7266
private void HandleCompilationStart(CompilationStartAnalysisContext context)
7367
{
74-
context.RegisterSyntaxNodeActionHonorExclusions(this.typeDeclarationAction, BaseTypeDeclarationKinds);
68+
context.RegisterSyntaxNodeActionHonorExclusions(this.typeDeclarationAction, SyntaxKinds.BaseTypeDeclaration);
7569
context.RegisterSyntaxNodeActionHonorExclusions(this.methodDeclarationAction, SyntaxKind.MethodDeclaration);
7670
context.RegisterSyntaxNodeActionHonorExclusions(this.constructorDeclarationAction, SyntaxKind.ConstructorDeclaration);
7771
context.RegisterSyntaxNodeActionHonorExclusions(this.destructorDeclarationAction, SyntaxKind.DestructorDeclaration);
7872
context.RegisterSyntaxNodeActionHonorExclusions(this.propertyDeclarationAction, SyntaxKind.PropertyDeclaration);
7973
context.RegisterSyntaxNodeActionHonorExclusions(this.indexerDeclarationAction, SyntaxKind.IndexerDeclaration);
80-
context.RegisterSyntaxNodeActionHonorExclusions(this.fieldDeclarationAction, BaseFieldDeclarationKinds);
74+
context.RegisterSyntaxNodeActionHonorExclusions(this.fieldDeclarationAction, SyntaxKinds.BaseFieldDeclaration);
8175
context.RegisterSyntaxNodeActionHonorExclusions(this.delegateDeclarationAction, SyntaxKind.DelegateDeclaration);
8276
context.RegisterSyntaxNodeActionHonorExclusions(this.eventDeclarationAction, SyntaxKind.EventDeclaration);
8377
}

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/PartialElementDocumentationSummaryBase.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,14 @@ namespace StyleCop.Analyzers.DocumentationRules
1818
/// </summary>
1919
internal abstract class PartialElementDocumentationSummaryBase : DiagnosticAnalyzer
2020
{
21-
private static readonly ImmutableArray<SyntaxKind> BaseTypeDeclarationKinds =
22-
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
23-
2421
private readonly Action<CompilationStartAnalysisContext> compilationStartAction;
25-
private readonly Action<SyntaxNodeAnalysisContext> baseTypeDeclarationAction;
22+
private readonly Action<SyntaxNodeAnalysisContext> typeDeclarationAction;
2623
private readonly Action<SyntaxNodeAnalysisContext> methodDeclarationAction;
2724

2825
protected PartialElementDocumentationSummaryBase()
2926
{
3027
this.compilationStartAction = this.HandleCompilationStart;
31-
this.baseTypeDeclarationAction = this.HandleBaseTypeDeclaration;
28+
this.typeDeclarationAction = this.HandleTypeDeclaration;
3229
this.methodDeclarationAction = this.HandleMethodDeclaration;
3330
}
3431

@@ -49,13 +46,15 @@ public override void Initialize(AnalysisContext context)
4946

5047
private void HandleCompilationStart(CompilationStartAnalysisContext context)
5148
{
52-
context.RegisterSyntaxNodeActionHonorExclusions(this.baseTypeDeclarationAction, BaseTypeDeclarationKinds);
49+
context.RegisterSyntaxNodeActionHonorExclusions(this.typeDeclarationAction, SyntaxKinds.TypeDeclaration);
5350
context.RegisterSyntaxNodeActionHonorExclusions(this.methodDeclarationAction, SyntaxKind.MethodDeclaration);
5451
}
5552

56-
private void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context)
53+
private void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)
5754
{
58-
var node = (BaseTypeDeclarationSyntax)context.Node;
55+
// We handle TypeDeclarationSyntax instead of BaseTypeDeclarationSyntax because enums are not allowed to be
56+
// partial.
57+
var node = (TypeDeclarationSyntax)context.Node;
5958
if (node.Identifier.IsMissing)
6059
{
6160
return;

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1608ElementDocumentationMustNotHaveDefaultSummary.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,6 @@ internal class SA1608ElementDocumentationMustNotHaveDefaultSummary : DiagnosticA
4747
private static readonly DiagnosticDescriptor Descriptor =
4848
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
4949

50-
private static readonly ImmutableArray<SyntaxKind> DocumentationCommentKinds =
51-
ImmutableArray.Create(SyntaxKind.SingleLineDocumentationCommentTrivia, SyntaxKind.MultiLineDocumentationCommentTrivia);
52-
5350
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
5451
private static readonly Action<SyntaxNodeAnalysisContext> DocumentationAction = HandleDocumentation;
5552

@@ -65,7 +62,7 @@ public override void Initialize(AnalysisContext context)
6562

6663
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6764
{
68-
context.RegisterSyntaxNodeActionHonorExclusions(DocumentationAction, DocumentationCommentKinds);
65+
context.RegisterSyntaxNodeActionHonorExclusions(DocumentationAction, SyntaxKinds.DocumentationComment);
6966
}
7067

7168
private static void HandleDocumentation(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1618GenericTypeParametersMustBeDocumented.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,6 @@ internal class SA1618GenericTypeParametersMustBeDocumented : DiagnosticAnalyzer
4040
private static readonly DiagnosticDescriptor Descriptor =
4141
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
4242

43-
private static readonly ImmutableArray<SyntaxKind> TypeDeclarationKinds =
44-
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
45-
4643
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
4744
private static readonly Action<SyntaxNodeAnalysisContext> TypeDeclarationAction = HandleTypeDeclaration;
4845
private static readonly Action<SyntaxNodeAnalysisContext> MethodDeclarationAction = HandleMethodDeclaration;
@@ -60,7 +57,7 @@ public override void Initialize(AnalysisContext context)
6057

6158
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
6259
{
63-
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds);
60+
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, SyntaxKinds.TypeDeclaration);
6461
context.RegisterSyntaxNodeActionHonorExclusions(MethodDeclarationAction, SyntaxKind.MethodDeclaration);
6562
context.RegisterSyntaxNodeActionHonorExclusions(DelegateDeclarationAction, SyntaxKind.DelegateDeclaration);
6663
}

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1619GenericTypeParametersMustBeDocumentedPartialClass.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,6 @@ internal class SA1619GenericTypeParametersMustBeDocumentedPartialClass : Diagnos
9090
private static readonly DiagnosticDescriptor Descriptor =
9191
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.DocumentationRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);
9292

93-
private static readonly ImmutableArray<SyntaxKind> TypeDeclarationKinds =
94-
ImmutableArray.Create(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration);
95-
9693
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
9794
private static readonly Action<SyntaxNodeAnalysisContext> TypeDeclarationAction = HandleTypeDeclaration;
9895

@@ -108,7 +105,7 @@ public override void Initialize(AnalysisContext context)
108105

109106
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
110107
{
111-
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, TypeDeclarationKinds);
108+
context.RegisterSyntaxNodeActionHonorExclusions(TypeDeclarationAction, SyntaxKinds.TypeDeclaration);
112109
}
113110

114111
private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context)

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1625ElementDocumentationMustNotBeCopiedAndPasted.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ internal class SA1625ElementDocumentationMustNotBeCopiedAndPasted : DiagnosticAn
7777

7878
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
7979
private static readonly Action<SyntaxNodeAnalysisContext> DocumentationTriviaAction = HandleDocumentationTrivia;
80-
private static readonly ImmutableArray<SyntaxKind> DocumentationSyntaxKinds = ImmutableArray.Create(SyntaxKind.SingleLineDocumentationCommentTrivia, SyntaxKind.MultiLineDocumentationCommentTrivia);
8180

8281
/// <inheritdoc/>
8382
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -91,7 +90,7 @@ public override void Initialize(AnalysisContext context)
9190

9291
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
9392
{
94-
context.RegisterSyntaxNodeActionHonorExclusions(DocumentationTriviaAction, DocumentationSyntaxKinds);
93+
context.RegisterSyntaxNodeActionHonorExclusions(DocumentationTriviaAction, SyntaxKinds.DocumentationComment);
9594
}
9695

9796
private static void HandleDocumentationTrivia(SyntaxNodeAnalysisContext context)
Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Helpers
5+
{
6+
using System.Collections.Immutable;
7+
using Microsoft.CodeAnalysis.CSharp;
8+
using Microsoft.CodeAnalysis.CSharp.Syntax;
9+
10+
internal static class SyntaxKinds
11+
{
12+
/// <summary>
13+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
14+
/// <see cref="BaseTypeDeclarationSyntax"/>.
15+
/// </summary>
16+
/// <value>
17+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
18+
/// <see cref="BaseTypeDeclarationSyntax"/>.
19+
/// </value>
20+
public static ImmutableArray<SyntaxKind> BaseTypeDeclaration { get; } =
21+
ImmutableArray.Create(
22+
SyntaxKind.ClassDeclaration,
23+
SyntaxKind.StructDeclaration,
24+
SyntaxKind.InterfaceDeclaration,
25+
SyntaxKind.EnumDeclaration);
26+
27+
/// <summary>
28+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
29+
/// <see cref="TypeDeclarationSyntax"/>.
30+
/// </summary>
31+
/// <value>
32+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
33+
/// <see cref="TypeDeclarationSyntax"/>.
34+
/// </value>
35+
public static ImmutableArray<SyntaxKind> TypeDeclaration { get; } =
36+
ImmutableArray.Create(
37+
SyntaxKind.ClassDeclaration,
38+
SyntaxKind.StructDeclaration,
39+
SyntaxKind.InterfaceDeclaration);
40+
41+
/// <summary>
42+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
43+
/// <see cref="BaseFieldDeclarationSyntax"/>.
44+
/// </summary>
45+
/// <value>
46+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
47+
/// <see cref="BaseFieldDeclarationSyntax"/>.
48+
/// </value>
49+
public static ImmutableArray<SyntaxKind> BaseFieldDeclaration { get; } =
50+
ImmutableArray.Create(
51+
SyntaxKind.FieldDeclaration,
52+
SyntaxKind.EventFieldDeclaration);
53+
54+
/// <summary>
55+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
56+
/// <see cref="BaseMethodDeclarationSyntax"/>.
57+
/// </summary>
58+
/// <value>
59+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
60+
/// <see cref="BaseMethodDeclarationSyntax"/>.
61+
/// </value>
62+
public static ImmutableArray<SyntaxKind> BaseMethodDeclaration { get; } =
63+
ImmutableArray.Create(
64+
SyntaxKind.MethodDeclaration,
65+
SyntaxKind.ConstructorDeclaration,
66+
SyntaxKind.DestructorDeclaration,
67+
SyntaxKind.OperatorDeclaration,
68+
SyntaxKind.ConversionOperatorDeclaration);
69+
70+
/// <summary>
71+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
72+
/// <see cref="BasePropertyDeclarationSyntax"/>.
73+
/// </summary>
74+
/// <value>
75+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
76+
/// <see cref="BasePropertyDeclarationSyntax"/>.
77+
/// </value>
78+
public static ImmutableArray<SyntaxKind> BasePropertyDeclaration { get; } =
79+
ImmutableArray.Create(
80+
SyntaxKind.PropertyDeclaration,
81+
SyntaxKind.EventDeclaration,
82+
SyntaxKind.IndexerDeclaration);
83+
84+
/// <summary>
85+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as an
86+
/// <see cref="AccessorDeclarationSyntax"/>.
87+
/// </summary>
88+
/// <value>
89+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as an
90+
/// <see cref="AccessorDeclarationSyntax"/>.
91+
/// </value>
92+
public static ImmutableArray<SyntaxKind> AccessorDeclaration { get; } =
93+
ImmutableArray.Create(
94+
SyntaxKind.GetAccessorDeclaration,
95+
SyntaxKind.SetAccessorDeclaration,
96+
SyntaxKind.AddAccessorDeclaration,
97+
SyntaxKind.RemoveAccessorDeclaration,
98+
SyntaxKind.UnknownAccessorDeclaration);
99+
100+
/// <summary>
101+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as an
102+
/// <see cref="InitializerExpressionSyntax"/>.
103+
/// </summary>
104+
/// <value>
105+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as an
106+
/// <see cref="InitializerExpressionSyntax"/>.
107+
/// </value>
108+
public static ImmutableArray<SyntaxKind> InitializerExpression { get; } =
109+
ImmutableArray.Create(
110+
SyntaxKind.ArrayInitializerExpression,
111+
SyntaxKind.CollectionInitializerExpression,
112+
SyntaxKind.ComplexElementInitializerExpression,
113+
SyntaxKind.ObjectInitializerExpression);
114+
115+
/// <summary>
116+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
117+
/// <see cref="DocumentationCommentTriviaSyntax"/>.
118+
/// </summary>
119+
/// <value>
120+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
121+
/// <see cref="DocumentationCommentTriviaSyntax"/>.
122+
/// </value>
123+
public static ImmutableArray<SyntaxKind> DocumentationComment { get; } =
124+
ImmutableArray.Create(
125+
SyntaxKind.SingleLineDocumentationCommentTrivia,
126+
SyntaxKind.MultiLineDocumentationCommentTrivia);
127+
128+
/// <summary>
129+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
130+
/// <see cref="ConstructorInitializerSyntax"/>.
131+
/// </summary>
132+
/// <value>
133+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
134+
/// <see cref="ConstructorInitializerSyntax"/>.
135+
/// </value>
136+
public static ImmutableArray<SyntaxKind> ConstructorInitializer { get; } =
137+
ImmutableArray.Create(
138+
SyntaxKind.BaseConstructorInitializer,
139+
SyntaxKind.ThisConstructorInitializer);
140+
141+
/// <summary>
142+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
143+
/// <see cref="LambdaExpressionSyntax"/>.
144+
/// </summary>
145+
/// <value>
146+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
147+
/// <see cref="LambdaExpressionSyntax"/>.
148+
/// </value>
149+
public static ImmutableArray<SyntaxKind> LambdaExpression { get; } =
150+
ImmutableArray.Create(
151+
SyntaxKind.ParenthesizedLambdaExpression,
152+
SyntaxKind.SimpleLambdaExpression);
153+
154+
/// <summary>
155+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as an
156+
/// <see cref="AnonymousFunctionExpressionSyntax"/>.
157+
/// </summary>
158+
/// <value>
159+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as an
160+
/// <see cref="AnonymousFunctionExpressionSyntax"/>.
161+
/// </value>
162+
public static ImmutableArray<SyntaxKind> AnonymousFunctionExpression { get; } =
163+
ImmutableArray.Create(
164+
SyntaxKind.ParenthesizedLambdaExpression,
165+
SyntaxKind.SimpleLambdaExpression,
166+
SyntaxKind.AnonymousMethodExpression);
167+
168+
/// <summary>
169+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
170+
/// <see cref="SimpleNameSyntax"/>.
171+
/// </summary>
172+
/// <value>
173+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
174+
/// <see cref="SimpleNameSyntax"/>.
175+
/// </value>
176+
public static ImmutableArray<SyntaxKind> SimpleName { get; } =
177+
ImmutableArray.Create(
178+
SyntaxKind.GenericName,
179+
SyntaxKind.IdentifierName);
180+
181+
/// <summary>
182+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
183+
/// <see cref="BaseParameterListSyntax"/>.
184+
/// </summary>
185+
/// <value>
186+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
187+
/// <see cref="BaseParameterListSyntax"/>.
188+
/// </value>
189+
public static ImmutableArray<SyntaxKind> BaseParameterList { get; } =
190+
ImmutableArray.Create(
191+
SyntaxKind.ParameterList,
192+
SyntaxKind.BracketedParameterList);
193+
194+
/// <summary>
195+
/// Gets a collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
196+
/// <see cref="BaseArgumentListSyntax"/>.
197+
/// </summary>
198+
/// <value>
199+
/// A collection of <see cref="SyntaxKind"/> values which appear in the syntax tree as a
200+
/// <see cref="BaseArgumentListSyntax"/>.
201+
/// </value>
202+
public static ImmutableArray<SyntaxKind> BaseArgumentList { get; } =
203+
ImmutableArray.Create(
204+
SyntaxKind.ArgumentList,
205+
SyntaxKind.BracketedArgumentList);
206+
}
207+
}

0 commit comments

Comments
 (0)