Skip to content

Commit 13ae0ce

Browse files
committed
SCP appears to (finally) work. mostly.
1 parent 60188d9 commit 13ae0ce

File tree

4 files changed

+19
-13
lines changed

4 files changed

+19
-13
lines changed

Rubberduck.Core/AutoComplete/AutoCompleteKeyDownHandler.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,20 @@ public AutoCompleteKeyDownHandler(Func<AutoCompleteSettings> getSettings, Func<L
3030
public void Run(ICodeModule module, Selection pSelection, AutoCompleteEventArgs e)
3131
{
3232
var currentContent = module.GetLines(pSelection);
33-
if (HandleSmartConcat(e, pSelection, currentContent, module))
34-
{
35-
return;
36-
}
33+
HandleSmartConcat(e, pSelection, currentContent, module);
34+
if (e.Handled) { return; }
3735

3836
HandleSelfClosingPairs(e, module, pSelection);
37+
if (e.Handled) { return; }
38+
39+
//HandleSomethingElse(?)
40+
//if (e.Handled) { return; }
3941
}
4042

4143
/// <summary>
42-
/// Adds a line continuation when {ENTER} is pressed inside a string literal; returns false otherwise.
44+
/// Adds a line continuation when {ENTER} is pressed inside a string literal.
4345
/// </summary>
44-
private bool HandleSmartConcat(AutoCompleteEventArgs e, Selection pSelection, string currentContent, ICodeModule module)
46+
private void HandleSmartConcat(AutoCompleteEventArgs e, Selection pSelection, string currentContent, ICodeModule module)
4547
{
4648
var shouldHandle = _getSettings().EnableSmartConcat &&
4749
e.Character == '\r' &&
@@ -57,19 +59,15 @@ private bool HandleSmartConcat(AutoCompleteEventArgs e, Selection pSelection, st
5759
if (e.ControlDown)
5860
{
5961
code = $"{currentContent.Substring(0, pSelection.StartColumn - 1)}\" & vbNewLine & _\r\n{whitespace}\"{currentContent.Substring(pSelection.StartColumn - 1)}";
60-
6162
}
6263

6364
module.ReplaceLine(pSelection.StartLine, code);
6465
using (var pane = module.CodePane)
6566
{
6667
pane.Selection = new Selection(pSelection.StartLine + 1, indent + currentContent.Substring(pSelection.StartColumn - 2).Length);
6768
e.Handled = true;
68-
return true;
6969
}
7070
}
71-
72-
return false;
7371
}
7472

7573
private void HandleSelfClosingPairs(AutoCompleteEventArgs e, ICodeModule module, Selection pSelection)
@@ -115,7 +113,10 @@ private void HandleSelfClosingPairs(AutoCompleteEventArgs e, ICodeModule module,
115113

116114
module.DeleteLines(result.SnippetPosition);
117115
module.InsertLines(result.SnippetPosition.StartLine, result.Code);
118-
var finalSelection = new Selection(result.SnippetPosition.StartLine, result.CaretPosition.StartColumn + 1);
116+
var offByOne = result.Code != module.GetLines(result.SnippetPosition);
117+
118+
var finalSelection = new Selection(result.SnippetPosition.StartLine, result.CaretPosition.StartColumn + 1)
119+
.ShiftRight(offByOne ? 1 : 0);
119120
pane.Selection = finalSelection;
120121
e.Handled = true;
121122
return;

Rubberduck.Core/AutoComplete/AutoCompleteService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public void ApplyAutoCompleteSettings(Configuration config)
108108

109109
private void HandleKeyDown(object sender, AutoCompleteEventArgs e)
110110
{
111+
Debug.Assert(_enabled, "KeyDown controller is executing, but auto-completion service is disabled.");
111112
if (e.Character == default && !e.IsDelete)
112113
{
113114
return;

Rubberduck.Core/AutoComplete/SelfClosingPairCompletion/CodeStringPrettifier.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public CodeString Prettify(ICodeModule module, CodeString original)
2121
}
2222
}
2323

24+
var indent = originalCode.TakeWhile(c => c == ' ').Count();
25+
2426
module.DeleteLines(original.SnippetPosition.StartLine, original.SnippetPosition.LineCount);
2527
module.InsertLines(original.SnippetPosition.StartLine, originalCode);
2628
var prettifiedCode = module.GetLines(original.SnippetPosition);
@@ -40,7 +42,7 @@ public CodeString Prettify(ICodeModule module, CodeString original)
4042
}
4143
}
4244

43-
var prettifiedPosition = new Selection(original.SnippetPosition.StartLine - 1, prettifiedCaretCharIndex + 1).ToOneBased();
45+
var prettifiedPosition = new Selection(original.SnippetPosition.StartLine - 1, originalCode.Trim().Length == 0 ? indent : prettifiedCaretCharIndex + 1).ToOneBased();
4446
using (var pane = module.CodePane)
4547
{
4648
pane.Selection = prettifiedPosition;

Rubberduck.Core/AutoComplete/SelfClosingPairCompletion/SelfClosingPairCompletionService.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ private CodeString HandleOpeningChar(SelfClosingPair pair, CodeString original)
5858
lines[original.CaretPosition.StartLine] =
5959
string.IsNullOrEmpty(original.Code)
6060
? autoCode
61-
: line.Insert(original.CaretPosition.StartColumn, autoCode);
61+
: original.CaretPosition.StartColumn == line.Length
62+
? line + autoCode
63+
: line.Insert(original.CaretPosition.StartColumn, autoCode);
6264

6365
return new CodeString(string.Join("\n", lines), nextPosition, original.SnippetPosition);
6466
}

0 commit comments

Comments
 (0)