Skip to content

Commit d5b900d

Browse files
authored
Merge pull request #4569 from retailcoder/bugfix
SCP Fix
2 parents 0bda237 + b524fb7 commit d5b900d

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed

Rubberduck.Core/AppMenu.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public void Initialize()
3838
{
3939
menu.Initialize();
4040
}
41+
EvaluateCanExecute(_parser.State);
4142
}
4243

4344
public void OnSelectedDeclarationChange(object sender, DeclarationChangedEventArgs e)

Rubberduck.Core/AutoComplete/Service/SelfClosingPairHandler.cs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ public override bool Handle(AutoCompleteEventArgs e, AutoCompleteSettings settin
6666
break;
6767
}
6868
}
69+
}
6970

70-
if (result == null)
71-
{
72-
return false;
73-
}
71+
if (result == null)
72+
{
73+
return false;
7474
}
7575

7676
var snippetPosition = new Selection(result.SnippetPosition.StartLine, 1, result.SnippetPosition.EndLine, 1);
@@ -109,21 +109,28 @@ private bool HandleInternal(AutoCompleteEventArgs e, CodeString original, SelfCl
109109
return false;
110110
}
111111

112-
result = CodePaneHandler.Prettify(e.Module, result);
112+
var reprettified = CodePaneHandler.Prettify(e.Module, result);
113+
if (pair.OpeningChar == '(' && e.Character == pair.OpeningChar && !reprettified.Equals(result))
114+
{
115+
// VBE eats it. bail out but don't swallow the keypress.
116+
e.Handled = false;
117+
result = null;
118+
return false;
119+
}
113120

114-
var currentLine = result.Lines[result.CaretPosition.StartLine];
121+
var currentLine = reprettified.Lines[reprettified.CaretPosition.StartLine];
115122
if (!string.IsNullOrWhiteSpace(currentLine) &&
116123
currentLine.EndsWith(" ") &&
117-
result.CaretPosition.StartColumn == currentLine.Length)
124+
reprettified.CaretPosition.StartColumn == currentLine.Length)
118125
{
119-
result = result.ReplaceLine(result.CaretPosition.StartLine, currentLine.TrimEnd());
126+
result = reprettified.ReplaceLine(reprettified.CaretPosition.StartLine, currentLine.TrimEnd());
120127
}
121128

122129
if (pair.OpeningChar == '(' &&
123130
e.Character == pair.OpeningChar &&
124131
!result.CaretLine.EndsWith($"{pair.OpeningChar}{pair.ClosingChar}"))
125132
{
126-
// VBE eats it. bail out but still swallow the keypress, since we've already re-prettified.
133+
// VBE eats it. bail out but still swallow the keypress.
127134
e.Handled = true;
128135
result = null;
129136
return false;

RubberduckTests/AutoComplete/SelfClosingPairHandlerTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,17 @@ public void GivenOpeningParenthesisOnOtherwiseNonEmptyLine_ReturnsFalseAndSwallo
103103
Assert.IsTrue(info.Args.Handled);
104104
}
105105

106+
[Test]
107+
public void GivenOpeningParenthesisOnCallStatement_ReturnsFalseAndLetsKeypressThrough()
108+
{
109+
var input = '(';
110+
var original = "Call DoSomething|".ToCodeString();
111+
var rePrettified = "Call DoSomething|".ToCodeString();
112+
var info = new SelfClosingPairTestInfo(original, input, rePrettified);
113+
114+
Assert.IsFalse(Run(info));
115+
Assert.IsFalse(info.Args.Handled);
116+
}
106117
[Test]
107118
public void GivenBackspaceOnMatchedPair_DeletesMatchingTokens()
108119
{

0 commit comments

Comments
 (0)