Skip to content

Commit 0bab743

Browse files
committed
Clean up stuff per review
1 parent aac8cb5 commit 0bab743

File tree

3 files changed

+61
-51
lines changed

3 files changed

+61
-51
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using Rubberduck.Inspections.CodePathAnalysis.Nodes;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
6+
namespace Rubberduck.Inspections.CodePathAnalysis.Extensions
7+
{
8+
public static class NodeExtensions
9+
{
10+
public static IEnumerable<INode> GetFlattenedNodes(this INode node, IEnumerable<Type> excludedTypes)
11+
{
12+
foreach (var child in node.Children)
13+
{
14+
if (!excludedTypes.Contains(child.GetType()))
15+
{
16+
yield return child;
17+
}
18+
else
19+
{
20+
foreach (var nextChild in GetFlattenedNodes(child, excludedTypes))
21+
{
22+
yield return nextChild;
23+
}
24+
}
25+
}
26+
}
27+
28+
public static IEnumerable<INode> GetNodes(this INode node, IEnumerable<Type> types)
29+
{
30+
if (types.Contains(node.GetType()))
31+
{
32+
yield return node;
33+
}
34+
35+
foreach (var child in node.Children)
36+
{
37+
foreach (var childNode in GetNodes(child, types))
38+
{
39+
yield return childNode;
40+
}
41+
}
42+
}
43+
44+
public static INode GetFirstNode(this INode node, IEnumerable<Type> excludedTypes)
45+
{
46+
if (!excludedTypes.Contains(node.GetType()))
47+
{
48+
return node;
49+
}
50+
51+
return GetFirstNode(node.Children[0], excludedTypes);
52+
}
53+
}
54+
}

Rubberduck.CodeAnalysis/Inspections/Concrete/AssignmentNotUsedInspection.cs

Lines changed: 6 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Rubberduck.Inspections.CodePathAnalysis;
66
using Rubberduck.Parsing.Symbols;
77
using Rubberduck.Inspections.CodePathAnalysis.Nodes;
8+
using Rubberduck.Inspections.CodePathAnalysis.Extensions;
89
using System.Linq;
910
using Rubberduck.Inspections.Results;
1011

@@ -28,23 +29,23 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
2829
{
2930
var tree = _walker.GenerateTree(variable.ParentScopeDeclaration.Context, variable);
3031

31-
nodes.AddRange(GetReferences(tree, variable));
32+
nodes.AddRange(GetIdentifierReferences(tree, variable));
3233
}
3334

3435
return nodes
3536
.Select(issue => new IdentifierReferenceInspectionResult(this, Description, State, issue))
3637
.ToList();
3738
}
3839

39-
private List<IdentifierReference> GetReferences(INode node, Declaration declaration)
40+
private List<IdentifierReference> GetIdentifierReferences(INode node, Declaration declaration)
4041
{
4142
var nodes = new List<IdentifierReference>();
4243

43-
var blockNodes = GetBlocks(node);
44+
var blockNodes = node.GetNodes(new[] { typeof(BlockNode) });
4445
foreach (var block in blockNodes)
4546
{
4647
INode lastNode = default;
47-
foreach (var flattenedNode in GetFlattenedNodes(block))
48+
foreach (var flattenedNode in block.GetFlattenedNodes(new[] { typeof(GenericNode), typeof(BlockNode) }))
4849
{
4950
if (flattenedNode is AssignmentNode &&
5051
lastNode is AssignmentNode)
@@ -56,59 +57,13 @@ private List<IdentifierReference> GetReferences(INode node, Declaration declarat
5657
}
5758

5859
if (lastNode is AssignmentNode &&
59-
GetFirstNonGenericNode(block.Children[0]) is DeclarationNode)
60+
block.Children[0].GetFirstNode(new[] { typeof(GenericNode) }) is DeclarationNode)
6061
{
6162
nodes.Add(lastNode.Reference);
6263
}
6364
}
6465

6566
return nodes;
6667
}
67-
68-
private IEnumerable<INode> GetFlattenedNodes(INode node)
69-
{
70-
foreach (var child in node.Children)
71-
{
72-
switch (child)
73-
{
74-
case GenericNode _:
75-
case BlockNode _:
76-
foreach (var nextChild in GetFlattenedNodes(child))
77-
{
78-
yield return nextChild;
79-
}
80-
break;
81-
default:
82-
yield return child;
83-
break;
84-
}
85-
}
86-
}
87-
88-
private IEnumerable<INode> GetBlocks(INode node)
89-
{
90-
if (node is BlockNode)
91-
{
92-
yield return node;
93-
}
94-
95-
foreach (var child in node.Children)
96-
{
97-
foreach (var block in GetBlocks(child))
98-
{
99-
yield return block;
100-
}
101-
}
102-
}
103-
104-
private INode GetFirstNonGenericNode(INode parent)
105-
{
106-
if (!(parent is GenericNode))
107-
{
108-
return parent;
109-
}
110-
111-
return GetFirstNonGenericNode(parent.Children[0]);
112-
}
11368
}
11469
}

Rubberduck.CodeAnalysis/Rubberduck.CodeAnalysis.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
<Compile Include="CodeMetrics\CyclomaticComplexityMetric.cs" />
7272
<Compile Include="CodeMetrics\LineCountMetric.cs" />
7373
<Compile Include="CodeMetrics\NestingLevelMetric.cs" />
74+
<Compile Include="CodePathAnalysis\Extensions\NodeExtensions.cs" />
7475
<Compile Include="CodePathAnalysis\Nodes\ILoopNode.cs" />
7576
<Compile Include="CodePathAnalysis\Nodes\Implementations\AssignmentNode.cs" />
7677
<Compile Include="CodePathAnalysis\Nodes\Implementations\BlockNode.cs" />

0 commit comments

Comments
 (0)