Skip to content

Commit 3eb9f92

Browse files
committed
Return the identifier name of the declaration from reference.IdentifierName
Returning a bracketed expression instead makes querying the references base on identifier name complicated and surprising.
1 parent 1b58fc6 commit 3eb9f92

File tree

3 files changed

+50
-5
lines changed

3 files changed

+50
-5
lines changed

Rubberduck.Parsing/Binding/Bindings/MemberAccessDefaultBinding.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public MemberAccessDefaultBinding(
3434
parent,
3535
expression,
3636
null,
37-
Identifier.GetName(expression.unrestrictedIdentifier()),
37+
expression.unrestrictedIdentifier().GetText(),
3838
statementContext,
3939
unrestrictedNameContext)
4040
{

Rubberduck.Parsing/VBA/ReferenceManagement/BoundExpressionVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@ private void Visit(
123123
bool isSetAssignment)
124124
{
125125
var callSiteContext = expression.Context;
126-
var identifier = expression.Context.GetText();
127126
var callee = expression.ReferencedDeclaration;
127+
var identifier = callee.IdentifierName;
128128
var selection = callSiteContext.GetSelection();
129129
expression.ReferencedDeclaration.AddReference(
130130
module,
@@ -163,8 +163,8 @@ private void Visit(
163163
}
164164

165165
var callSiteContext = expression.UnrestrictedNameContext;
166-
var identifier = expression.UnrestrictedNameContext.GetText();
167166
var callee = expression.ReferencedDeclaration;
167+
var identifier = callee.IdentifierName;
168168
var selection = callSiteContext.GetSelection();
169169
expression.ReferencedDeclaration.AddReference(
170170
module,

RubberduckTests/Grammar/ResolverTests.cs

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6915,6 +6915,7 @@ End Function
69156915
[Test]
69166916
[TestCase("nonHiddenElement")]
69176917
[TestCase("[nonHiddenElement]")]
6918+
[TestCase("")]
69186919
public void NonHiddenBracketedEnumVariableHasCorrectName(string enumElementName)
69196920
{
69206921
var moduleCode = $@"
@@ -6937,9 +6938,13 @@ End Enum
69376938
[Category("Grammar")]
69386939
[Category("Resolver")]
69396940
[Test]
6941+
[TestCase("nonHiddenElement", "SomeEnum.nonHiddenElement", 1)]
6942+
[TestCase("[nonHiddenElement]", "SomeEnum.[nonHiddenElement]", 0)]
6943+
[TestCase("[nonHiddenElement]", "SomeEnum.[[nonHiddenElement]]", 1)]
69406944
[TestCase("nonHiddenElement", "nonHiddenElement", 1)]
6941-
[TestCase("[nonHiddenElement]", "[nonHiddenElement]", 0)]
69426945
[TestCase("[nonHiddenElement]", "[[nonHiddenElement]]", 1)]
6946+
[TestCase("", "SomeEnum.[]", 1)]
6947+
[TestCase("", "[]", 1)]
69436948
public void NonHiddenBracketedEnumVariableHasReference(string enumElementName, string referenceText, int expectedNumberOfReferences)
69446949
{
69456950
var moduleCode = $@"
@@ -6948,7 +6953,7 @@ Private Enum SomeEnum
69486953
End Enum
69496954
69506955
Private Function Test() As Variant
6951-
Debug.Print SomeEnum.{referenceText}
6956+
Debug.Print {referenceText}
69526957
End Function
69536958
";
69546959

@@ -7024,5 +7029,45 @@ End Function
70247029
Assert.AreEqual("enumElement", enumMemberReference.IdentifierName);
70257030
}
70267031
}
7032+
7033+
[Category("Grammar")]
7034+
[Category("Resolver")]
7035+
[Test]
7036+
[TestCase("TestModule.[Foo]", "Foo")]
7037+
[TestCase("TestModule.[Bar] 23", "Bar")]
7038+
[TestCase("Debug.Print TestModule.[Baz](42)", "Baz")]
7039+
[TestCase("[Foo]", "Foo")]
7040+
[TestCase("[Bar] 23", "Bar")]
7041+
[TestCase("Debug.Print [Baz](42)", "Baz")]
7042+
public void BracketedMemberExpressionCorrectReferencedIdentifierName(string statement, string expectedReferenceText)
7043+
{
7044+
var moduleCode = $@"
7045+
Private Sub Foo()
7046+
End Sub
7047+
7048+
Private Sub Bar(arg As Long)
7049+
End Sub
7050+
7051+
Private Function Baz(arg As Long) As Long
7052+
End Function
7053+
7054+
Private Function Test() As Variant
7055+
{statement}
7056+
End Function
7057+
";
7058+
7059+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(moduleCode, "TestModule", out _);
7060+
7061+
using (var state = Resolve(vbe.Object))
7062+
{
7063+
var module = state.DeclarationFinder
7064+
.AllModules.Single(qmn => qmn.ComponentType == ComponentType.StandardModule);
7065+
var enumMemberReference = state.DeclarationFinder
7066+
.IdentifierReferences(module)
7067+
.Single(reference => reference.Declaration.DeclarationType.HasFlag(DeclarationType.Member));
7068+
7069+
Assert.AreEqual(expectedReferenceText, enumMemberReference.IdentifierName);
7070+
}
7071+
}
70277072
}
70287073
}

0 commit comments

Comments
 (0)