Skip to content

Commit 8adebe7

Browse files
committed
fixed broken tests
1 parent f2f8f9e commit 8adebe7

File tree

2 files changed

+39
-19
lines changed

2 files changed

+39
-19
lines changed

RetailCoder.VBE/Inspections/ConvertToProcedureQuickFix.cs

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
using Antlr4.Runtime;
1+
using System;
2+
using Antlr4.Runtime;
23
using Rubberduck.Parsing;
34
using Rubberduck.Parsing.Grammar;
45
using Rubberduck.VBEditor;
56
using System.Collections.Generic;
67
using System.Linq;
78
using System.Text.RegularExpressions;
9+
using Microsoft.Vbe.Interop;
10+
using Rubberduck.Parsing.Symbols;
811

912
namespace Rubberduck.Inspections
1013
{
@@ -25,25 +28,42 @@ public ConvertToProcedureQuickFix(ParserRuleContext context, QualifiedSelection
2528

2629
public override void Fix()
2730
{
28-
var context = (VBAParser.FunctionStmtContext)Context;
29-
var visibility = context.visibility() == null ? string.Empty : context.visibility().GetText() + ' ';
30-
var name = ' ' + context.ambiguousIdentifier().GetText();
31-
var args = context.argList().GetText();
32-
var asType = context.asTypeClause() == null ? string.Empty : ' ' + context.asTypeClause().GetText();
31+
dynamic functionContext = Context as VBAParser.FunctionStmtContext;
32+
dynamic propertyGetContext = Context as VBAParser.PropertyGetStmtContext;
3333

34-
var oldSignature = visibility + Tokens.Function + name + args + asType;
35-
var newSignature = visibility + Tokens.Sub + name + args;
34+
var context = functionContext ?? propertyGetContext;
35+
if (context == null)
36+
{
37+
throw new InvalidOperationException(string.Format("Context type '{0}' is not valid for {1}.", Context.GetType(), GetType()));
38+
}
3639

37-
var procedure = Context.GetText();
40+
string token = functionContext != null
41+
? Tokens.Function
42+
: Tokens.Property + ' ' + Tokens.Get;
43+
string endToken = token == Tokens.Function
44+
? token
45+
: Tokens.Property;
46+
47+
string visibility = context.visibility() == null ? string.Empty : context.visibility().GetText() + ' ';
48+
string name = ' ' + context.ambiguousIdentifier().GetText();
49+
bool hasTypeHint = context.typeHint() != null;
50+
51+
string args = context.argList().GetText();
52+
string asType = context.asTypeClause() == null ? string.Empty : ' ' + context.asTypeClause().GetText();
53+
54+
string oldSignature = visibility + token + name + (hasTypeHint ? context.typeHint().GetText() : string.Empty) + args + asType;
55+
string newSignature = visibility + Tokens.Sub + name + args;
56+
57+
string procedure = Context.GetText();
3858
string noReturnStatements = procedure;
3959
_returnStatements.ToList().ForEach(returnStatement =>
4060
noReturnStatements = Regex.Replace(noReturnStatements, @"[ \t\f]*" + returnStatement + @"[ \t\f]*\r?\n?", ""));
41-
var result = noReturnStatements.Replace(oldSignature, newSignature)
42-
.Replace(Tokens.End + ' ' + Tokens.Function, Tokens.End + ' ' + Tokens.Sub)
43-
.Replace(Tokens.Exit + ' ' + Tokens.Function, Tokens.Exit + ' ' + Tokens.Sub);
61+
string result = noReturnStatements.Replace(oldSignature, newSignature)
62+
.Replace(Tokens.End + ' ' + endToken, Tokens.End + ' ' + Tokens.Sub)
63+
.Replace(Tokens.Exit + ' ' + endToken, Tokens.Exit + ' ' + Tokens.Sub);
4464

45-
var module = Selection.QualifiedName.Component.CodeModule;
46-
var selection = Context.GetSelection();
65+
CodeModule module = Selection.QualifiedName.Component.CodeModule;
66+
Selection selection = Context.GetSelection();
4767

4868
module.DeleteLines(selection.StartLine, selection.LineCount);
4969
module.InsertLines(selection.StartLine, result);

RubberduckTests/Inspections/NonReturningFunctionInspectionTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ public void NonReturningFunction_QuickFixWorks_Function()
208208
}
209209

210210
[TestMethod]
211-
public void NonReturningFunction_QuickFixWorks_FunctionHasTypeHint()
211+
public void GivenFunctionNameWithTypeHint_SubNameHasNoTypeHint()
212212
{
213213
const string inputCode =
214214
@"Function Foo$()
@@ -304,7 +304,7 @@ public void NonReturningFunction_QuickFixWorks_FunctionHasVariable()
304304
}
305305

306306
[TestMethod]
307-
public void NonReturningFunction_QuickFixWorks_PropertyGet()
307+
public void GivenNonReturningPropertyGetter_QuickFixConvertsToSub()
308308
{
309309
const string inputCode =
310310
@"Property Get Foo() As Boolean
@@ -336,7 +336,7 @@ public void NonReturningFunction_QuickFixWorks_PropertyGet()
336336
}
337337

338338
[TestMethod]
339-
public void NonReturningFunction_QuickFixWorks_PropertyGetHasTypeHint()
339+
public void GivenNonReturningPropertyGetWithTypeHint_QuickFixDropsTypeHint()
340340
{
341341
const string inputCode =
342342
@"Property Get Foo$()
@@ -368,7 +368,7 @@ public void NonReturningFunction_QuickFixWorks_PropertyGetHasTypeHint()
368368
}
369369

370370
[TestMethod]
371-
public void NonReturningFunction_QuickFixWorks_PropertyGetReturnsImplicitVariant()
371+
public void GivenImplicitVariantPropertyGetter_StillConvertsToSub()
372372
{
373373
const string inputCode =
374374
@"Property Get Foo()
@@ -400,7 +400,7 @@ public void NonReturningFunction_QuickFixWorks_PropertyGetReturnsImplicitVariant
400400
}
401401

402402
[TestMethod]
403-
public void NonReturningFunction_QuickFixWorks_PropertyGetHasVariable()
403+
public void GivenParameterizedPropertyGetter_QuickFixKeepsParameter()
404404
{
405405
const string inputCode =
406406
@"Property Get Foo(ByVal b As Boolean) As String

0 commit comments

Comments
 (0)