Skip to content

Commit 9d51719

Browse files
committed
fixes #4460
1 parent 77574e4 commit 9d51719

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

Rubberduck.Core/AutoComplete/Service/SelfClosingPairCompletionService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ private CodeString HandleOpeningChar(SelfClosingPair pair, CodeString original)
8888
}
8989
else
9090
{
91-
newCode = original.CaretPosition.StartColumn == line.Length
91+
newCode = original.CaretPosition.StartColumn >= line.Length
9292
? line + autoCode
9393
: line.Insert(original.CaretPosition.StartColumn, autoCode);
9494
}

Rubberduck.VBEEditor/SourceCodeHandling/CodePaneSourceCodeHandler.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,17 @@ public CodeString Prettify(ICodeModule module, CodeString original)
9191
var originalCode = original.Code.Replace("\r", string.Empty).Split('\n');
9292
var originalPosition = original.CaretPosition.StartColumn;
9393
var originalNonWhitespaceCharacters = 0;
94+
var isAllWhitespace = true;
9495
for (var i = 0; i <= Math.Min(originalPosition - 1, originalCode[original.CaretPosition.StartLine].Length - 1); i++)
9596
{
9697
if (originalCode[original.CaretPosition.StartLine][i] != ' ')
9798
{
9899
originalNonWhitespaceCharacters++;
100+
isAllWhitespace = false;
99101
}
100102
}
101103

102-
var indent = originalCode[original.CaretPosition.StartLine].TakeWhile(c => c == ' ').Count();
104+
var indent = original.CaretLine.TakeWhile(c => c == ' ').Count();
103105

104106
module.DeleteLines(original.SnippetPosition.StartLine, original.SnippetPosition.LineCount);
105107
module.InsertLines(original.SnippetPosition.StartLine, string.Join("\r\n", originalCode));
@@ -126,9 +128,9 @@ public CodeString Prettify(ICodeModule module, CodeString original)
126128

127129
var prettifiedPosition = new Selection(
128130
original.SnippetPosition.ToZeroBased().StartLine + original.CaretPosition.StartLine,
129-
prettifiedCode[original.CaretPosition.StartLine].Trim().Length == 0
130-
? indent
131-
: Math.Min(prettifiedCode[original.CaretPosition.StartLine].Length, original.CaretPosition.StartColumn))
131+
prettifiedCode[original.CaretPosition.StartLine].Trim().Length == 0 || (isAllWhitespace && !string.IsNullOrEmpty(original.CaretLine.Substring(original.CaretPosition.StartColumn).Trim()))
132+
? Math.Min(indent, original.CaretPosition.StartColumn)
133+
: Math.Min(prettifiedCode[original.CaretPosition.StartLine].Length, prettifiedCaretCharIndex + 1))
132134
.ToOneBased();
133135

134136
SetSelection(module, prettifiedPosition);

RubberduckTests/AutoComplete/SelfClosingPairCompletionTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,18 @@ public void WhenCaretBetweenOpeningAndClosingChars_BackspaceRemovesBoth_Indented
342342
Assert.AreEqual(expected, result);
343343
}
344344

345+
[Test]
346+
public void GivenEmptyIndentedLine_OpeningCharIsInsertedAtCaretPosition()
347+
{
348+
var pair = new SelfClosingPair('"', '"');
349+
var input = '"';
350+
var original = @" |".ToCodeString();
351+
var expected = @" ""|""".ToCodeString();
352+
353+
var result = Run(pair, original, input);
354+
Assert.AreEqual(expected, result);
355+
}
356+
345357
[Test]
346358
public void DeleteKey_ReturnsNull()
347359
{

0 commit comments

Comments
 (0)