Skip to content

Commit b968e94

Browse files
committed
Merge branch 'next' of https://github.com/rubberduck-vba/Rubberduck into FixTestMethodCommands
2 parents 0f11f29 + 22701ec commit b968e94

File tree

2 files changed

+82
-1
lines changed

2 files changed

+82
-1
lines changed

RetailCoder.VBE/Inspections/VariableTypeNotDeclaredInspectionResult.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System.Linq;
23
using Antlr4.Runtime;
34
using Rubberduck.Parsing.Grammar;
45
using Rubberduck.Parsing.Symbols;
@@ -90,7 +91,25 @@ private string DeclareExplicitVariant(VBAParser.ArgContext context, out string i
9091
}
9192

9293
instruction = context.GetText();
93-
return instruction + ' ' + Tokens.As + ' ' + Tokens.Variant;
94+
if (!context.children.Select(s => s.GetType()).Contains(typeof(VBAParser.ArgDefaultValueContext)))
95+
{
96+
return instruction + ' ' + Tokens.As + ' ' + Tokens.Variant;
97+
}
98+
99+
var fix = string.Empty;
100+
var hasArgDefaultValue = false;
101+
foreach (var child in context.children)
102+
{
103+
if (child.GetType() == typeof(VBAParser.ArgDefaultValueContext))
104+
{
105+
fix += Tokens.As + ' ' + Tokens.Variant + ' ';
106+
hasArgDefaultValue = true;
107+
}
108+
109+
fix += child.GetText();
110+
}
111+
112+
return hasArgDefaultValue ? fix : fix + ' ' + Tokens.As + ' ' + Tokens.Variant;
94113
}
95114

96115
private string DeclareExplicitVariant(VBAParser.ConstSubStmtContext context, out string instruction)

RubberduckTests/Inspections/VariableTypeNotDeclaredInspectionTests.cs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,68 @@ Dim var1 As Variant
286286
Assert.AreEqual(expectedCode, module.Lines());
287287
}
288288

289+
[TestMethod]
290+
[TestCategory("Inspections")]
291+
public void VariableTypeNotDeclared_ReturnsResult_QuickFixWorks_ParameterWithoutDefaultValue()
292+
{
293+
const string inputCode =
294+
@"Sub Foo(ByVal Fizz)
295+
End Sub";
296+
297+
const string expectedCode =
298+
@"Sub Foo(ByVal Fizz As Variant)
299+
End Sub";
300+
301+
//Arrange
302+
var builder = new MockVbeBuilder();
303+
VBComponent component;
304+
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
305+
var project = vbe.Object.VBProjects.Item(0);
306+
var module = project.VBComponents.Item(0).CodeModule;
307+
var mockHost = new Mock<IHostApplication>();
308+
mockHost.SetupAllProperties();
309+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object));
310+
311+
parser.Parse(new CancellationTokenSource());
312+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
313+
314+
var inspection = new VariableTypeNotDeclaredInspection(parser.State);
315+
inspection.GetInspectionResults().First().QuickFixes.First().Fix();
316+
317+
Assert.AreEqual(expectedCode, module.Lines());
318+
}
319+
320+
[TestMethod]
321+
[TestCategory("Inspections")]
322+
public void VariableTypeNotDeclared_ReturnsResult_QuickFixWorks_ParameterWithDefaultValue()
323+
{
324+
const string inputCode =
325+
@"Sub Foo(ByVal Fizz = False)
326+
End Sub";
327+
328+
const string expectedCode =
329+
@"Sub Foo(ByVal Fizz As Variant = False)
330+
End Sub";
331+
332+
//Arrange
333+
var builder = new MockVbeBuilder();
334+
VBComponent component;
335+
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
336+
var project = vbe.Object.VBProjects.Item(0);
337+
var module = project.VBComponents.Item(0).CodeModule;
338+
var mockHost = new Mock<IHostApplication>();
339+
mockHost.SetupAllProperties();
340+
var parser = MockParser.Create(vbe.Object, new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object));
341+
342+
parser.Parse(new CancellationTokenSource());
343+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
344+
345+
var inspection = new VariableTypeNotDeclaredInspection(parser.State);
346+
inspection.GetInspectionResults().First().QuickFixes.First().Fix();
347+
348+
Assert.AreEqual(expectedCode, module.Lines());
349+
}
350+
289351
[TestMethod]
290352
[TestCategory("Inspections")]
291353
public void InspectionType()

0 commit comments

Comments
 (0)