Skip to content

Commit 20aab72

Browse files
committed
Use a single implementation of NeedsComment for SA1600, SA1601, SA1602
1 parent f68f849 commit 20aab72

3 files changed

Lines changed: 50 additions & 120 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1600ElementsMustBeDocumented.cs

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,53 @@ internal class SA1600ElementsMustBeDocumented : DiagnosticAnalyzer
5959
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
6060
ImmutableArray.Create(Descriptor);
6161

62+
public static bool NeedsComment(DocumentationSettings documentationSettings, SyntaxKind syntaxKind, SyntaxKind parentSyntaxKind, Accessibility declaredAccessibility, Accessibility effectiveAccessibility)
63+
{
64+
if (documentationSettings.DocumentInterfaces
65+
&& (syntaxKind == SyntaxKind.InterfaceDeclaration || parentSyntaxKind == SyntaxKind.InterfaceDeclaration))
66+
{
67+
// DocumentInterfaces => all interfaces must be documented
68+
return true;
69+
}
70+
71+
if (syntaxKind == SyntaxKind.FieldDeclaration && documentationSettings.DocumentPrivateFields)
72+
{
73+
// DocumentPrivateFields => all fields must be documented
74+
return true;
75+
}
76+
77+
if (documentationSettings.DocumentPrivateElements)
78+
{
79+
if (syntaxKind == SyntaxKind.FieldDeclaration && declaredAccessibility == Accessibility.Private)
80+
{
81+
// Handled by DocumentPrivateFields
82+
return false;
83+
}
84+
85+
// DocumentPrivateMembers => everything except declared private fields must be documented
86+
return true;
87+
}
88+
89+
switch (effectiveAccessibility)
90+
{
91+
case Accessibility.Public:
92+
case Accessibility.Protected:
93+
case Accessibility.ProtectedOrInternal:
94+
// These items are part of the exposed API surface => document if configured
95+
return documentationSettings.DocumentExposedElements;
96+
97+
case Accessibility.ProtectedAndInternal:
98+
case Accessibility.Internal:
99+
// These items are part of the internal API surface => document if configured
100+
return documentationSettings.DocumentInternalElements;
101+
102+
case Accessibility.NotApplicable:
103+
case Accessibility.Private:
104+
default:
105+
return false;
106+
}
107+
}
108+
62109
/// <inheritdoc/>
63110
public override void Initialize(AnalysisContext context)
64111
{
@@ -293,53 +340,6 @@ public static void HandleEventFieldDeclaration(SyntaxNodeAnalysisContext context
293340
}
294341
}
295342
}
296-
297-
public static bool NeedsComment(DocumentationSettings documentationSettings, SyntaxKind syntaxKind, SyntaxKind parentSyntaxKind, Accessibility declaredAccessibility, Accessibility effectiveAccessibility)
298-
{
299-
if (documentationSettings.DocumentInterfaces
300-
&& (syntaxKind == SyntaxKind.InterfaceDeclaration || parentSyntaxKind == SyntaxKind.InterfaceDeclaration))
301-
{
302-
// DocumentInterfaces => all interfaces must be documented
303-
return true;
304-
}
305-
306-
if (syntaxKind == SyntaxKind.FieldDeclaration && documentationSettings.DocumentPrivateFields)
307-
{
308-
// DocumentPrivateFields => all fields must be documented
309-
return true;
310-
}
311-
312-
if (documentationSettings.DocumentPrivateElements)
313-
{
314-
if (syntaxKind == SyntaxKind.FieldDeclaration && declaredAccessibility == Accessibility.Private)
315-
{
316-
// Handled by DocumentPrivateFields
317-
return false;
318-
}
319-
320-
// DocumentPrivateMembers => everything except declared private fields must be documented
321-
return true;
322-
}
323-
324-
switch (effectiveAccessibility)
325-
{
326-
case Accessibility.Public:
327-
case Accessibility.Protected:
328-
case Accessibility.ProtectedOrInternal:
329-
// These items are part of the exposed API surface => document if configured
330-
return documentationSettings.DocumentExposedElements;
331-
332-
case Accessibility.ProtectedAndInternal:
333-
case Accessibility.Internal:
334-
// These items are part of the internal API surface => document if configured
335-
return documentationSettings.DocumentInternalElements;
336-
337-
case Accessibility.NotApplicable:
338-
case Accessibility.Private:
339-
default:
340-
return false;
341-
}
342-
}
343343
}
344344
}
345345
}

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1601PartialElementsMustBeDocumented.cs

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public static void HandleBaseTypeDeclaration(SyntaxNodeAnalysisContext context,
119119

120120
Accessibility declaredAccessibility = declaration.GetDeclaredAccessibility(context.SemanticModel, context.CancellationToken);
121121
Accessibility effectiveAccessibility = declaration.GetEffectiveAccessibility(context.SemanticModel, context.CancellationToken);
122-
if (NeedsComment(settings.DocumentationRules, declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility))
122+
if (SA1600ElementsMustBeDocumented.NeedsComment(settings.DocumentationRules, declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility))
123123
{
124124
if (!XmlCommentHelper.HasDocumentation(declaration))
125125
{
@@ -143,49 +143,14 @@ public static void HandleMethodDeclaration(SyntaxNodeAnalysisContext context, St
143143

144144
Accessibility declaredAccessibility = declaration.GetDeclaredAccessibility(context.SemanticModel, context.CancellationToken);
145145
Accessibility effectiveAccessibility = declaration.GetEffectiveAccessibility(context.SemanticModel, context.CancellationToken);
146-
if (NeedsComment(settings.DocumentationRules, declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility))
146+
if (SA1600ElementsMustBeDocumented.NeedsComment(settings.DocumentationRules, declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility))
147147
{
148148
if (!XmlCommentHelper.HasDocumentation(declaration))
149149
{
150150
context.ReportDiagnostic(Diagnostic.Create(Descriptor, declaration.Identifier.GetLocation()));
151151
}
152152
}
153153
}
154-
155-
private static bool NeedsComment(DocumentationSettings documentationSettings, SyntaxKind syntaxKind, SyntaxKind parentSyntaxKind, Accessibility declaredAccessibility, Accessibility effectiveAccessibility)
156-
{
157-
if (documentationSettings.DocumentInterfaces
158-
&& (syntaxKind == SyntaxKind.InterfaceDeclaration || parentSyntaxKind == SyntaxKind.InterfaceDeclaration))
159-
{
160-
// DocumentInterfaces => all interfaces must be documented
161-
return true;
162-
}
163-
164-
if (documentationSettings.DocumentPrivateElements)
165-
{
166-
// DocumentPrivateMembers => everything except declared private fields must be documented
167-
return true;
168-
}
169-
170-
switch (effectiveAccessibility)
171-
{
172-
case Accessibility.Public:
173-
case Accessibility.Protected:
174-
case Accessibility.ProtectedOrInternal:
175-
// These items are part of the exposed API surface => document if configured
176-
return documentationSettings.DocumentExposedElements;
177-
178-
case Accessibility.ProtectedAndInternal:
179-
case Accessibility.Internal:
180-
// These items are part of the internal API surface => document if configured
181-
return documentationSettings.DocumentInternalElements;
182-
183-
case Accessibility.NotApplicable:
184-
case Accessibility.Private:
185-
default:
186-
return false;
187-
}
188-
}
189154
}
190155
}
191156
}

StyleCop.Analyzers/StyleCop.Analyzers/DocumentationRules/SA1602EnumerationItemsMustBeDocumented.cs

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -79,49 +79,14 @@ public static void HandleEnumMemberDeclaration(SyntaxNodeAnalysisContext context
7979
EnumMemberDeclarationSyntax declaration = (EnumMemberDeclarationSyntax)context.Node;
8080
Accessibility declaredAccessibility = declaration.GetDeclaredAccessibility();
8181
Accessibility effectiveAccessibility = declaration.GetEffectiveAccessibility(context.SemanticModel, context.CancellationToken);
82-
if (NeedsComment(settings.DocumentationRules, declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility))
82+
if (SA1600ElementsMustBeDocumented.NeedsComment(settings.DocumentationRules, declaration.Kind(), declaration.Parent.Kind(), declaredAccessibility, effectiveAccessibility))
8383
{
8484
if (!XmlCommentHelper.HasDocumentation(declaration))
8585
{
8686
context.ReportDiagnostic(Diagnostic.Create(Descriptor, declaration.Identifier.GetLocation()));
8787
}
8888
}
8989
}
90-
91-
private static bool NeedsComment(DocumentationSettings documentationSettings, SyntaxKind syntaxKind, SyntaxKind parentSyntaxKind, Accessibility declaredAccessibility, Accessibility effectiveAccessibility)
92-
{
93-
if (documentationSettings.DocumentInterfaces
94-
&& (syntaxKind == SyntaxKind.InterfaceDeclaration || parentSyntaxKind == SyntaxKind.InterfaceDeclaration))
95-
{
96-
// DocumentInterfaces => all interfaces must be documented
97-
return true;
98-
}
99-
100-
if (documentationSettings.DocumentPrivateElements)
101-
{
102-
// DocumentPrivateMembers => everything except declared private fields must be documented
103-
return true;
104-
}
105-
106-
switch (effectiveAccessibility)
107-
{
108-
case Accessibility.Public:
109-
case Accessibility.Protected:
110-
case Accessibility.ProtectedOrInternal:
111-
// These items are part of the exposed API surface => document if configured
112-
return documentationSettings.DocumentExposedElements;
113-
114-
case Accessibility.ProtectedAndInternal:
115-
case Accessibility.Internal:
116-
// These items are part of the internal API surface => document if configured
117-
return documentationSettings.DocumentInternalElements;
118-
119-
case Accessibility.NotApplicable:
120-
case Accessibility.Private:
121-
default:
122-
return false;
123-
}
124-
}
12590
}
12691
}
12792
}

0 commit comments

Comments
 (0)