Skip to content

Commit 5b8372b

Browse files
committed
Update SA1200 to use the new cached settings support
1 parent 298fd88 commit 5b8372b

1 file changed

Lines changed: 22 additions & 25 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1200UsingDirectivesMustBePlacedCorrectly.cs

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ internal class SA1200UsingDirectivesMustBePlacedCorrectly : DiagnosticAnalyzer
172172
private const string DescriptionOutside = "A C# using directive is placed inside of a namespace declaration.";
173173

174174
private static readonly Action<CompilationStartAnalysisContext> CompilationStartAction = HandleCompilationStart;
175-
private static readonly Action<SyntaxNodeAnalysisContext> CompilationUnitAction = HandleCompilationUnit;
176-
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
175+
private static readonly Action<SyntaxNodeAnalysisContext, StyleCopSettings> CompilationUnitAction = HandleCompilationUnit;
176+
private static readonly Action<SyntaxNodeAnalysisContext, StyleCopSettings> NamespaceDeclarationAction = HandleNamespaceDeclaration;
177177

178178
/// <inheritdoc/>
179179
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -187,32 +187,24 @@ public override void Initialize(AnalysisContext context)
187187

188188
private static void HandleCompilationStart(CompilationStartAnalysisContext context)
189189
{
190-
StyleCopSettings settings = SettingsHelper.GetStyleCopSettings(context.Options, context.CancellationToken);
191-
switch (settings.OrderingRules.UsingDirectivesPlacement)
192-
{
193-
case UsingDirectivesPlacement.InsideNamespace:
194-
context.RegisterSyntaxNodeActionHonorExclusions(CompilationUnitAction, SyntaxKind.CompilationUnit);
195-
break;
196-
197-
case UsingDirectivesPlacement.OutsideNamespace:
198-
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
199-
break;
200-
201-
case UsingDirectivesPlacement.Preserve:
202-
default:
203-
return;
204-
}
190+
context.RegisterSyntaxNodeActionHonorExclusions(CompilationUnitAction, SyntaxKind.CompilationUnit);
191+
context.RegisterSyntaxNodeActionHonorExclusions(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
205192
}
206193

207194
/// <summary>
208-
/// This method reports a diagnostic for any using directive placed outside a namespace declaration. It should
209-
/// only be registered with the analyzer infrastructure when
210-
/// <see cref="OrderingSettings.UsingDirectivesPlacement"/> is
195+
/// This method reports a diagnostic for any using directive placed outside a namespace declaration. No
196+
/// diagnostics are reported unless <see cref="OrderingSettings.UsingDirectivesPlacement"/> is
211197
/// <see cref="UsingDirectivesPlacement.InsideNamespace"/>.
212198
/// </summary>
213199
/// <param name="context">The analysis context.</param>
214-
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)
200+
/// <param name="settings">The effective StyleCop analysis settings.</param>
201+
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context, StyleCopSettings settings)
215202
{
203+
if (settings.OrderingRules.UsingDirectivesPlacement != UsingDirectivesPlacement.InsideNamespace)
204+
{
205+
return;
206+
}
207+
216208
CompilationUnitSyntax syntax = (CompilationUnitSyntax)context.Node;
217209

218210
List<SyntaxNode> usingDirectives = new List<SyntaxNode>();
@@ -251,14 +243,19 @@ private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)
251243
}
252244

253245
/// <summary>
254-
/// This method reports a diagnostic for any using directive placed within a namespace declaration. It should
255-
/// only be registered with the analyzer infrastructure when
256-
/// <see cref="OrderingSettings.UsingDirectivesPlacement"/> is
246+
/// This method reports a diagnostic for any using directive placed within a namespace declaration. No
247+
/// diagnostics are reported unless <see cref="OrderingSettings.UsingDirectivesPlacement"/> is
257248
/// <see cref="UsingDirectivesPlacement.OutsideNamespace"/>.
258249
/// </summary>
259250
/// <param name="context">The analysis context.</param>
260-
private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context)
251+
/// <param name="settings">The effective StyleCop analysis settings.</param>
252+
private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context, StyleCopSettings settings)
261253
{
254+
if (settings.OrderingRules.UsingDirectivesPlacement != UsingDirectivesPlacement.OutsideNamespace)
255+
{
256+
return;
257+
}
258+
262259
NamespaceDeclarationSyntax syntax = (NamespaceDeclarationSyntax)context.Node;
263260
foreach (UsingDirectiveSyntax directive in syntax.Usings)
264261
{

0 commit comments

Comments
 (0)