Skip to content

Commit

Permalink
fixes #4460
Browse files Browse the repository at this point in the history
  • Loading branch information
retailcoder committed Oct 26, 2018
1 parent 77574e4 commit 9d51719
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ private CodeString HandleOpeningChar(SelfClosingPair pair, CodeString original)
}
else
{
newCode = original.CaretPosition.StartColumn == line.Length
newCode = original.CaretPosition.StartColumn >= line.Length
? line + autoCode
: line.Insert(original.CaretPosition.StartColumn, autoCode);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,17 @@ public CodeString Prettify(ICodeModule module, CodeString original)
var originalCode = original.Code.Replace("\r", string.Empty).Split('\n');
var originalPosition = original.CaretPosition.StartColumn;
var originalNonWhitespaceCharacters = 0;
var isAllWhitespace = true;
for (var i = 0; i <= Math.Min(originalPosition - 1, originalCode[original.CaretPosition.StartLine].Length - 1); i++)
{
if (originalCode[original.CaretPosition.StartLine][i] != ' ')
{
originalNonWhitespaceCharacters++;
isAllWhitespace = false;
}
}

var indent = originalCode[original.CaretPosition.StartLine].TakeWhile(c => c == ' ').Count();
var indent = original.CaretLine.TakeWhile(c => c == ' ').Count();

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

var prettifiedPosition = new Selection(
original.SnippetPosition.ToZeroBased().StartLine + original.CaretPosition.StartLine,
prettifiedCode[original.CaretPosition.StartLine].Trim().Length == 0
? indent
: Math.Min(prettifiedCode[original.CaretPosition.StartLine].Length, original.CaretPosition.StartColumn))
prettifiedCode[original.CaretPosition.StartLine].Trim().Length == 0 || (isAllWhitespace && !string.IsNullOrEmpty(original.CaretLine.Substring(original.CaretPosition.StartColumn).Trim()))
? Math.Min(indent, original.CaretPosition.StartColumn)
: Math.Min(prettifiedCode[original.CaretPosition.StartLine].Length, prettifiedCaretCharIndex + 1))
.ToOneBased();

SetSelection(module, prettifiedPosition);
Expand Down
12 changes: 12 additions & 0 deletions RubberduckTests/AutoComplete/SelfClosingPairCompletionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,18 @@ public void WhenCaretBetweenOpeningAndClosingChars_BackspaceRemovesBoth_Indented
Assert.AreEqual(expected, result);
}

[Test]
public void GivenEmptyIndentedLine_OpeningCharIsInsertedAtCaretPosition()
{
var pair = new SelfClosingPair('"', '"');
var input = '"';
var original = @" |".ToCodeString();
var expected = @" ""|""".ToCodeString();

var result = Run(pair, original, input);
Assert.AreEqual(expected, result);
}

[Test]
public void DeleteKey_ReturnsNull()
{
Expand Down

0 comments on commit 9d51719

Please sign in to comment.