Skip to content

Commit

Permalink
Update SA1216 for file-scoped namespaces
Browse files Browse the repository at this point in the history
  • Loading branch information
sharwell committed Jan 28, 2022
1 parent 947b470 commit dac0dd8
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,57 @@

namespace StyleCop.Analyzers.Test.CSharp10.OrderingRules
{
using System.Threading;
using System.Threading.Tasks;
using StyleCop.Analyzers.Test.CSharp9.OrderingRules;
using Xunit;
using static StyleCop.Analyzers.Test.Verifiers.StyleCopCodeFixVerifier<
StyleCop.Analyzers.OrderingRules.SA1216UsingStaticDirectivesMustBePlacedAtTheCorrectLocation,
StyleCop.Analyzers.OrderingRules.UsingCodeFixProvider>;

public class SA1216CSharp10UnitTests : SA1216CSharp9UnitTests
{
[Fact]
public async Task TestUsingDirectivesOrderingInFileScopedNamespaceAsync()
{
await new CSharpTest
{
TestSources =
{
@"namespace Foo;
{|#0:using static System.Math;|}
using Execute = System.Action;
using System;
",
@"namespace Bar;
using Execute = System.Action;
{|#1:using static System.Array;|}
using static System.Math;
using System;
",
},
ExpectedDiagnostics =
{
Diagnostic().WithLocation(0),
Diagnostic().WithLocation(1),
},
FixedSources =
{
@"namespace Foo;
using System;
using static System.Math;
using Execute = System.Action;
",
@"namespace Bar;
using System;
using static System.Array;
using static System.Math;
using Execute = System.Action;
",
},
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ namespace StyleCop.Analyzers.OrderingRules
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
using StyleCop.Analyzers.Helpers;
using StyleCop.Analyzers.Lightup;

/// <summary>
/// A static using directive is positioned at the wrong location.
Expand Down Expand Up @@ -37,7 +38,7 @@ internal class SA1216UsingStaticDirectivesMustBePlacedAtTheCorrectLocation : Dia
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, AnalyzerCategory.OrderingRules, DiagnosticSeverity.Warning, AnalyzerConstants.EnabledByDefault, Description, HelpLink);

private static readonly Action<SyntaxNodeAnalysisContext> CompilationUnitAction = HandleCompilationUnit;
private static readonly Action<SyntaxNodeAnalysisContext> NamespaceDeclarationAction = HandleNamespaceDeclaration;
private static readonly Action<SyntaxNodeAnalysisContext> BaseNamespaceDeclarationAction = HandleBaseNamespaceDeclaration;

/// <inheritdoc/>
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
Expand All @@ -50,7 +51,7 @@ public override void Initialize(AnalysisContext context)
context.EnableConcurrentExecution();

context.RegisterSyntaxNodeAction(CompilationUnitAction, SyntaxKind.CompilationUnit);
context.RegisterSyntaxNodeAction(NamespaceDeclarationAction, SyntaxKind.NamespaceDeclaration);
context.RegisterSyntaxNodeAction(BaseNamespaceDeclarationAction, SyntaxKinds.BaseNamespaceDeclaration);
}

private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)
Expand All @@ -59,9 +60,9 @@ private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)
CheckUsingDeclarations(context, compilationUnit.Usings);
}

private static void HandleNamespaceDeclaration(SyntaxNodeAnalysisContext context)
private static void HandleBaseNamespaceDeclaration(SyntaxNodeAnalysisContext context)
{
var namespaceDirective = (NamespaceDeclarationSyntax)context.Node;
var namespaceDirective = (BaseNamespaceDeclarationSyntaxWrapper)context.Node;
CheckUsingDeclarations(context, namespaceDirective.Usings);
}

Expand Down

0 comments on commit dac0dd8

Please sign in to comment.