Skip to content

Commit 37fb950

Browse files
committed
fixed broken test; fixed context formatter for enum+udt members
1 parent cf9d4de commit 37fb950

File tree

5 files changed

+40
-5
lines changed

5 files changed

+40
-5
lines changed

RetailCoder.VBE/UI/Command/MenuItems/CommandBars/IContextFormatter.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,13 @@ private string Format(Declaration declaration)
7575
else if (declaration.DeclarationType == DeclarationType.EnumerationMember
7676
|| declaration.DeclarationType == DeclarationType.UserDefinedTypeMember)
7777
{
78-
formattedDeclaration = string.Format("{0}.{1}.{2}",
78+
formattedDeclaration = string.Format("{0}.{1}.{2} {3}",
7979
declaration.IsBuiltIn
8080
? System.IO.Path.GetFileName(moduleName.ProjectPath) + ";" + moduleName.ProjectName
8181
: moduleName.ToString(),
8282
declaration.ParentDeclaration.IdentifierName,
83-
declaration.IdentifierName);
83+
declaration.IdentifierName,
84+
typeName);
8485
}
8586

8687
var subscripts = declaration.IsArray ? "()" : string.Empty;

Rubberduck.Parsing/Binding/SimpleNameDefaultBinding.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@ or explicit definition precedes this expression in an enclosing procedure.
9393
{
9494
return null;
9595
}
96-
var localVariable = _declarationFinder.FindMemberEnclosingProcedure(_parent, _name, DeclarationType.Variable);
96+
var localVariable = _declarationFinder.FindMemberEnclosingProcedure(_parent, _name, DeclarationType.Variable)
97+
?? _declarationFinder.FindMemberEnclosingProcedure(_parent, _name, DeclarationType.Variable)
98+
;
9799
if (IsValidMatch(localVariable, _name))
98100
{
99101
return new SimpleNameExpression(localVariable, ExpressionClassification.Variable, _context);

Rubberduck.Parsing/Rubberduck.Parsing.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@
258258
<Compile Include="Symbols\PropertyGetDeclaration.cs" />
259259
<Compile Include="Symbols\FunctionDeclaration.cs" />
260260
<Compile Include="Symbols\SerializableDeclaration.cs" />
261+
<Compile Include="Symbols\SquareBracketedNameComparer.cs" />
261262
<Compile Include="Symbols\SubroutineDeclaration.cs" />
262263
<Compile Include="Symbols\ProjectReferencePass.cs" />
263264
<Compile Include="Symbols\SyntaxErrorInfo.cs" />

Rubberduck.Parsing/Symbols/DeclarationFinder.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public static IEnumerable<TValue> AllValues<TKey, TValue>(
2828

2929
public class DeclarationFinder
3030
{
31+
private static readonly SquareBracketedNameComparer NameComparer = new SquareBracketedNameComparer();
32+
3133
private readonly IHostApplication _hostApp;
3234
private readonly IDictionary<QualifiedModuleName, IAnnotation[]> _annotations;
3335
private readonly IDictionary<QualifiedMemberName, IList<Declaration>> _undeclared;
@@ -48,7 +50,7 @@ public DeclarationFinder(IReadOnlyList<Declaration> declarations, IEnumerable<IA
4850
{
4951
IdentifierName = declaration.IdentifierName.ToLowerInvariant()
5052
})
51-
.ToDictionary(grouping => grouping.Key.IdentifierName, grouping => grouping.ToArray());
53+
.ToDictionary(grouping => grouping.Key.IdentifierName, grouping => grouping.ToArray(), NameComparer);
5254

5355
_undeclared = new Dictionary<QualifiedMemberName, IList<Declaration>>();
5456
_annotationService = new AnnotationService(this);
@@ -306,7 +308,7 @@ public Declaration FindMemberEnclosingModule(Declaration callingModule, Declarat
306308

307309
public Declaration FindMemberEnclosingProcedure(Declaration enclosingProcedure, string memberName, DeclarationType memberType, ParserRuleContext onSiteContext = null)
308310
{
309-
if (memberType == DeclarationType.Variable && enclosingProcedure.IdentifierName.Equals(memberName))
311+
if (memberType == DeclarationType.Variable && NameComparer.Equals(enclosingProcedure.IdentifierName, memberName))
310312
{
311313
return enclosingProcedure;
312314
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Collections.Generic;
2+
3+
namespace Rubberduck.Parsing.Symbols
4+
{
5+
public class SquareBracketedNameComparer : IEqualityComparer<string>
6+
{
7+
public bool Equals(string x, string y)
8+
{
9+
return string.Equals(ApplyBrackets(x), ApplyBrackets(y));
10+
}
11+
12+
public int GetHashCode(string obj)
13+
{
14+
if (obj == null) return 0;
15+
16+
var value = ApplyBrackets(obj);
17+
return value.GetHashCode();
18+
}
19+
20+
private string ApplyBrackets(string value)
21+
{
22+
if (value == null) return null;
23+
24+
return value[0] == '[' && value[value.Length - 1] == ']'
25+
? value
26+
: "[" + value + "]";
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)