Skip to content

Commit

Permalink
Fixed evaluating default cases in switches for enums
Browse files Browse the repository at this point in the history
=> release
  • Loading branch information
hugener committed Mar 6, 2024
1 parent c15da01 commit 067a403
Show file tree
Hide file tree
Showing 7 changed files with 18 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ public void Analyze(OperationAnalysisContext operationAnalysisContext)
nullCase != null);

if (switchExpressionOperation.Arms
.SingleOrDefault(x => x.Pattern is IDiscardPatternOperation) is { } switchExpressionArmOperation)
.SingleOrDefault(x => x.Pattern is IDiscardPatternOperation) is { } switchExpressionArmOperation
&& nonNullableUnionType.TypeKind != TypeKind.Enum)
{
operationAnalysisContext.ReportDiagnostic(Diagnostic.Create(
DiscriminatedUnionsAnalyzer.SwitchShouldNotHaveDefaultCaseRule,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,13 @@ public void Analyze(OperationAnalysisContext operationAnalysisContext)
{
if (CanSwitchReachEnd(switchOperation))
{
operationAnalysisContext.ReportDiagnostic(Diagnostic.Create(
DiscriminatedUnionsAnalyzer.SwitchShouldNotHaveDefaultCaseRule,
defaultSwitchCaseOperation.Syntax.GetLocation(),
nonNullableUnionType));
if (nonNullableUnionType.TypeKind != TypeKind.Enum)
{
operationAnalysisContext.ReportDiagnostic(Diagnostic.Create(
DiscriminatedUnionsAnalyzer.SwitchShouldNotHaveDefaultCaseRule,
defaultSwitchCaseOperation.Syntax.GetLocation(),
nonNullableUnionType));
}
}
else
{
Expand Down
1 change: 0 additions & 1 deletion Source/Sundew.DiscriminatedUnions.Tester/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ namespace Sundew.DiscriminatedUnions.Tester;

using System;
using System.Collections.Generic;
using System.Net.Mail;
using TestData;

public static class Program
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,7 @@ await VerifyCS.VerifyAnalyzerAsync(
test,
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchAllCasesNotHandledRule)
.WithArguments("'On', 'Off'", Resources.Cases, TestData.UnionsState, Resources.Are)
.WithSpan(17, 16, 21, 14),
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchShouldNotHaveDefaultCaseRule)
.WithArguments(TestData.UnionsState)
.WithSpan(20, 17, 20, 27));
.WithSpan(17, 16, 21, 14));
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace Sundew.DiscriminatedUnions.Tests.SwitchExpression.Enums;
public class SwitchShouldNotHaveDefaultCaseAnalyzerTests
{
[TestMethod]
public async Task Given_SwitchExpression_When_DefaultCaseIsHandled_Then_SwitchShouldNotHaveDefaultCaseIsReported()
public async Task Given_SwitchExpression_When_DefaultCaseIsHandled_Then_SwitchShouldNotReportAnyDiagnostics()
{
var test = $@"#nullable enable
{TestData.Usings}
Expand All @@ -43,10 +43,6 @@ public bool Switch(State state)
{TestData.ValidEnumUnion}
";

await VerifyCS.VerifyAnalyzerAsync(
test,
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchShouldNotHaveDefaultCaseRule)
.WithArguments(TestData.UnionsState)
.WithSpan(23, 17, 23, 27));
await VerifyCS.VerifyAnalyzerAsync(test);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,6 @@ await VerifyCS.VerifyAnalyzerAsync(
test,
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchAllCasesNotHandledRule)
.WithArguments("'None', 'Off'", Resources.Cases, TestData.UnionsState, Resources.Are)
.WithSpan(17, 9, 23, 10),
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchShouldNotHaveDefaultCaseRule)
.WithArguments(TestData.UnionsState)
.WithSpan(21, 13, 22, 23));
.WithSpan(17, 9, 23, 10));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace Sundew.DiscriminatedUnions.Tests.SwitchStatement.Enums;
public class SwitchShouldNotHaveDefaultCaseAnalyzerTests
{
[TestMethod]
public async Task Given_SwitchStatement_When_DefaultCaseIsHandled_Then_SwitchShouldNotHaveDefaultCaseIsReported()
public async Task Given_SwitchStatement_When_DefaultCaseIsHandled_Then_SwitchShouldNotReportAnyDiagnostics()
{
var test = $@"#nullable enable
{TestData.Usings}
Expand All @@ -47,15 +47,11 @@ public void Switch(State state)
{TestData.ValidEnumUnion}
";

await VerifyCS.VerifyAnalyzerAsync(
test,
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchShouldNotHaveDefaultCaseRule)
.WithArguments(TestData.UnionsState)
.WithSpan(26, 13, 27, 23));
await VerifyCS.VerifyAnalyzerAsync(test);
}

[TestMethod]
public async Task Given_SwitchStatement_When_ValueMayBeNullAndDefaultCaseIsHandled_Then_SwitchShouldNotHaveDefaultCaseIsReported()
public async Task Given_SwitchStatement_When_ValueMayBeNullAndDefaultCaseIsHandled_Then_SwitchNotAllCasesAreHandledIsReported()
{
var test = $@"{TestData.Usings}
Expand Down Expand Up @@ -83,17 +79,14 @@ public void Switch(State? state)

await VerifyCS.VerifyAnalyzerAsync(
test,
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchShouldNotHaveDefaultCaseRule)
.WithArguments(TestData.UnionsState)
.WithSpan(25, 13, 26, 23),
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchAllCasesNotHandledRule)
.WithArguments("'null'", Resources.Case, TestData.UnionsState + '?', Resources.Is)
.WithSpan(17, 9, 27, 10));
}

[TestMethod]
public async Task
Given_SwitchStatement_When_DefaultCaseIsHandledAndNotAllCasesAreHandled_Then_AllCasesNotHandledAndSwitchShouldNotHaveDefaultCaseAreReported()
Given_SwitchStatement_When_DefaultCaseIsHandledAndNotAllCasesAreHandled_Then_AllCasesNotHandledIsReported()
{
var test = $@"{TestData.Usings}
Expand All @@ -119,9 +112,6 @@ await VerifyCS.VerifyAnalyzerAsync(
test,
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchAllCasesNotHandledRule)
.WithArguments("'On', 'Off'", Resources.Cases, TestData.UnionsState, Resources.Are)
.WithSpan(17, 9, 23, 10),
VerifyCS.Diagnostic(DiscriminatedUnionsAnalyzer.SwitchShouldNotHaveDefaultCaseRule)
.WithArguments(TestData.UnionsState)
.WithSpan(21, 13, 22, 23));
.WithSpan(17, 9, 23, 10));
}
}

0 comments on commit 067a403

Please sign in to comment.