Skip to content

Commit 20bfee9

Browse files
committed
fixes #2621
1 parent 86b22cb commit 20bfee9

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

Rubberduck.CodeAnalysis/Inspections/Concrete/OptionExplicitInspection.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
6060

6161
public class MissingOptionExplicitListener : VBAParserBaseListener, IInspectionListener
6262
{
63-
private readonly List<QualifiedContext<ParserRuleContext>> _contexts = new List<QualifiedContext<ParserRuleContext>>();
64-
public IReadOnlyList<QualifiedContext<ParserRuleContext>> Contexts => _contexts;
63+
private readonly IDictionary<string, QualifiedContext<ParserRuleContext>> _contexts = new Dictionary<string,QualifiedContext<ParserRuleContext>>();
64+
public IReadOnlyList<QualifiedContext<ParserRuleContext>> Contexts => _contexts.Values.ToList();
6565

6666
public QualifiedModuleName CurrentModuleName { get; set; }
6767

@@ -70,6 +70,14 @@ public void ClearContexts()
7070
_contexts.Clear();
7171
}
7272

73+
public override void ExitModuleBody(VBAParser.ModuleBodyContext context)
74+
{
75+
if (context.ChildCount == 0 && _contexts.ContainsKey(CurrentModuleName.Name))
76+
{
77+
_contexts.Remove(CurrentModuleName.Name);
78+
}
79+
}
80+
7381
public override void ExitModuleDeclarations([NotNull] VBAParser.ModuleDeclarationsContext context)
7482
{
7583
var hasOptionExplicit = false;
@@ -83,7 +91,7 @@ public override void ExitModuleDeclarations([NotNull] VBAParser.ModuleDeclaratio
8391

8492
if (!hasOptionExplicit)
8593
{
86-
_contexts.Add(new QualifiedContext<ParserRuleContext>(CurrentModuleName, (ParserRuleContext)context.Parent));
94+
_contexts.Add(CurrentModuleName.Name, new QualifiedContext<ParserRuleContext>(CurrentModuleName, (ParserRuleContext)context.Parent));
8795
}
8896
}
8997
}

RubberduckTests/Inspections/OptionExplicitInspectionTests.cs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,34 @@ namespace RubberduckTests.Inspections
1010
[TestFixture]
1111
public class OptionExplicitInspectionTests
1212
{
13+
private const string OptionExplicitNotSpecified = @"
14+
Sub DoSomething()
15+
End Sub";
16+
1317
[Test]
1418
[Category("Inspections")]
15-
public void NotAlreadySpecified_ReturnsResult()
19+
public void EmptyModule_NoResult()
1620
{
1721
const string inputCode = @"";
1822

23+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _);
24+
using (var state = MockParser.CreateAndParse(vbe.Object))
25+
{
26+
27+
var inspection = new OptionExplicitInspection(state);
28+
var inspector = InspectionsHelper.GetInspector(inspection);
29+
var inspectionResults = inspector.FindIssuesAsync(state, CancellationToken.None).Result;
30+
31+
Assert.AreEqual(0, inspectionResults.Count());
32+
}
33+
}
34+
35+
[Test]
36+
[Category("Inspections")]
37+
public void NotAlreadySpecified_ReturnsResult()
38+
{
39+
const string inputCode = OptionExplicitNotSpecified;
40+
1941
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _);
2042
using (var state = MockParser.CreateAndParse(vbe.Object))
2143
{
@@ -50,7 +72,7 @@ public void AlreadySpecified_DoesNotReturnResult()
5072
[Category("Inspections")]
5173
public void NotAlreadySpecified_ReturnsMultipleResults()
5274
{
53-
const string inputCode = @"";
75+
const string inputCode = OptionExplicitNotSpecified;
5476

5577
var builder = new MockVbeBuilder();
5678
var project = builder.ProjectBuilder("TestProject1", ProjectProtection.Unprotected)
@@ -74,7 +96,7 @@ public void NotAlreadySpecified_ReturnsMultipleResults()
7496
[Category("Inspections")]
7597
public void PartiallySpecified_ReturnsResults()
7698
{
77-
const string inputCode1 = @"";
99+
const string inputCode1 = OptionExplicitNotSpecified;
78100
const string inputCode2 = @"Option Explicit";
79101

80102
var builder = new MockVbeBuilder();

0 commit comments

Comments
 (0)