Skip to content

Commit

Permalink
Merge pull request #4462 from retailcoder/scp
Browse files Browse the repository at this point in the history
SCP hotfix
  • Loading branch information
retailcoder committed Oct 26, 2018
2 parents e8564b4 + 9d51719 commit ff42617
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ private CodeString HandleOpeningChar(SelfClosingPair pair, CodeString original)
var line = lines[original.CaretPosition.StartLine];

string newCode;
if (string.IsNullOrEmpty(original.Code))
if (string.IsNullOrEmpty(line))
{
newCode = autoCode;
}
Expand All @@ -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 @@ -125,9 +127,9 @@ public CodeString Prettify(ICodeModule module, CodeString original)
}

var prettifiedPosition = new Selection(
original.SnippetPosition.StartLine - 1 + original.CaretPosition.StartLine,
prettifiedCode[original.CaretPosition.StartLine].Trim().Length == 0
? indent
original.SnippetPosition.ToZeroBased().StartLine + original.CaretPosition.StartLine,
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();

Expand Down
16 changes: 15 additions & 1 deletion RubberduckTests/AutoComplete/CodePaneHandlerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public void GivenExtraWhitespace_PrettifiedCaretStillAtSameToken()

[Test]
[Category("AutoComplete")]
public void GivenMultilineLogicalLine_StillTracksCaret()
public void GivenMultilineLogicalLine_TracksCaret()
{
var original = @"
MsgBox ""test"" & vbNewLine & _
Expand All @@ -91,6 +91,20 @@ public void GivenMultilineLogicalLine_StillTracksCaret()
Assert.AreEqual(original, actual);
}

[Test]
[Category("AutoComplete")]
public void GivenPartialMultilineInstruction_TracksCaret()
{
var original = @"
ExecuteStoredProcedure (""AddAppointmentCountForAClinic"", False,dbconfig.SQLConString, _
| thisClinic.ClinicID ,".ToCodeString();

var sut = InitializeSut(original, original, out var module, out _);
var actual = new TestCodeString(sut.Prettify(module.Object, original));

Assert.AreEqual(original, actual);
}

private static ICodePaneHandler InitializeSut(TestCodeString original, TestCodeString prettified, out Mock<ICodeModule> module, out Mock<ICodePane> pane)
{
var builder = new MockVbeBuilder();
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 ff42617

Please sign in to comment.