Skip to content

Commit a154ce8

Browse files
authored
Merge pull request #3973 from tommy9/MoveCloserIndentFix
Move closer refactoring indent fix
2 parents 1b1fe5c + 22181b0 commit a154ce8

File tree

3 files changed

+68
-18
lines changed

3 files changed

+68
-18
lines changed

Rubberduck.Core/Refactorings/MoveCloserToUsage/MoveCloserToUsageRefactoring.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ private void MoveCloserToUsage()
125125
{
126126
rewriter.Rewrite();
127127
}
128+
Reparse();
128129
}
129130

130131
private void UpdateOtherModules()
@@ -168,9 +169,19 @@ private void InsertNewDeclaration()
168169
}
169170

170171
var insertionIndex = (expression as ParserRuleContext).Start.TokenIndex;
172+
int indentLength;
173+
using (var pane = _vbe.ActiveCodePane)
174+
{
175+
using (var codeModule = pane.CodeModule)
176+
{
177+
var firstReferenceLine = codeModule.GetLines((expression as ParserRuleContext).Start.Line, 1);
178+
indentLength = firstReferenceLine.Length - firstReferenceLine.TrimStart().Length;
179+
}
180+
}
181+
var padding = new string(' ', indentLength);
171182

172183
var rewriter = _state.GetRewriter(firstReference.QualifiedModuleName);
173-
rewriter.InsertBefore(insertionIndex, newVariable);
184+
rewriter.InsertBefore(insertionIndex, newVariable + padding);
174185

175186
_rewriters.Add(rewriter);
176187
}
@@ -205,5 +216,10 @@ private void UpdateCallsToOtherModule(IEnumerable<IdentifierReference> reference
205216
_rewriters.Add(rewriter);
206217
}
207218
}
219+
220+
private void Reparse()
221+
{
222+
_state.OnParseRequested(this);
223+
}
208224
}
209225
}

RubberduckTests/QuickFixes/MoveFieldCloserToUsageQuickFixTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Public Sub Foo()
2525
const string expectedCode =
2626
@"Public Sub Foo()
2727
Dim bar As String
28-
bar = ""test""
28+
bar = ""test""
2929
End Sub";
3030

3131
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component);

RubberduckTests/Refactoring/MoveCloserToUsageTests.cs

Lines changed: 50 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,41 @@ Private Sub Foo()
3232
const string expectedCode =
3333
@"Private Sub Foo()
3434
Dim bar As Boolean
35-
bar = True
35+
bar = True
36+
End Sub";
37+
38+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
39+
using (var state = MockParser.CreateAndParse(vbe.Object))
40+
{
41+
42+
var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection);
43+
44+
var refactoring = new MoveCloserToUsageRefactoring(vbe.Object, state, null);
45+
refactoring.Refactor(qualifiedSelection);
46+
47+
var rewriter = state.GetRewriter(component);
48+
Assert.AreEqual(expectedCode, rewriter.GetText());
49+
}
50+
}
51+
52+
[Test]
53+
[Category("Refactorings")]
54+
[Category("Move Closer")]
55+
public void MoveCloserToUsageRefactoring_LineNumbers()
56+
{
57+
//Input
58+
const string inputCode =
59+
@"Private bar As Boolean
60+
Private Sub Foo()
61+
100 bar = True
62+
End Sub";
63+
var selection = new Selection(1, 1);
64+
65+
//Expectation
66+
const string expectedCode =
67+
@"Private Sub Foo()
68+
Dim bar As Boolean
69+
100 bar = True
3670
End Sub";
3771

3872
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -69,7 +103,7 @@ Private Sub Foo()
69103
const string expectedCode =
70104
@"Private Sub Foo()
71105
Dim bar As Boolean
72-
bar = True
106+
bar = True
73107
End Sub";
74108

75109
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -155,7 +189,7 @@ Dim bat As Integer
155189
@"Private Sub Foo()
156190
Dim bat As Integer
157191
Dim bar As Boolean
158-
bar = True
192+
bar = True
159193
End Sub";
160194

161195
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -194,7 +228,7 @@ Dim bat As Integer
194228
@"Private Sub Foo()
195229
Dim bat As Integer
196230
Dim bar As Boolean
197-
bar = True
231+
bar = True
198232
End Sub";
199233

200234
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -234,7 +268,7 @@ Private bay As Date
234268
235269
Private Sub Foo()
236270
Dim bat As Boolean
237-
bat = True
271+
bat = True
238272
End Sub";
239273

240274
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -274,7 +308,7 @@ bay As Date
274308
275309
Private Sub Foo()
276310
Dim bar As Integer
277-
bar = 3
311+
bar = 3
278312
End Sub";
279313

280314
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -314,7 +348,7 @@ bay As Date
314348
315349
Private Sub Foo()
316350
Dim bat As Boolean
317-
bat = True
351+
bat = True
318352
End Sub";
319353

320354
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -354,7 +388,7 @@ bat As Boolean
354388
355389
Private Sub Foo()
356390
Dim bay As Date
357-
bay = #1/13/2004#
391+
bay = #1/13/2004#
358392
End Sub";
359393

360394
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -396,7 +430,7 @@ bay As Date
396430
397431
bat = True
398432
Dim bar As Integer
399-
bar = 3
433+
bar = 3
400434
End Sub";
401435

402436
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -438,7 +472,7 @@ bay As Date
438472
439473
bar = 1
440474
Dim bat As Boolean
441-
bat = True
475+
bat = True
442476
End Sub";
443477

444478
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -480,7 +514,7 @@ bat As Boolean
480514
481515
bar = 4
482516
Dim bay As Date
483-
bay = #1/13/2004#
517+
bay = #1/13/2004#
484518
End Sub";
485519

486520
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out var component, selection);
@@ -583,7 +617,7 @@ Private Sub Foo(ByRef bat As Boolean)
583617
const string expectedCode =
584618
@"Private Sub Foo(ByRef bat As Boolean)
585619
Dim bar As Boolean
586-
bat = bar
620+
bat = bar
587621
End Sub";
588622
var selection = new Selection(1, 1);
589623

@@ -618,7 +652,7 @@ Sub Baz(ByVal bat As Boolean)
618652
const string expectedCode =
619653
@"Private Sub Foo()
620654
Dim bar As Boolean
621-
Baz bar
655+
Baz bar
622656
End Sub
623657
Sub Baz(ByVal bat As Boolean)
624658
End Sub";
@@ -657,7 +691,7 @@ Sub Baz(ByVal bat As Boolean, ByVal bas As Boolean, ByVal bac As Boolean)
657691
const string expectedCode =
658692
@"Private Sub Foo()
659693
Dim bar As Boolean
660-
Baz True, _
694+
Baz True, _
661695
True, _
662696
bar
663697
End Sub
@@ -735,7 +769,7 @@ Debug.Print someParam
735769
@"
736770
Public Sub Test()
737771
Dim foo As Long
738-
SomeSub someParam:=foo
772+
SomeSub someParam:=foo
739773
End Sub
740774
741775
Public Sub SomeSub(ByVal someParam As Long)
@@ -906,7 +940,7 @@ Public Sub Test()
906940
Debug.Print ""Some statements between""
907941
Debug.Print ""Declaration and first usage!""
908942
Dim foo As Class1
909-
Set foo = new Class1
943+
Set foo = new Class1
910944
foo.Name = ""FooName""
911945
foo.OtherProperty = 1626
912946
End Sub";

0 commit comments

Comments
 (0)