diff --git a/StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp11/OrderingRules/SA1206CSharp11CodeFixProviderUnitTests.cs b/StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp11/OrderingRules/SA1206CSharp11CodeFixProviderUnitTests.cs
index b542f8de0..3f462b134 100644
--- a/StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp11/OrderingRules/SA1206CSharp11CodeFixProviderUnitTests.cs
+++ b/StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp11/OrderingRules/SA1206CSharp11CodeFixProviderUnitTests.cs
@@ -3,9 +3,25 @@
namespace StyleCop.Analyzers.Test.CSharp11.OrderingRules
{
+ using System.Threading;
+ using System.Threading.Tasks;
using StyleCop.Analyzers.Test.CSharp10.OrderingRules;
+ using Xunit;
+ using static StyleCop.Analyzers.Test.Verifiers.StyleCopCodeFixVerifier<
+ StyleCop.Analyzers.OrderingRules.SA1206DeclarationKeywordsMustFollowOrder,
+ StyleCop.Analyzers.OrderingRules.SA1206CodeFixProvider>;
public class SA1206CSharp11CodeFixProviderUnitTests : SA1206CSharp10CodeFixProviderUnitTests
{
+ [Fact]
+ [WorkItem(3589, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3589")]
+ public async Task VerifyFileKeywordReorderingInClassDeclarationAsync()
+ {
+ var testCode = $"static unsafe {{|#0:file|}} class TestClass {{}}";
+ var fixedTestCode = $"file static unsafe class TestClass {{}}";
+
+ var expected = Diagnostic().WithLocation(0).WithArguments("file", "unsafe");
+ await VerifyCSharpFixAsync(testCode, expected, fixedTestCode, CancellationToken.None).ConfigureAwait(false);
+ }
}
}
diff --git a/StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp11/StyleCop.Analyzers.Test.CSharp11.csproj b/StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp11/StyleCop.Analyzers.Test.CSharp11.csproj
index 42ff82649..7a51f08ac 100644
--- a/StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp11/StyleCop.Analyzers.Test.CSharp11.csproj
+++ b/StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp11/StyleCop.Analyzers.Test.CSharp11.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/Helpers/ModifierOrderHelper.cs b/StyleCop.Analyzers/StyleCop.Analyzers/Helpers/ModifierOrderHelper.cs
index f73a68e33..9992daa59 100644
--- a/StyleCop.Analyzers/StyleCop.Analyzers/Helpers/ModifierOrderHelper.cs
+++ b/StyleCop.Analyzers/StyleCop.Analyzers/Helpers/ModifierOrderHelper.cs
@@ -7,6 +7,7 @@ namespace StyleCop.Analyzers.OrderingRules
{
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
+ using StyleCop.Analyzers.Lightup;
internal static class ModifierOrderHelper
{
@@ -21,7 +22,7 @@ internal enum ModifierType
None,
///
- /// Represents any of access modifiers, i.e , , , .
+ /// Represents any of access modifiers, i.e , , , , .
///
Access,
@@ -46,6 +47,7 @@ internal static ModifierType GetModifierType(SyntaxToken modifier)
case SyntaxKind.ProtectedKeyword:
case SyntaxKind.InternalKeyword:
case SyntaxKind.PrivateKeyword:
+ case SyntaxKindEx.FileKeyword:
result = ModifierType.Access;
break;
diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/Lightup/SyntaxKindEx.cs b/StyleCop.Analyzers/StyleCop.Analyzers/Lightup/SyntaxKindEx.cs
index d4f3cff8f..e0d65e7a7 100644
--- a/StyleCop.Analyzers/StyleCop.Analyzers/Lightup/SyntaxKindEx.cs
+++ b/StyleCop.Analyzers/StyleCop.Analyzers/Lightup/SyntaxKindEx.cs
@@ -14,6 +14,7 @@ internal static class SyntaxKindEx
public const SyntaxKind NotKeyword = (SyntaxKind)8440;
public const SyntaxKind ManagedKeyword = (SyntaxKind)8445;
public const SyntaxKind UnmanagedKeyword = (SyntaxKind)8446;
+ public const SyntaxKind FileKeyword = (SyntaxKind)8449;
public const SyntaxKind NullableKeyword = (SyntaxKind)8486;
public const SyntaxKind EnableKeyword = (SyntaxKind)8487;
public const SyntaxKind WarningsKeyword = (SyntaxKind)8488;