Skip to content

Commit 56e65d5

Browse files
authored
Merge pull request #172 from rubberduck-vba/next
sync with main repo
2 parents 55eeed4 + 83245a7 commit 56e65d5

File tree

4 files changed

+23
-26
lines changed

4 files changed

+23
-26
lines changed

RetailCoder.VBE/UI/Command/IndentCurrentModuleCommand.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Runtime.InteropServices;
22
using NLog;
3+
using Rubberduck.Parsing.VBA;
34
using Rubberduck.Settings;
45
using Rubberduck.SmartIndenter;
56
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
@@ -11,11 +12,13 @@ public class IndentCurrentModuleCommand : CommandBase
1112
{
1213
private readonly IVBE _vbe;
1314
private readonly IIndenter _indenter;
15+
private readonly RubberduckParserState _state;
1416

15-
public IndentCurrentModuleCommand(IVBE vbe, IIndenter indenter) : base(LogManager.GetCurrentClassLogger())
17+
public IndentCurrentModuleCommand(IVBE vbe, IIndenter indenter, RubberduckParserState state) : base(LogManager.GetCurrentClassLogger())
1618
{
1719
_vbe = vbe;
1820
_indenter = indenter;
21+
_state = state;
1922
}
2023

2124
public override RubberduckHotkey Hotkey
@@ -31,6 +34,7 @@ protected override bool CanExecuteImpl(object parameter)
3134
protected override void ExecuteImpl(object parameter)
3235
{
3336
_indenter.IndentCurrentModule();
37+
_state.OnParseRequested(this, _vbe.ActiveCodePane.CodeModule.Parent);
3438
}
3539
}
3640
}

RetailCoder.VBE/UI/Command/IndentCurrentProcedureCommand.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Runtime.InteropServices;
22
using NLog;
3+
using Rubberduck.Parsing.VBA;
34
using Rubberduck.Settings;
45
using Rubberduck.SmartIndenter;
56
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
@@ -11,11 +12,14 @@ public class IndentCurrentProcedureCommand : CommandBase
1112
{
1213
private readonly IVBE _vbe;
1314
private readonly IIndenter _indenter;
15+
private readonly RubberduckParserState _state;
1416

15-
public IndentCurrentProcedureCommand(IVBE vbe, IIndenter indenter) : base(LogManager.GetCurrentClassLogger())
17+
public IndentCurrentProcedureCommand(IVBE vbe, IIndenter indenter, RubberduckParserState state)
18+
: base(LogManager.GetCurrentClassLogger())
1619
{
1720
_vbe = vbe;
1821
_indenter = indenter;
22+
_state = state;
1923
}
2024

2125
public override RubberduckHotkey Hotkey
@@ -31,6 +35,7 @@ protected override bool CanExecuteImpl(object parameter)
3135
protected override void ExecuteImpl(object parameter)
3236
{
3337
_indenter.IndentCurrentProcedure();
38+
_state.OnParseRequested(this, _vbe.ActiveCodePane.CodeModule.Parent);
3439
}
3540
}
3641
}

Rubberduck.SmartIndenter/Indenter.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.CodeDom.Compiler;
23
using System.Collections.Generic;
34
using System.Linq;
45
using System.Net.Configuration;
@@ -70,7 +71,7 @@ public void Indent(IVBComponent component)
7071
}
7172

7273
var codeLines = module.GetLines(1, lineCount).Replace("\r", string.Empty).Split('\n');
73-
var indented = Indent(codeLines, component.Name).ToArray();
74+
var indented = Indent(codeLines, component.Name);
7475

7576
module.DeleteLines(1, lineCount);
7677
module.InsertLines(1, string.Join("\r\n", indented));
@@ -87,10 +88,14 @@ public void Indent(IVBComponent component, string procedureName, Selection selec
8788

8889
var codeLines = module.GetLines(selection.StartLine, selection.LineCount).Replace("\r", string.Empty).Split('\n');
8990

90-
var indented = Indent(codeLines, procedureName).ToArray();
91+
var indented = Indent(codeLines, procedureName);
9192

92-
module.DeleteLines(selection.StartLine, selection.LineCount);
93-
module.InsertLines(selection.StartLine, string.Join("\r\n", indented));
93+
var start = selection.StartLine;
94+
var lines = selection.LineCount;
95+
96+
//Deletelines fails if the the last line of the procedure is the last line of the module.
97+
module.DeleteLines(start, start + lines < lineCount ? lines : lines - 1);
98+
module.InsertLines(start, string.Join("\r\n", indented));
9499
}
95100

96101
private IEnumerable<LogicalCodeLine> BuildLogicalCodeLines(IEnumerable<string> lines)

RubberduckTests/Commands/IndentCommandTests.cs

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ End Sub
170170
Assert.Inconclusive("Parser Error");
171171
}
172172

173-
var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object));
173+
var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object), parser.State);
174174
indentCommand.Execute(null);
175175

176176
var module1 = project.Object.VBComponents["Comp1"].CodeModule;
@@ -198,7 +198,7 @@ public void IndentModule_CanExecute_NullActiveCodePane()
198198
Assert.Inconclusive("Parser Error");
199199
}
200200

201-
var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object));
201+
var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object), parser.State);
202202
Assert.IsFalse(indentCommand.CanExecute(null));
203203
}
204204

@@ -218,29 +218,12 @@ public void IndentModule_CanExecute()
218218
Assert.Inconclusive("Parser Error");
219219
}
220220

221-
var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object));
221+
var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object), parser.State);
222222
Assert.IsTrue(indentCommand.CanExecute(null));
223223
}
224224

225225
private static IIndenter CreateIndenter(IVBE vbe)
226226
{
227-
//var settings = new Mock<IndenterSettings>();
228-
//settings.Setup(s => s.IndentEntireProcedureBody).Returns(true);
229-
//settings.Setup(s => s.IndentFirstCommentBlock).Returns(true);
230-
//settings.Setup(s => s.IndentFirstDeclarationBlock).Returns(true);
231-
//settings.Setup(s => s.AlignCommentsWithCode).Returns(true);
232-
//settings.Setup(s => s.AlignContinuations).Returns(true);
233-
//settings.Setup(s => s.IgnoreOperatorsInContinuations).Returns(true);
234-
//settings.Setup(s => s.IndentCase).Returns(false);
235-
//settings.Setup(s => s.ForceDebugStatementsInColumn1).Returns(false);
236-
//settings.Setup(s => s.ForceCompilerDirectivesInColumn1).Returns(false);
237-
//settings.Setup(s => s.IndentCompilerDirectives).Returns(true);
238-
//settings.Setup(s => s.AlignDims).Returns(false);
239-
//settings.Setup(s => s.AlignDimColumn).Returns(15);
240-
//settings.Setup(s => s.EndOfLineCommentStyle).Returns(EndOfLineCommentStyle.AlignInColumn);
241-
//settings.Setup(s => s.EndOfLineCommentColumnSpaceAlignment).Returns(50);
242-
//settings.Setup(s => s.IndentSpaces).Returns(4);
243-
244227
return new Indenter(vbe, () => Settings.IndenterSettingsTests.GetMockIndenterSettings());
245228
}
246229
}

0 commit comments

Comments
 (0)