Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public override void Fix()
var parameter = lines.Substring(adjustedStartColumn,
adjustedEndColumn - adjustedStartColumn)
.Replace("_", "")
.RemoveExtraSpaces();
.RemoveExtraSpacesLeavingIndentation();

var start = startLine.Remove(adjustedStartColumn);
var end = lines.Remove(0, adjustedEndColumn);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Antlr4.Runtime.Misc;
using Microsoft.Vbe.Interop;
using Rubberduck.Common;
using Rubberduck.Parsing;
using Rubberduck.Parsing.Grammar;
using Rubberduck.Parsing.Symbols;
using Rubberduck.Parsing.VBA;
Expand Down Expand Up @@ -55,13 +56,22 @@ public void Refactor(QualifiedSelection selection)
{
var target = _declarations.FindVariable(selection);

if (target == null)
{
_messageBox.Show(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceParameter_Caption,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}

PromoteVariable(target);
}

public void Refactor(Declaration target)
{
if (target.DeclarationType != DeclarationType.Variable)
if (target == null || target.DeclarationType != DeclarationType.Variable)
{
_messageBox.Show(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceParameter_Caption,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
throw new ArgumentException("Invalid declaration type");
}

Expand All @@ -75,10 +85,10 @@ private void PromoteVariable(Declaration target)
return;
}

if (
!new[] {DeclarationType.Class, DeclarationType.Module}.Contains(
target.ParentDeclaration.DeclarationType))
if (new[] { DeclarationType.Class, DeclarationType.Module }.Contains(target.ParentDeclaration.DeclarationType))
{
_messageBox.Show(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceParameter_Caption,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}

Expand Down Expand Up @@ -173,7 +183,8 @@ private void AddParameter(Declaration targetMethod, Declaration targetVariable,
GetParameterDefinition(targetVariable) + ", " + argList.Last().GetText());
}

module.ReplaceLine(paramList.Start.Line, newContent);
module.ReplaceLine(paramList.Start.Line, newContent.Replace(" _" + Environment.NewLine, string.Empty));
module.DeleteLines(paramList.Start.Line + 1, paramList.GetSelection().LineCount - 1);
}

private void UpdateProperties(Declaration target)
Expand Down Expand Up @@ -241,7 +252,14 @@ private void RemoveVariable(Declaration target)
}

_editor.DeleteLines(selection);
_editor.InsertLines(selection.StartLine, newLines);
var newLinesWithoutEmptyLines = newLines
.Split(new[] {" _" + Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
.Where(l => l.Trim() != string.Empty).ToList();

if (newLinesWithoutEmptyLines.Any())
{
_editor.InsertLines(selection.StartLine, string.Join(string.Empty, newLinesWithoutEmptyLines).RemoveExtraSpacesLeavingIndentation());
}
}

private string GetOldSignature(Declaration target)
Expand Down
2 changes: 1 addition & 1 deletion RetailCoder.VBE/Refactorings/RemoveParameters/Parameter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class Parameter
public Parameter(Declaration declaration, int index, bool isRemoved = false)
{
Declaration = declaration;
Name = declaration.Context.GetText().RemoveExtraSpaces();
Name = declaration.Context.GetText().RemoveExtraSpacesLeavingIndentation();
Index = index;
IsRemoved = isRemoved;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ private void RemoveCallParameter(VBAParser.ArgsCallContext paramList, CodeModule
var paramNames = paramList.argCall().Select(arg => arg.GetText()).ToList();
var lineCount = paramList.Stop.Line - paramList.Start.Line + 1; // adjust for total line count

var newContent = module.Lines[paramList.Start.Line, lineCount].Replace(" _" + Environment.NewLine, string.Empty).RemoveExtraSpaces();
var newContent = module.Lines[paramList.Start.Line, lineCount].Replace(" _" + Environment.NewLine, string.Empty).RemoveExtraSpacesLeavingIndentation();
var currentStringIndex = 0;

foreach (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ private void LoadParameters()
var args = argList.arg();

var index = 0;
Parameters = args.Select(arg => new Parameter(arg.GetText().RemoveExtraSpaces(), index++)).ToList();
Parameters = args.Select(arg => new Parameter(arg.GetText().RemoveExtraSpacesLeavingIndentation(), index++)).ToList();

if (TargetDeclaration.DeclarationType == DeclarationType.PropertyLet ||
TargetDeclaration.DeclarationType == DeclarationType.PropertySet)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ private void RewriteCall(VBAParser.ArgsCallContext paramList, CodeModule module)
var paramNames = paramList.argCall().Select(arg => arg.GetText()).ToList();
var lineCount = paramList.Stop.Line - paramList.Start.Line + 1; // adjust for total line count

var newContent = module.Lines[paramList.Start.Line, lineCount].Replace(" _" + Environment.NewLine, string.Empty).RemoveExtraSpaces();
var newContent = module.Lines[paramList.Start.Line, lineCount].Replace(" _" + Environment.NewLine, string.Empty).RemoveExtraSpacesLeavingIndentation();

var parameterIndex = 0;
var currentStringIndex = 0;
Expand Down
24 changes: 19 additions & 5 deletions Rubberduck.Parsing/VBA/StringExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using Rubberduck.Parsing.Grammar;
Expand Down Expand Up @@ -34,17 +35,30 @@ public static string StripStringLiterals(this string line)
return Regex.Replace(line, "\"[^\"]*\"", match => new string(' ', match.Length));
}

public static string RemoveExtraSpaces(this string line)
public static string RemoveExtraSpacesLeavingIndentation(this string line)
{
var newString = new StringBuilder();
var lastWasWhiteSpace = false;

foreach (var c in line)
if (line.All(char.IsWhiteSpace))
{
if (char.IsWhiteSpace(c) && lastWasWhiteSpace) { continue; }
return line;
}

var firstNonwhitespaceIndex = line.IndexOf(line.FirstOrDefault(c => !char.IsWhiteSpace(c)));

for (var i = 0; i < line.Length; i++)
{
if (i < firstNonwhitespaceIndex)
{
newString.Append(line[i]);
continue;
}

if (char.IsWhiteSpace(line[i]) && lastWasWhiteSpace) { continue; }

newString.Append(c);
lastWasWhiteSpace = char.IsWhiteSpace(c);
newString.Append(line[i]);
lastWasWhiteSpace = char.IsWhiteSpace(line[i]);
}

return newString.ToString().Replace('\r', ' ');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@ public void AssignedByValParameter_ReturnsResult_Sub()
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspection = new AssignedByValParameterInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(1, inspectionResults.Count());
Expand All @@ -65,14 +65,14 @@ public void AssignedByValParameter_ReturnsResult_Function()
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspection = new AssignedByValParameterInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(1, inspectionResults.Count());
Expand All @@ -93,14 +93,14 @@ public void AssignedByValParameter_ReturnsResult_MultipleParams()
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspection = new AssignedByValParameterInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(2, inspectionResults.Count());
Expand All @@ -119,14 +119,14 @@ public void AssignedByValParameter_DoesNotReturnResult()
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspection = new AssignedByValParameterInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(0, inspectionResults.Count());
Expand All @@ -149,14 +149,14 @@ Dim var1 As Integer
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspection = new AssignedByValParameterInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(1, inspectionResults.Count());
Expand All @@ -183,14 +183,14 @@ public void AssignedByValParameter_QuickFixWorks()
var module = project.VBComponents.Item(0).CodeModule;
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new AssignedByValParameterInspection(parseResult.State);
var inspection = new AssignedByValParameterInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

inspectionResults.First().QuickFixes.First().Fix();
Expand Down
50 changes: 25 additions & 25 deletions RubberduckTests/Inspections/ConstantNotUsedInspectionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@ public void ConstantNotUsed_ReturnsResult()
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new ConstantNotUsedInspection(parseResult.State);
var inspection = new ConstantNotUsedInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(1, inspectionResults.Count());
Expand All @@ -66,14 +66,14 @@ public void ConstantNotUsed_ReturnsResult_MultipleConsts()
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new ConstantNotUsedInspection(parseResult.State);
var inspection = new ConstantNotUsedInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(2, inspectionResults.Count());
Expand All @@ -97,14 +97,14 @@ Public Sub Goo(ByVal arg1 As Integer)
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new ConstantNotUsedInspection(parseResult.State);
var inspection = new ConstantNotUsedInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(0, inspectionResults.Count());
Expand All @@ -130,14 +130,14 @@ Public Sub Goo(ByVal arg1 As Integer)
var vbe = builder.BuildFromSingleStandardModule(inputCode, out component);
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new ConstantNotUsedInspection(parseResult.State);
var inspection = new ConstantNotUsedInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

Assert.AreEqual(1, inspectionResults.Count());
Expand All @@ -163,14 +163,14 @@ public void ConstantNotUsed_QuickFixWorks()
var module = project.VBComponents.Item(0).CodeModule;
var mockHost = new Mock<IHostApplication>();
mockHost.SetupAllProperties();
var parseResult = new RubberduckParser(vbe.Object, new RubberduckParserState());
var parser = new RubberduckParser(vbe.Object, new RubberduckParserState());

parseResult.State.StateChanged += State_StateChanged;
parseResult.State.OnParseRequested();
parser.State.StateChanged += State_StateChanged;
parser.State.OnParseRequested();
_semaphore.Wait();
parseResult.State.StateChanged -= State_StateChanged;
parser.State.StateChanged -= State_StateChanged;

var inspection = new ConstantNotUsedInspection(parseResult.State);
var inspection = new ConstantNotUsedInspection(parser.State);
var inspectionResults = inspection.GetInspectionResults();

inspectionResults.First().QuickFixes.First().Fix();
Expand Down
Loading