Skip to content

Commit 952f769

Browse files
committed
2 parents 5ffce69 + 3207c6b commit 952f769

File tree

11 files changed

+135
-130
lines changed

11 files changed

+135
-130
lines changed

RetailCoder.VBE/UI/Settings/IndenterSettings.xaml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -172,14 +172,6 @@
172172
NumValue="{Binding IndentSpaces, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
173173
MinNumber="0"/>
174174
</StackPanel>
175-
<Label Content="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=IndenterSettings_EnableOptionsLabel}"
176-
FontWeight="SemiBold" />
177-
<CheckBox IsChecked="{Binding EnableUndo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
178-
Margin="5,0,0,5"
179-
HorizontalAlignment="Left">
180-
<AccessText Text="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=IndenterSettings_EnableUndo}"
181-
TextWrapping="WrapWithOverflow" />
182-
</CheckBox>
183175
</StackPanel>
184176
</Grid>
185177
</StackPanel>

RetailCoder.VBE/UI/Settings/IndenterSettingsViewModel.cs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ public IndenterSettingsViewModel(Configuration config)
1313
_alignContinuations = config.UserSettings.IndenterSettings.AlignContinuations;
1414
_alignDimColumn = config.UserSettings.IndenterSettings.AlignDimColumn;
1515
_alignDims = config.UserSettings.IndenterSettings.AlignDims;
16-
_enableUndo = config.UserSettings.IndenterSettings.EnableUndo;
1716
_endOfLineCommentColumnSpaceAlignment = config.UserSettings.IndenterSettings.EndOfLineCommentColumnSpaceAlignment;
1817
_endOfLineCommentStyle = config.UserSettings.IndenterSettings.EndOfLineCommentStyle;
1918
_forceCompilerDirectivesInColumn1 = config.UserSettings.IndenterSettings.ForceCompilerDirectivesInColumn1;
@@ -112,20 +111,6 @@ public bool AlignDims
112111
}
113112
}
114113

115-
private bool _enableUndo;
116-
public bool EnableUndo
117-
{
118-
get { return _enableUndo; }
119-
set
120-
{
121-
if (_enableUndo != value)
122-
{
123-
_enableUndo = value;
124-
OnPropertyChanged();
125-
}
126-
}
127-
}
128-
129114
private int _endOfLineCommentColumnSpaceAlignment;
130115
public int EndOfLineCommentColumnSpaceAlignment
131116
{
@@ -299,7 +284,6 @@ private IIndenterSettings GetCurrentSettings()
299284
AlignContinuations = AlignContinuations,
300285
AlignDimColumn = AlignDimColumn,
301286
AlignDims = AlignDims,
302-
EnableUndo = EnableUndo,
303287
EndOfLineCommentColumnSpaceAlignment = EndOfLineCommentColumnSpaceAlignment,
304288
EndOfLineCommentStyle = EndOfLineCommentStyle,
305289
ForceCompilerDirectivesInColumn1 = ForceCompilerDirectivesInColumn1,
@@ -323,7 +307,6 @@ public void UpdateConfig(Configuration config)
323307
config.UserSettings.IndenterSettings.AlignContinuations = AlignContinuations;
324308
config.UserSettings.IndenterSettings.AlignDimColumn = AlignDimColumn;
325309
config.UserSettings.IndenterSettings.AlignDims = AlignDims;
326-
config.UserSettings.IndenterSettings.EnableUndo = EnableUndo;
327310
config.UserSettings.IndenterSettings.EndOfLineCommentColumnSpaceAlignment = EndOfLineCommentColumnSpaceAlignment;
328311
config.UserSettings.IndenterSettings.EndOfLineCommentStyle = EndOfLineCommentStyle;
329312
config.UserSettings.IndenterSettings.ForceCompilerDirectivesInColumn1 = ForceCompilerDirectivesInColumn1;
@@ -344,7 +327,6 @@ public void SetToDefaults(Configuration config)
344327
AlignContinuations = config.UserSettings.IndenterSettings.AlignContinuations;
345328
AlignDimColumn = config.UserSettings.IndenterSettings.AlignDimColumn;
346329
AlignDims = config.UserSettings.IndenterSettings.AlignDims;
347-
EnableUndo = config.UserSettings.IndenterSettings.EnableUndo;
348330
EndOfLineCommentColumnSpaceAlignment = config.UserSettings.IndenterSettings.EndOfLineCommentColumnSpaceAlignment;
349331
EndOfLineCommentStyle = config.UserSettings.IndenterSettings.EndOfLineCommentStyle;
350332
ForceCompilerDirectivesInColumn1 = config.UserSettings.IndenterSettings.ForceCompilerDirectivesInColumn1;

Rubberduck.SmartIndenter/AbsoluteCodeLine.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ internal class AbsoluteCodeLine
1414
private const char BracketPlaceholder = '\x2';
1515
private static readonly Regex StringReplaceRegex = new Regex(StringPlaceholder.ToString(CultureInfo.InvariantCulture));
1616
private static readonly Regex BracketReplaceRegex = new Regex(BracketPlaceholder.ToString(CultureInfo.InvariantCulture));
17-
private static readonly Regex LineNumberRegex = new Regex(@"^(?<number>\d+)\s+(?<code>.*)", RegexOptions.ExplicitCapture);
17+
private static readonly Regex LineNumberRegex = new Regex(@"^(?<number>(-?\d+)|(&H[0-9A-F]{1,8}))\s+(?<code>.*)", RegexOptions.ExplicitCapture);
1818
private static readonly Regex EndOfLineCommentRegex = new Regex(@"^(?!(Rem\s)|('))(?<code>[^']*)(\s(?<comment>'.*))$", RegexOptions.ExplicitCapture);
1919
private static readonly Regex ProcedureStartRegex = new Regex(@"^(Public\s|Private\s|Friend\s)?(Static\s)?(Sub|Function|Property\s(Let|Get|Set))\s");
2020
private static readonly Regex ProcedureStartIgnoreRegex = new Regex(@"^[LR]?Set\s|^Let\s|^(Public|Private)\sDeclare\s(Function|Sub)");
@@ -29,7 +29,7 @@ internal class AbsoluteCodeLine
2929
private static readonly Regex SingleLineElseIfRegex = new Regex(@"^ElseIf\s.*\sThen\s.*");
3030

3131
private readonly IIndenterSettings _settings;
32-
private uint _lineNumber;
32+
private int _lineNumber;
3333
private bool _numbered;
3434
private string _code;
3535
private readonly bool _stupidLineEnding;
@@ -129,9 +129,14 @@ private void ExtractLineNumber()
129129
var match = LineNumberRegex.Match(_code);
130130
if (match.Success)
131131
{
132-
_numbered = true;
133-
_lineNumber = Convert.ToUInt32(match.Groups["number"].Value);
134132
_code = match.Groups["code"].Value;
133+
_numbered = true;
134+
var number = match.Groups["number"].Value;
135+
if (!int.TryParse(number, out _lineNumber))
136+
{
137+
int.TryParse(number.Replace("&H", string.Empty), NumberStyles.HexNumber,
138+
CultureInfo.InvariantCulture, out _lineNumber);
139+
}
135140
}
136141
}
137142
_code = _code.Trim();

Rubberduck.SmartIndenter/IIndenterSettings.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ public interface IIndenterSettings
1515
bool IndentCompilerDirectives { get; set; }
1616
bool AlignDims { get; set; }
1717
int AlignDimColumn { get; set; }
18-
bool EnableUndo { get; set; }
1918
EndOfLineCommentStyle EndOfLineCommentStyle { get; set; }
2019
int EndOfLineCommentColumnSpaceAlignment { get; set; }
2120
int IndentSpaces { get; set; }

Rubberduck.SmartIndenter/Indenter.cs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Linq;
4+
using System.Net.Configuration;
45
using Rubberduck.VBEditor;
56
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
67
using Rubberduck.VBEditor.SafeComWrappers.VBA;
@@ -71,13 +72,8 @@ public void Indent(IVBComponent component)
7172
var codeLines = module.GetLines(1, lineCount).Replace("\r", string.Empty).Split('\n');
7273
var indented = Indent(codeLines, component.Name).ToArray();
7374

74-
for (var i = 0; i < lineCount; i++)
75-
{
76-
if (module.GetLines(i + 1, 1) != indented[i])
77-
{
78-
component.CodeModule.ReplaceLine(i + 1, indented[i]);
79-
}
80-
}
75+
module.DeleteLines(1, lineCount);
76+
module.InsertLines(1, string.Join("\r\n", indented));
8177
}
8278

8379
public void Indent(IVBComponent component, string procedureName, Selection selection)
@@ -93,13 +89,8 @@ public void Indent(IVBComponent component, string procedureName, Selection selec
9389

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

96-
for (var i = 0; i < selection.EndLine - selection.StartLine; i++)
97-
{
98-
if (module.GetLines(selection.StartLine + i, 1) != indented[i])
99-
{
100-
component.CodeModule.ReplaceLine(selection.StartLine + i, indented[i]);
101-
}
102-
}
92+
module.DeleteLines(selection.StartLine, selection.LineCount);
93+
module.InsertLines(selection.StartLine, string.Join("\r\n", indented));
10394
}
10495

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

Rubberduck.SmartIndenter/IndenterSettings.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ public class IndenterSettings : IIndenterSettings
2020
public virtual bool IndentCompilerDirectives { get; set; }
2121
public virtual bool AlignDims { get; set; }
2222
public virtual int AlignDimColumn { get; set; }
23-
public virtual bool EnableUndo { get; set; }
2423
public virtual EndOfLineCommentStyle EndOfLineCommentStyle { get; set; }
2524
public virtual int EndOfLineCommentColumnSpaceAlignment { get; set; }
2625
public virtual int IndentSpaces { get; set; }
@@ -48,7 +47,6 @@ public IndenterSettings()
4847
IndentCompilerDirectives = true;
4948
AlignDims = false;
5049
AlignDimColumn = 15;
51-
EnableUndo = true;
5250
EndOfLineCommentStyle = EndOfLineCommentStyle.AlignInColumn;
5351
EndOfLineCommentColumnSpaceAlignment = 50;
5452
IndentSpaces = tabWidth;

RubberduckTests/CodeExplorer/CodeExplorerTests.cs

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ Dim d As Boolean
570570
var state = new RubberduckParserState(new Mock<ISinks>().Object);
571571
var commands = new List<CommandBase>
572572
{
573-
new IndentCommand(state, new Indenter(vbe.Object, GetDefaultIndenterSettings), null)
573+
new IndentCommand(state, new Indenter(vbe.Object,() => Settings.IndenterSettingsTests.GetMockIndenterSettings()), null)
574574
};
575575

576576
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -605,7 +605,7 @@ Dim d As Boolean
605605
var state = new RubberduckParserState(new Mock<ISinks>().Object);
606606
var commands = new List<CommandBase>
607607
{
608-
new IndentCommand(state, new Indenter(vbe.Object, GetDefaultIndenterSettings), null)
608+
new IndentCommand(state, new Indenter(vbe.Object, () => Settings.IndenterSettingsTests.GetMockIndenterSettings()), null)
609609
};
610610

611611
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -650,7 +650,7 @@ Dim d As Boolean
650650
var state = new RubberduckParserState(new Mock<ISinks>().Object);
651651
var commands = new List<CommandBase>
652652
{
653-
new IndentCommand(state, new Indenter(vbe.Object, GetDefaultIndenterSettings), null)
653+
new IndentCommand(state, new Indenter(vbe.Object, () => Settings.IndenterSettingsTests.GetMockIndenterSettings()), null)
654654
};
655655

656656
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -705,7 +705,7 @@ Dim d As Boolean
705705
var state = new RubberduckParserState(new Mock<ISinks>().Object);
706706
var commands = new List<CommandBase>
707707
{
708-
new IndentCommand(state, new Indenter(vbe.Object, GetDefaultIndenterSettings), null)
708+
new IndentCommand(state, new Indenter(vbe.Object, () => Settings.IndenterSettingsTests.GetMockIndenterSettings()), null)
709709
};
710710

711711
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -743,7 +743,7 @@ Dim d As Boolean
743743
var state = new RubberduckParserState(new Mock<ISinks>().Object);
744744
var commands = new List<CommandBase>
745745
{
746-
new IndentCommand(state, new Indenter(vbe.Object, GetDefaultIndenterSettings), null)
746+
new IndentCommand(state, new Indenter(vbe.Object, () => Settings.IndenterSettingsTests.GetMockIndenterSettings()), null)
747747
};
748748

749749
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -793,7 +793,7 @@ Dim d As Boolean
793793
var state = new RubberduckParserState(new Mock<ISinks>().Object);
794794
var commands = new List<CommandBase>
795795
{
796-
new IndentCommand(state, new Indenter(vbe.Object, GetDefaultIndenterSettings), null)
796+
new IndentCommand(state, new Indenter(vbe.Object, () => Settings.IndenterSettingsTests.GetMockIndenterSettings()), null)
797797
};
798798

799799
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -853,7 +853,7 @@ Dim d As Boolean
853853
var state = new RubberduckParserState(new Mock<ISinks>().Object);
854854
var commands = new List<CommandBase>
855855
{
856-
new IndentCommand(state, new Indenter(vbe.Object, GetDefaultIndenterSettings), null)
856+
new IndentCommand(state, new Indenter(vbe.Object, () => Settings.IndenterSettingsTests.GetMockIndenterSettings()), null)
857857
};
858858

859859
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -892,7 +892,7 @@ Dim d As Boolean
892892
var state = new RubberduckParserState(new Mock<ISinks>().Object);
893893
var commands = new List<CommandBase>
894894
{
895-
new IndentCommand(state, new Indenter(vbe.Object, GetDefaultIndenterSettings), null)
895+
new IndentCommand(state, new Indenter(vbe.Object, () => Settings.IndenterSettingsTests.GetMockIndenterSettings()), null)
896896
};
897897

898898
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -1476,30 +1476,46 @@ private Configuration GetDelimiterConfig()
14761476
return new Configuration(userSettings);
14771477
}
14781478

1479-
private IIndenterSettings GetDefaultIndenterSettings()
1480-
{
1481-
var indenterSettings = new IndenterSettings
1482-
{
1483-
IndentEntireProcedureBody = true,
1484-
IndentFirstCommentBlock = true,
1485-
IndentFirstDeclarationBlock = true,
1486-
AlignCommentsWithCode = true,
1487-
AlignContinuations = true,
1488-
IgnoreOperatorsInContinuations = true,
1489-
IndentCase = false,
1490-
ForceDebugStatementsInColumn1 = false,
1491-
ForceCompilerDirectivesInColumn1 = false,
1492-
IndentCompilerDirectives = true,
1493-
AlignDims = false,
1494-
AlignDimColumn = 15,
1495-
EnableUndo = true,
1496-
EndOfLineCommentStyle = EndOfLineCommentStyle.AlignInColumn,
1497-
EndOfLineCommentColumnSpaceAlignment = 50,
1498-
IndentSpaces = 4
1499-
};
1500-
1501-
return indenterSettings;
1502-
}
1479+
//private IIndenterSettings Settings.IndenterSettingsTests.GetMockIndenterSettings()()
1480+
//{
1481+
// var indenterSettings = new IndenterSettings
1482+
// {
1483+
// IndentEntireProcedureBody = true,
1484+
// IndentFirstCommentBlock = true,
1485+
// IndentFirstDeclarationBlock = true,
1486+
// AlignCommentsWithCode = true,
1487+
// AlignContinuations = true,
1488+
// IgnoreOperatorsInContinuations = true,
1489+
// IndentCase = false,
1490+
// ForceDebugStatementsInColumn1 = false,
1491+
// ForceCompilerDirectivesInColumn1 = false,
1492+
// IndentCompilerDirectives = true,
1493+
// AlignDims = false,
1494+
// AlignDimColumn = 15,
1495+
// EndOfLineCommentStyle = EndOfLineCommentStyle.AlignInColumn,
1496+
// EndOfLineCommentColumnSpaceAlignment = 50,
1497+
// IndentSpaces = 4
1498+
// };
1499+
1500+
// var settings = new Mock<IndenterSettings>();
1501+
// settings.Setup(s => s.IndentEntireProcedureBody).Returns(true);
1502+
// settings.Setup(s => s.IndentFirstCommentBlock).Returns(true);
1503+
// settings.Setup(s => s.IndentFirstDeclarationBlock).Returns(true);
1504+
// settings.Setup(s => s.AlignCommentsWithCode).Returns(true);
1505+
// settings.Setup(s => s.AlignContinuations).Returns(true);
1506+
// settings.Setup(s => s.IgnoreOperatorsInContinuations).Returns(true);
1507+
// settings.Setup(s => s.IndentCase).Returns(false);
1508+
// settings.Setup(s => s.ForceDebugStatementsInColumn1).Returns(false);
1509+
// settings.Setup(s => s.ForceCompilerDirectivesInColumn1).Returns(false);
1510+
// settings.Setup(s => s.IndentCompilerDirectives).Returns(true);
1511+
// settings.Setup(s => s.AlignDims).Returns(false);
1512+
// settings.Setup(s => s.AlignDimColumn).Returns(15);
1513+
// settings.Setup(s => s.EndOfLineCommentStyle).Returns(EndOfLineCommentStyle.AlignInColumn);
1514+
// settings.Setup(s => s.EndOfLineCommentColumnSpaceAlignment).Returns(50);
1515+
// settings.Setup(s => s.IndentSpaces).Returns(4);
1516+
1517+
// return indenterSettings;
1518+
//}
15031519

15041520
private ConfigurationLoader GetDelimiterConfigLoader()
15051521
{

RubberduckTests/Commands/IndentCommandTests.cs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -224,25 +224,24 @@ public void IndentModule_CanExecute()
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.EnableUndo).Returns(true);
241-
settings.Setup(s => s.EndOfLineCommentStyle).Returns(EndOfLineCommentStyle.AlignInColumn);
242-
settings.Setup(s => s.EndOfLineCommentColumnSpaceAlignment).Returns(50);
243-
settings.Setup(s => s.IndentSpaces).Returns(4);
244-
245-
return new Indenter(vbe, () => new IndenterSettings());
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+
244+
return new Indenter(vbe, () => Settings.IndenterSettingsTests.GetMockIndenterSettings());
246245
}
247246
}
248247
}

0 commit comments

Comments
 (0)