Skip to content

Commit eb6f24f

Browse files
committed
removed use of regular expression in PassParameterByReferenceQuickFix
1 parent ffb411b commit eb6f24f

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

RetailCoder.VBE/Inspections/QuickFixes/PassParameterByReferenceQuickFix.cs

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Rubberduck.Parsing.Grammar;
55
using Rubberduck.VBEditor;
66
using System.Text.RegularExpressions;
7+
using static Rubberduck.Parsing.Grammar.VBAParser;
78

89
namespace Rubberduck.Inspections.QuickFixes
910
{
@@ -19,21 +20,26 @@ public PassParameterByReferenceQuickFix(ParserRuleContext context, QualifiedSele
1920

2021
public override void Fix()
2122
{
22-
string pattern = "^\\s*" + Tokens.ByVal + "(\\s+)";
23-
string rgxReplacement = Tokens.ByRef + "$1";
24-
Regex rgx = new Regex(pattern);
23+
var byValParameter = Context.GetText();
2524

26-
var parameter = Context.GetText();
27-
var newParameter = rgx.Replace(parameter, rgxReplacement);
25+
var byRefParameter = BuildByRefParameter(byValParameter);
2826

29-
var selection = Selection.Selection;
27+
ReplaceByValParameterInModule(byValParameter, byRefParameter);
28+
}
3029

30+
private string BuildByRefParameter(string originalParameter)
31+
{
32+
var everythingAfterTheByValToken = originalParameter.Substring(Tokens.ByVal.Length);
33+
return Tokens.ByRef + everythingAfterTheByValToken;
34+
}
35+
private void ReplaceByValParameterInModule( string byValParameter, string byRefParameter)
36+
{
37+
var selection = Selection.Selection;
3138
var module = Selection.QualifiedName.Component.CodeModule;
32-
{
33-
var lines = module.GetLines(selection.StartLine, selection.LineCount);
34-
var result = lines.Replace(parameter, newParameter);
35-
module.ReplaceLine(selection.StartLine, result);
36-
}
39+
40+
var lines = module.GetLines(selection.StartLine, selection.LineCount);
41+
var result = lines.Replace(byValParameter, byRefParameter);
42+
module.ReplaceLine(selection.StartLine, result);
3743
}
3844
}
3945
}

RubberduckTests/Inspections/AssignedByValParameterInspectionTests.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,17 +97,30 @@ Dim var1 As Integer
9797
[TestCategory("Inspections")]
9898
public void AssignedByValParameter_QuickFixWorks()
9999
{
100-
const string inputCode =
100+
string inputCode =
101101
@"Public Sub Foo(ByVal barByVal As String)
102102
Let barByVal = ""test""
103103
End Sub";
104-
const string expectedCode =
104+
string expectedCode =
105105
@"Public Sub Foo(ByRef barByVal As String)
106106
Let barByVal = ""test""
107107
End Sub";
108108

109109
var quickFixResult = ApplyPassParameterByReferenceQuickFixToVBAFragment(inputCode);
110110
Assert.AreEqual(expectedCode, quickFixResult);
111+
112+
//check when ByVal argument is one of several parameters
113+
inputCode =
114+
@"Public Sub Foo(ByRef firstArg As Long, ByVal barByVal As String, secondArg as Double)
115+
Let barByVal = ""test""
116+
End Sub";
117+
expectedCode =
118+
@"Public Sub Foo(ByRef firstArg As Long, ByRef barByVal As String, secondArg as Double)
119+
Let barByVal = ""test""
120+
End Sub";
121+
122+
quickFixResult = ApplyPassParameterByReferenceQuickFixToVBAFragment(inputCode);
123+
Assert.AreEqual(expectedCode, quickFixResult);
111124
}
112125

113126
[TestMethod]
@@ -507,9 +520,6 @@ private Mock<IVBE> BuildMockVBEStandardModuleForVBAFragment(string inputCode)
507520
{
508521
var builder = new MockVbeBuilder();
509522
IVBComponent component;
510-
//TODO: removal of the two lines below have no effect on the outcome of any test...remove?
511-
//var mockHost = new Mock<IHostApplication>();
512-
//mockHost.SetupAllProperties();
513523
return builder.BuildFromSingleStandardModule(inputCode, out component);
514524

515525
}

0 commit comments

Comments
 (0)