Skip to content

Commit

Permalink
closes #5824
Browse files Browse the repository at this point in the history
  • Loading branch information
retailcoder committed Oct 12, 2021
1 parent 60c347b commit 8c47d89
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,7 @@ protected override IEnumerable<IdentifierReference> ReferencesInModule(Qualified

protected override bool IsResultReference(IdentifierReference reference, DeclarationFinder finder)
{
return !(IsAssignmentOfNothing(reference)
|| IsPotentiallyUsedViaJump(reference, finder));
return !(IsAssignmentOfNothing(reference) || IsPotentiallyUsedViaJump(reference, finder));
}

protected override string ResultDescription(IdentifierReference reference)
Expand Down Expand Up @@ -115,8 +114,11 @@ private static IEnumerable<IdentifierReference> FindUnusedAssignmentReferences(D
? FindUnusedAssignmentNodes(tree, localVariable, allAssignmentsAndReferences)
: allAssignmentsAndReferences.OfType<AssignmentNode>();

return unusedAssignmentNodes.Where(n => !IsDescendentOfNeverFlagNode(n))
.Select(n => n.Reference);
var results = unusedAssignmentNodes
.Where(n => !IsDescendentOfNeverFlagNode(n))
.Select(n => n.Reference);

return results;
}

private static IEnumerable<AssignmentNode> FindUnusedAssignmentNodes(INode node, Declaration localVariable, IEnumerable<INode> allAssignmentsAndReferences)
Expand All @@ -136,7 +138,7 @@ private static IEnumerable<AssignmentNode> FindUnusedAssignmentNodes(INode node,
? assignmentExprNodes.TakeWhile(n => n != assignmentExprNodesWithReference.LastOrDefault())
?.LastOrDefault()
?.Nodes(new[] { typeof(AssignmentNode) })
: allAssignmentsAndReferences.TakeWhile(n => n != refNode)
: allAssignmentsAndReferences.TakeWhile(n => n != refNode && !IsDescendentOfNeverFlagNode(n))
.OfType<AssignmentNode>();

if (assignmentsPrecedingReference?.Any() ?? false)
Expand All @@ -148,7 +150,7 @@ private static IEnumerable<AssignmentNode> FindUnusedAssignmentNodes(INode node,
return allAssignmentsAndReferences.OfType<AssignmentNode>().Except(usedAssignments);
}

private static bool IsDescendentOfNeverFlagNode(AssignmentNode assignment)
private static bool IsDescendentOfNeverFlagNode(INode assignment)
{
return assignment.TryGetAncestorNode<BranchNode>(out _)
|| assignment.TryGetAncestorNode<LoopNode>(out _);
Expand Down
20 changes: 20 additions & 0 deletions RubberduckTests/Inspections/AssignmentNotUsedInspectionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,26 @@ End Function
Assert.AreEqual(expected, results.Count());
}

[Test]
public void ConditionalAssignments_NotConsideredForOverwritingAssignment()
{
string code =
$@"
Public Function Test() As Boolean
Dim value As Boolean
value = True
If True Then
value = False
End If
Test = value
End Function
";
var results = InspectionResultsForStandardModule(code);
Assert.AreEqual(0, results.Count());
}

[Test]
public void ResumeStmt_SingleResult()
{
Expand Down

0 comments on commit 8c47d89

Please sign in to comment.