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
6 changes: 5 additions & 1 deletion RetailCoder.VBE/UI/Command/IndentCurrentModuleCommand.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Runtime.InteropServices;
using NLog;
using Rubberduck.Parsing.VBA;
using Rubberduck.Settings;
using Rubberduck.SmartIndenter;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
Expand All @@ -11,11 +12,13 @@ public class IndentCurrentModuleCommand : CommandBase
{
private readonly IVBE _vbe;
private readonly IIndenter _indenter;
private readonly RubberduckParserState _state;

public IndentCurrentModuleCommand(IVBE vbe, IIndenter indenter) : base(LogManager.GetCurrentClassLogger())
public IndentCurrentModuleCommand(IVBE vbe, IIndenter indenter, RubberduckParserState state) : base(LogManager.GetCurrentClassLogger())
{
_vbe = vbe;
_indenter = indenter;
_state = state;
}

public override RubberduckHotkey Hotkey
Expand All @@ -31,6 +34,7 @@ protected override bool CanExecuteImpl(object parameter)
protected override void ExecuteImpl(object parameter)
{
_indenter.IndentCurrentModule();
_state.OnParseRequested(this, _vbe.ActiveCodePane.CodeModule.Parent);
}
}
}
7 changes: 6 additions & 1 deletion RetailCoder.VBE/UI/Command/IndentCurrentProcedureCommand.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Runtime.InteropServices;
using NLog;
using Rubberduck.Parsing.VBA;
using Rubberduck.Settings;
using Rubberduck.SmartIndenter;
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
Expand All @@ -11,11 +12,14 @@ public class IndentCurrentProcedureCommand : CommandBase
{
private readonly IVBE _vbe;
private readonly IIndenter _indenter;
private readonly RubberduckParserState _state;

public IndentCurrentProcedureCommand(IVBE vbe, IIndenter indenter) : base(LogManager.GetCurrentClassLogger())
public IndentCurrentProcedureCommand(IVBE vbe, IIndenter indenter, RubberduckParserState state)
: base(LogManager.GetCurrentClassLogger())
{
_vbe = vbe;
_indenter = indenter;
_state = state;
}

public override RubberduckHotkey Hotkey
Expand All @@ -31,6 +35,7 @@ protected override bool CanExecuteImpl(object parameter)
protected override void ExecuteImpl(object parameter)
{
_indenter.IndentCurrentProcedure();
_state.OnParseRequested(this, _vbe.ActiveCodePane.CodeModule.Parent);
}
}
}
13 changes: 9 additions & 4 deletions Rubberduck.SmartIndenter/Indenter.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Linq;
using System.Net.Configuration;
Expand Down Expand Up @@ -70,7 +71,7 @@ public void Indent(IVBComponent component)
}

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

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

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

var indented = Indent(codeLines, procedureName).ToArray();
var indented = Indent(codeLines, procedureName);

module.DeleteLines(selection.StartLine, selection.LineCount);
module.InsertLines(selection.StartLine, string.Join("\r\n", indented));
var start = selection.StartLine;
var lines = selection.LineCount;

//Deletelines fails if the the last line of the procedure is the last line of the module.
module.DeleteLines(start, start + lines < lineCount ? lines : lines - 1);
module.InsertLines(start, string.Join("\r\n", indented));
}

private IEnumerable<LogicalCodeLine> BuildLogicalCodeLines(IEnumerable<string> lines)
Expand Down
23 changes: 3 additions & 20 deletions RubberduckTests/Commands/IndentCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ End Sub
Assert.Inconclusive("Parser Error");
}

var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object));
var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object), parser.State);
indentCommand.Execute(null);

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

var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object));
var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object), parser.State);
Assert.IsFalse(indentCommand.CanExecute(null));
}

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

var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object));
var indentCommand = new IndentCurrentModuleCommand(vbe.Object, CreateIndenter(vbe.Object), parser.State);
Assert.IsTrue(indentCommand.CanExecute(null));
}

private static IIndenter CreateIndenter(IVBE vbe)
{
//var settings = new Mock<IndenterSettings>();
//settings.Setup(s => s.IndentEntireProcedureBody).Returns(true);
//settings.Setup(s => s.IndentFirstCommentBlock).Returns(true);
//settings.Setup(s => s.IndentFirstDeclarationBlock).Returns(true);
//settings.Setup(s => s.AlignCommentsWithCode).Returns(true);
//settings.Setup(s => s.AlignContinuations).Returns(true);
//settings.Setup(s => s.IgnoreOperatorsInContinuations).Returns(true);
//settings.Setup(s => s.IndentCase).Returns(false);
//settings.Setup(s => s.ForceDebugStatementsInColumn1).Returns(false);
//settings.Setup(s => s.ForceCompilerDirectivesInColumn1).Returns(false);
//settings.Setup(s => s.IndentCompilerDirectives).Returns(true);
//settings.Setup(s => s.AlignDims).Returns(false);
//settings.Setup(s => s.AlignDimColumn).Returns(15);
//settings.Setup(s => s.EndOfLineCommentStyle).Returns(EndOfLineCommentStyle.AlignInColumn);
//settings.Setup(s => s.EndOfLineCommentColumnSpaceAlignment).Returns(50);
//settings.Setup(s => s.IndentSpaces).Returns(4);

return new Indenter(vbe, () => Settings.IndenterSettingsTests.GetMockIndenterSettings());
}
}
Expand Down