Skip to content

Commit e64d64f

Browse files
committed
Refactor code and add more test cases
The code has been refactored to remove redundancies, fix incorrect logic, and improve readability. In addition, multiple test cases have been added to verify the absence of diagnostics when accessing a value after checking for failure.
1 parent c780042 commit e64d64f

File tree

4 files changed

+14
-5
lines changed

4 files changed

+14
-5
lines changed

CSharpFunctionalExtensions.Analyzers.Tests/UseResultValueWithoutCheckTests/UseResultValueWithoutCheckTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,17 @@ public async Task Test_AccessValueAfterCheckForFailure(string source)
9191
{
9292
await VerifyDiagnosticAsync(AddContext(source), options: CSharpTestOptions());
9393
}
94+
95+
[Theory]
96+
[InlineData("if(!result.IsFailure) Console.WriteLine(result.Value);")]
97+
[InlineData(" var x = result.IsFailure ? 0 : result.Value;")]
98+
[InlineData(" var x = !result.IsSuccess ? 0 : result.Value;")]
99+
[InlineData(" var x = result.IsSuccess ? result.Value : 0;")]
100+
[InlineData(" var x = !result.IsFailure ? result.Value : 0;")]
101+
public async Task TestNoDiagnostic_AccessValueAfterCheckForFailure(string source)
102+
{
103+
await VerifyNoDiagnosticAsync(AddContext(source), options: CSharpTestOptions());
104+
}
94105

95106
[Fact]
96107
public async Task Test_AccessWithinReturnStatement()

CSharpFunctionalExtensions.Analyzers/UseResultValueWithoutCheck/ResultValueWalker.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,11 @@ private void NodeWalkerInternal(SyntaxNode node)
7373
private void CheckTernaryCondition(ConditionalExpressionSyntax ternary)
7474
{
7575
_result.CheckResult = DetermineCheckResult(ternary.Condition);
76+
_result.Terminated = true;
7677
_result.AccessedValue = _result.CheckResult switch
7778
{
7879
CheckResult.CheckedSuccess => ternary.WhenTrue == _memberAccessValueResult && ternary.WhenFalse != _memberAccessValueResult,
79-
CheckResult.CheckedFailure => ternary.WhenFalse == _memberAccessValueResult && ternary.WhenTrue != _memberAccessValueResult,
80+
CheckResult.CheckedFailure => ternary.WhenTrue == _memberAccessValueResult,
8081
_ => _result.AccessedValue
8182
};
8283
}
@@ -183,8 +184,6 @@ private CheckResult DetermineCheckResult(ExpressionSyntax condition)
183184
{
184185
RecursivePatternSyntax recursivePatternSyntax => CheckedRecusivePattern(recursivePatternSyntax),
185186
};
186-
187-
break;
188187
case SwitchExpressionSyntax switchExpressionSyntax:
189188
throw new NotImplementedException();
190189
}

CSharpFunctionalExtensions.Analyzers/UseResultValueWithoutCheck/WalkerResult.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ internal class WalkerResult
88

99
public bool CorrectUsage =>
1010
(AccessedValue && CheckResult == CheckResult.CheckedSuccess) ||
11-
(CheckResult == CheckResult.CheckedFailure && Terminated && !AccessedValue);
11+
(CheckResult == CheckResult.CheckedFailure && Terminated || !AccessedValue);
1212

1313
public void Reset()
1414
{

build/Build.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ class Build : NukeBuild
151151
.Requires(() => NugetApiUrl)
152152
.Requires(() => NugetApiKey)
153153
.OnlyWhenDynamic(() => IsTag|| Repository.IsOnReleaseBranch(), "No Tag added to commit")
154-
.Triggers(CreateRelease)
155154
.Executes(() =>
156155
{
157156
DotNetNuGetPush(s =>

0 commit comments

Comments
 (0)