-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #23 from kysect/feat/roslyn-rule-id
Add strong typing for RoslynRuleId
- Loading branch information
Showing
13 changed files
with
132 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,7 @@ | ||
<Project> | ||
<PropertyGroup> | ||
<LangVersion>latest</LangVersion> | ||
<NoWarn>$(NoWarn);CS1591</NoWarn> | ||
<GenerateDocumentationFile>true</GenerateDocumentationFile> | ||
</PropertyGroup> | ||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
using System; | ||
|
||
namespace Kysect.Configuin.Common; | ||
|
||
public static class StringExtensions | ||
{ | ||
public static string WithoutPrefix(this string value, string prefix) | ||
{ | ||
if (!value.StartsWith(prefix, StringComparison.InvariantCultureIgnoreCase)) | ||
throw new ArgumentException($"String {value} does not start with {prefix}"); | ||
|
||
return value.Substring(prefix.Length, value.Length - prefix.Length); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
Sources/Kysect.Configuin.Core/RoslynRuleModels/RoslynRuleId.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
using Kysect.Configuin.Common; | ||
|
||
namespace Kysect.Configuin.Core.RoslynRuleModels; | ||
|
||
public readonly struct RoslynRuleId | ||
{ | ||
public RoslynRuleType Type { get; } | ||
public int Id { get; } | ||
|
||
public static RoslynRuleId Parse(string value) | ||
{ | ||
// CA1234 | ||
string qualityRulePrefix = "CA"; | ||
if (value.StartsWith(qualityRulePrefix, StringComparison.InvariantCultureIgnoreCase)) | ||
{ | ||
string id = value.WithoutPrefix(qualityRulePrefix); | ||
return new RoslynRuleId(RoslynRuleType.QualityRule, int.Parse(id)); | ||
} | ||
|
||
// IDE1234 | ||
string styleRulePrefix = "IDE"; | ||
if (value.StartsWith(styleRulePrefix, StringComparison.InvariantCultureIgnoreCase)) | ||
{ | ||
string id = value.WithoutPrefix(styleRulePrefix); | ||
return new RoslynRuleId(RoslynRuleType.StyleRule, int.Parse(id)); | ||
} | ||
|
||
throw new ArgumentException($"String {value} is not valid Roslyn rule id"); | ||
} | ||
|
||
public RoslynRuleId(RoslynRuleType type, int id) | ||
{ | ||
Type = type; | ||
Id = id; | ||
} | ||
|
||
public override bool Equals(object? obj) | ||
{ | ||
if (obj is RoslynRuleId o) | ||
return Equals(o); | ||
|
||
return false; | ||
} | ||
|
||
public bool Equals(RoslynRuleId other) | ||
{ | ||
return Type == other.Type && Id == other.Id; | ||
} | ||
|
||
public override int GetHashCode() | ||
{ | ||
return HashCode.Combine((int)Type, Id); | ||
} | ||
} |
7 changes: 7 additions & 0 deletions
7
Sources/Kysect.Configuin.Core/RoslynRuleModels/RoslynRuleType.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
namespace Kysect.Configuin.Core.RoslynRuleModels; | ||
|
||
public enum RoslynRuleType | ||
{ | ||
StyleRule, | ||
QualityRule | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 30 additions & 0 deletions
30
Sources/Kysect.Configuin.Tests/MsLearnDocumentation/RoslynRuleIdTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
using FluentAssertions; | ||
using Kysect.Configuin.Core.RoslynRuleModels; | ||
using NUnit.Framework; | ||
|
||
namespace Kysect.Configuin.Tests.MsLearnDocumentation; | ||
|
||
public class RoslynRuleIdTests | ||
{ | ||
[Test] | ||
[TestCase("CA1000", RoslynRuleType.QualityRule, 1000)] | ||
[TestCase("ca1001", RoslynRuleType.QualityRule, 1001)] | ||
[TestCase("IDE1002", RoslynRuleType.StyleRule, 1002)] | ||
public void Parse(string input, RoslynRuleType type, int id) | ||
{ | ||
var expected = new RoslynRuleId(type, id); | ||
|
||
var roslynRuleId = RoslynRuleId.Parse(input); | ||
|
||
roslynRuleId.Should().Be(expected); | ||
} | ||
|
||
[Test] | ||
public void Parse_WithIncorrectPrefix_ThrowException() | ||
{ | ||
Assert.Throws<ArgumentException>(() => | ||
{ | ||
var roslynRuleId = RoslynRuleId.Parse("QWE1234"); | ||
}); | ||
} | ||
} |