@@ -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