Skip to content

Commit 617b27f

Browse files
committed
Strip parentheses from AsTypeName of array returning functions and properties
1 parent 3a915a4 commit 617b27f

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

Rubberduck.Parsing/VBA/DeclarationResolving/DeclarationSymbolsListener.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ private Declaration CreateDeclaration(
9393

9494
var isByRef = argContext.BYREF() != null || argContext.BYVAL() == null;
9595
var isParamArray = argContext.PARAMARRAY() != null;
96+
9697
result = new ParameterDeclaration(
9798
new QualifiedMemberName(_qualifiedModuleName, identifierName),
9899
_parentDeclaration,
@@ -385,9 +386,12 @@ public override void EnterFunctionStmt(VBAParser.FunctionStmtContext context)
385386
: asTypeClause.type().GetText()
386387
: SymbolList.TypeHintToTypeName[typeHint];
387388
var isArray = asTypeName.EndsWith("()");
389+
var actualAsTypeName = isArray && asTypeName.EndsWith("()")
390+
? asTypeName.Substring(0, asTypeName.Length - 2)
391+
: asTypeName;
388392
var declaration = CreateDeclaration(
389393
name,
390-
asTypeName,
394+
actualAsTypeName,
391395
accessibility,
392396
DeclarationType.Function,
393397
context,
@@ -417,9 +421,12 @@ public override void EnterPropertyGetStmt(VBAParser.PropertyGetStmtContext conte
417421
: asTypeClause.type().GetText()
418422
: SymbolList.TypeHintToTypeName[typeHint];
419423
var isArray = asTypeClause != null && asTypeClause.type().LPAREN() != null;
424+
var actualAsTypeName = isArray && asTypeName.EndsWith("()")
425+
? asTypeName.Substring(0, asTypeName.Length - 2)
426+
: asTypeName;
420427
var declaration = CreateDeclaration(
421428
name,
422-
asTypeName,
429+
actualAsTypeName,
423430
accessibility,
424431
DeclarationType.PropertyGet,
425432
context,

RubberduckTests/Grammar/ResolverTests.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2730,6 +2730,52 @@ End Sub
27302730
}
27312731
}
27322732

2733+
[Category("Grammar")]
2734+
[Category("Resolver")]
2735+
[Test]
2736+
public void FunctionTypeNameIsElementTypeName()
2737+
{
2738+
var code = @"
2739+
Public Function bar() As Long()
2740+
End Function
2741+
";
2742+
using (var state = Resolve(code))
2743+
{
2744+
2745+
var declaration = state.DeclarationFinder
2746+
.UserDeclarations(DeclarationType.Function)
2747+
.Single();
2748+
2749+
var expectedTypeName = "Long";
2750+
var actualAsTypeName = declaration.AsTypeName;
2751+
2752+
Assert.AreEqual(expectedTypeName, actualAsTypeName);
2753+
}
2754+
}
2755+
2756+
[Category("Grammar")]
2757+
[Category("Resolver")]
2758+
[Test]
2759+
public void PropertyGetTypeNameIsElementTypeName()
2760+
{
2761+
var code = @"
2762+
Public Property Get bar() As Long()
2763+
End Property
2764+
";
2765+
using (var state = Resolve(code))
2766+
{
2767+
2768+
var declaration = state.DeclarationFinder
2769+
.UserDeclarations(DeclarationType.PropertyGet)
2770+
.Single();
2771+
2772+
var expectedTypeName = "Long";
2773+
var actualAsTypeName = declaration.AsTypeName;
2774+
2775+
Assert.AreEqual(expectedTypeName, actualAsTypeName);
2776+
}
2777+
}
2778+
27332779
[Category("Grammar")]
27342780
[Category("Resolver")]
27352781
[Test]

0 commit comments

Comments
 (0)