Skip to content

Commit 95e5b31

Browse files
committed
Add support for line continuations in PassParameterByValueQuickFix
1 parent ba8d440 commit 95e5b31

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

RetailCoder.VBE/Inspections/PassParameterByValueQuickFix.cs

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Linq;
23
using Antlr4.Runtime;
34
using Rubberduck.Common;
@@ -73,15 +74,42 @@ private void FixMethods()
7374

7475
private void FixMethod(VBAParser.ArgContext context, QualifiedSelection qualifiedSelection)
7576
{
76-
var selectionLength = context.BYREF() == null ? 0 : 6;
77-
var replacementStart = context.Start.Column + (context.OPTIONAL() == null ? 0 : 9);
77+
var parameter = context.GetText();
78+
var argList = context.parent.GetText();
7879

7980
var module = qualifiedSelection.QualifiedName.Component.CodeModule;
8081
{
81-
var lines = module.GetLines(context.Start.Line, 1);
82+
string result;
83+
if (context.BYREF() != null)
84+
{
85+
result = parameter.Replace(Tokens.ByRef, Tokens.ByVal);
86+
}
87+
else if (context.OPTIONAL() != null)
88+
{
89+
result = parameter.Replace(Tokens.Optional, Tokens.Optional + ' ' + Tokens.ByVal);
90+
}
91+
else
92+
{
93+
result = Tokens.ByVal + ' ' + parameter;
94+
}
8295

83-
var result = lines.Remove(replacementStart, selectionLength).Insert(replacementStart, Tokens.ByVal + ' ');
84-
module.ReplaceLine(context.Start.Line, result);
96+
var startLine = 0;
97+
var stopLine = 0;
98+
try
99+
{
100+
dynamic proc = context.parent.parent;
101+
startLine = proc.GetType().GetProperty("Start").GetValue(proc).Line;
102+
stopLine = proc.GetType().GetProperty("Stop").GetValue(proc).Line;
103+
}
104+
catch { return; }
105+
106+
var code = module.GetLines(startLine, stopLine - startLine + 1);
107+
result = code.Replace(argList, argList.Replace(parameter, result));
108+
109+
foreach (var line in result.Split(new[] { "\r\n" }, StringSplitOptions.None))
110+
{
111+
module.ReplaceLine(startLine++, line);
112+
}
85113
}
86114
}
87115
}

RubberduckTests/Inspections/ParameterCanBeByValInspectionTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1026,7 +1026,6 @@ Debug.Print foo
10261026
[TestCategory("Inspections")]
10271027
public void ParameterCanBeByVal_QuickFixWithOptional_LineContinuationsWorks()
10281028
{
1029-
Assert.Inconclusive("Pending more comprehensive fix.");
10301029
const string inputCode =
10311030
@"Sub foo(Optional _
10321031
ByRef _

0 commit comments

Comments
 (0)