Skip to content

Commit

Permalink
Sort by additional keywords
Browse files Browse the repository at this point in the history
Fixes #8
  • Loading branch information
craigktreasure committed Oct 3, 2023
1 parent 21045c0 commit 3b3929c
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/MemberOrder/MemberOrder/MemberOrderAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -168,11 +168,21 @@ public static int GetSpecialKeywordOrder(MemberDeclarationSyntax member)
return 0;
}

if (member.Modifiers.Any(SyntaxKind.StaticKeyword))
if (member.Modifiers.Any(SyntaxKind.StaticKeyword) && member.Modifiers.Any(SyntaxKind.ReadOnlyKeyword))
{
return 1;
}

if (member.Modifiers.Any(SyntaxKind.StaticKeyword))
{
return 2;
}

if (member.Modifiers.Any(SyntaxKind.ReadOnlyKeyword))
{
return 3;
}

return 99;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,19 @@ public async Task CodeFix_FieldsOutOfSpecialKeywordOrder_Reordered()
class MyClass
{
public int myPublicField;
public readonly int myPublicReadonlyField = 1;
public static int myPublicStaticField;
public static readonly int myPublicStaticReadonlyField;
public const int myPublicConstantField = 0;
}";

string fixtest = @"
class MyClass
{
public const int myPublicConstantField = 0;
public static readonly int myPublicStaticReadonlyField;
public static int myPublicStaticField;
public readonly int myPublicReadonlyField = 1;
public int myPublicField;
}";

Expand Down
34 changes: 34 additions & 0 deletions tests/MemberOrder/MemberOrder.Tests/MemberOrderUnitTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,40 @@ private void MyPrivateMethodB() { }
await VerifyCS.VerifyAnalyzerAsync(test);
}

[TestMethod]
public async Task Analyzer_Class_KeywordsInOrder_NoDiagnostics()
{
string test = @"
public class MyClass
{
// Fields
public const int myPublicConstantField = 0;
public static readonly int myPublicStaticReadonlyField;
public static int myPublicStaticField;
public readonly int myPublicReadonlyField = 1;
public int myPublicField;
// Properties
public static int MyPublicStaticProperty { get; set; }
public int MyPublicProperty { get; set; }
// Delegates
public delegate void MyPublicDelegate();
// Events and event fields
public static event MyPublicDelegate MyPublicStaticEvent { add { } remove { } }
public static event MyPublicDelegate MyPublicStaticEventField;
public event MyPublicDelegate MyPublicEvent { add { } remove { } }
public event MyPublicDelegate MyPublicEventField;
// Methods
public static void MyPublicStaticMethod() { }
public void MyPublicMethod() { }
}";

await VerifyCS.VerifyAnalyzerAsync(test);
}

[TestMethod]
public async Task Analyzer_Class_ConstructorBeforeIndexer_SingleDiagnostic()
{
Expand Down

0 comments on commit 3b3929c

Please sign in to comment.