Skip to content

Commit b3eb6d6

Browse files
fflatenandyleejordan
authored andcommitted
check type for property and function members
1 parent 4c03274 commit b3eb6d6

File tree

7 files changed

+41
-39
lines changed

7 files changed

+41
-39
lines changed

src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ public Task<SymbolDetails> FindSymbolDetailsAtLocationAsync(
333333
scriptFile.ScriptAst,
334334
lineNumber,
335335
columnNumber,
336-
returnMemberSignature: true);
336+
returnFullSignature: true);
337337

338338
if (symbolReference == null)
339339
{

src/PowerShellEditorServices/Services/Symbols/Vistors/AstOperations.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,21 +148,21 @@ await executionService.ExecuteDelegateAsync(
148148
/// <param name="lineNumber">The line number of the cursor for the given script</param>
149149
/// <param name="columnNumber">The column number of the cursor for the given script</param>
150150
/// <param name="includeDefinitions">Includes full symbol definition ranges in the search.</param>
151-
/// <param name="returnMemberSignature">Includes return type and class in symbol name.</param>
151+
/// <param name="returnFullSignature">Includes return or property type in symbol name.</param>
152152
/// <returns>SymbolReference of found symbol</returns>
153153
public static SymbolReference FindSymbolAtPosition(
154154
Ast scriptAst,
155155
int lineNumber,
156156
int columnNumber,
157157
bool includeDefinitions = false,
158-
bool returnMemberSignature = false)
158+
bool returnFullSignature = false)
159159
{
160160
FindSymbolVisitor symbolVisitor =
161161
new(
162162
lineNumber,
163163
columnNumber,
164164
includeDefinitions,
165-
returnMemberSignature);
165+
returnFullSignature);
166166

167167
scriptAst.Visit(symbolVisitor);
168168

src/PowerShellEditorServices/Services/Symbols/Vistors/FindDeclarationVisitor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,10 @@ public override AstVisitAction VisitFunctionMember(FunctionMemberAst functionMem
110110
SymbolType.Constructor : SymbolType.Method;
111111

112112
if (symbolRef.SymbolType.Equals(symbolType) &&
113-
VisitorUtils.GetMemberOverloadName(functionMemberAst).Equals(symbolRef.SymbolName, StringComparison.CurrentCultureIgnoreCase))
113+
VisitorUtils.GetMemberOverloadName(functionMemberAst, true, false).Equals(symbolRef.SymbolName, StringComparison.CurrentCultureIgnoreCase))
114114
{
115115
// We only want the method/ctor name. Get start-location for name
116-
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(functionMemberAst);
116+
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(functionMemberAst, true, false);
117117

118118
FoundDeclaration =
119119
new SymbolReference(
@@ -141,10 +141,10 @@ propertyMemberAst.Parent is TypeDefinitionAst typeAst && typeAst.IsEnum ?
141141
SymbolType.EnumMember : SymbolType.Property;
142142

143143
if (symbolRef.SymbolType.Equals(symbolType) &&
144-
VisitorUtils.GetMemberOverloadName(propertyMemberAst).Equals(symbolRef.SymbolName, StringComparison.CurrentCultureIgnoreCase))
144+
VisitorUtils.GetMemberOverloadName(propertyMemberAst, false).Equals(symbolRef.SymbolName, StringComparison.CurrentCultureIgnoreCase))
145145
{
146146
// We only want the property name. Get start-location for name
147-
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(propertyMemberAst);
147+
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(propertyMemberAst, false);
148148

149149
FoundDeclaration =
150150
new SymbolReference(

src/PowerShellEditorServices/Services/Symbols/Vistors/FindReferencesVisitor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,10 @@ public override AstVisitAction VisitFunctionMember(FunctionMemberAst functionMem
235235
SymbolType.Constructor : SymbolType.Method;
236236

237237
if (_symbolRef.SymbolType.Equals(symbolType) &&
238-
VisitorUtils.GetMemberOverloadName(functionMemberAst).Equals(_symbolRef.SymbolName, StringComparison.CurrentCultureIgnoreCase))
238+
VisitorUtils.GetMemberOverloadName(functionMemberAst, true, false).Equals(_symbolRef.SymbolName, StringComparison.CurrentCultureIgnoreCase))
239239
{
240240
// We only want the method/ctor name. Get start-location for name
241-
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(functionMemberAst);
241+
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(functionMemberAst, true, false);
242242
FoundReferences.Add(new SymbolReference(symbolType, nameExtent));
243243
}
244244
return AstVisitAction.Continue;
@@ -258,10 +258,10 @@ propertyMemberAst.Parent is TypeDefinitionAst typeAst && typeAst.IsEnum ?
258258
SymbolType.EnumMember : SymbolType.Property;
259259

260260
if (_symbolRef.SymbolType.Equals(symbolType) &&
261-
VisitorUtils.GetMemberOverloadName(propertyMemberAst).Equals(_symbolRef.SymbolName, StringComparison.CurrentCultureIgnoreCase))
261+
VisitorUtils.GetMemberOverloadName(propertyMemberAst, false).Equals(_symbolRef.SymbolName, StringComparison.CurrentCultureIgnoreCase))
262262
{
263263
// We only want the property name. Get start-location for name
264-
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(propertyMemberAst);
264+
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(propertyMemberAst, false);
265265
FoundReferences.Add(new SymbolReference(SymbolType.Property, nameExtent));
266266
}
267267
return AstVisitAction.Continue;

src/PowerShellEditorServices/Services/Symbols/Vistors/FindSymbolVisitor.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,20 @@ internal class FindSymbolVisitor : AstVisitor2
1414
private readonly int lineNumber;
1515
private readonly int columnNumber;
1616
private readonly bool includeDefinitions;
17-
private readonly bool returnMemberSignature;
17+
private readonly bool returnFullSignature;
1818

1919
public SymbolReference FoundSymbolReference { get; private set; }
2020

2121
public FindSymbolVisitor(
2222
int lineNumber,
2323
int columnNumber,
2424
bool includeDefinitions,
25-
bool returnMemberSignature)
25+
bool returnFullSignature)
2626
{
2727
this.lineNumber = lineNumber;
2828
this.columnNumber = columnNumber;
2929
this.includeDefinitions = includeDefinitions;
30-
this.returnMemberSignature = returnMemberSignature;
30+
this.returnFullSignature = returnFullSignature;
3131
}
3232

3333
/// <summary>
@@ -164,7 +164,7 @@ private bool IsPositionInExtent(IScriptExtent extent)
164164
public override AstVisitAction VisitFunctionMember(FunctionMemberAst functionMemberAst)
165165
{
166166
// We only want the method/ctor name. Get start-location for name
167-
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(functionMemberAst, returnMemberSignature);
167+
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(functionMemberAst, true, returnFullSignature);
168168

169169
if (IsPositionInExtent(nameExtent))
170170
{
@@ -328,7 +328,7 @@ public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinit
328328
public override AstVisitAction VisitPropertyMember(PropertyMemberAst propertyMemberAst)
329329
{
330330
// We only want the property name. Get start-location for name
331-
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(propertyMemberAst, returnMemberSignature);
331+
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(propertyMemberAst, returnFullSignature);
332332

333333
if (IsPositionInExtent(nameExtent))
334334
{

src/PowerShellEditorServices/Services/Symbols/Vistors/FindSymbolsVisitor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public override AstVisitAction VisitTypeDefinition(TypeDefinitionAst typeDefinit
107107
public override AstVisitAction VisitFunctionMember(FunctionMemberAst functionMemberAst)
108108
{
109109
(int startColumn, int startLine) = VisitorUtils.GetNameStartColumnAndLineFromAst(functionMemberAst);
110-
IScriptExtent nameExtent = GetNewExtent(functionMemberAst, VisitorUtils.GetMemberOverloadName(functionMemberAst), startLine, startColumn);
110+
IScriptExtent nameExtent = GetNewExtent(functionMemberAst, VisitorUtils.GetMemberOverloadName(functionMemberAst, false, false), startLine, startColumn);
111111

112112
SymbolType symbolType =
113113
functionMemberAst.IsConstructor ?

src/PowerShellEditorServices/Utility/VisitorUtils.cs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -152,15 +152,16 @@ internal static PSESSymbols.ScriptExtent GetNameExtent(TypeDefinitionAst typeDef
152152
/// Gets a new ScriptExtent for a given Ast for the symbol name only (variable)
153153
/// </summary>
154154
/// <param name="functionMemberAst">A FunctionMemberAst in the script's AST</param>
155-
/// <param name="includeSignature">A bool indicating if return type and class should be included</param>
155+
/// <param name="useQualifiedName">A bool indicating if class/enum name should be prepended</param>
156+
/// <param name="includeReturnType">A bool indicating if return type should be included for methods</param>
156157
/// <returns>A ScriptExtent with for the symbol name only</returns>
157-
internal static PSESSymbols.ScriptExtent GetNameExtent(FunctionMemberAst functionMemberAst, bool includeSignature = false)
158+
internal static PSESSymbols.ScriptExtent GetNameExtent(FunctionMemberAst functionMemberAst, bool useQualifiedName = true, bool includeReturnType = false)
158159
{
159160
(int startColumn, int startLine) = GetNameStartColumnAndLineFromAst(functionMemberAst);
160161

161162
return new PSESSymbols.ScriptExtent()
162163
{
163-
Text = GetMemberOverloadName(functionMemberAst, includeSignature),
164+
Text = GetMemberOverloadName(functionMemberAst, useQualifiedName, includeReturnType),
164165
StartLineNumber = startLine,
165166
EndLineNumber = startLine,
166167
StartColumnNumber = startColumn,
@@ -173,9 +174,9 @@ internal static PSESSymbols.ScriptExtent GetNameExtent(FunctionMemberAst functio
173174
/// Gets a new ScriptExtent for a given Ast for the property name only
174175
/// </summary>
175176
/// <param name="propertyMemberAst">A PropertyMemberAst in the script's AST</param>
176-
/// <param name="includeSignature">A bool indicating if property-type and name of class/enum should be included</param>
177+
/// <param name="includePropertyType">A bool indicating if type should be included for class property</param>
177178
/// <returns>A ScriptExtent with for the symbol name only</returns>
178-
internal static PSESSymbols.ScriptExtent GetNameExtent(PropertyMemberAst propertyMemberAst, bool includeSignature = false)
179+
internal static PSESSymbols.ScriptExtent GetNameExtent(PropertyMemberAst propertyMemberAst, bool includePropertyType = false)
179180
{
180181
bool isEnumMember = propertyMemberAst.Parent is TypeDefinitionAst typeDef && typeDef.IsEnum;
181182
(int startColumn, int startLine) = GetNameStartColumnAndLineFromAst(propertyMemberAst, isEnumMember);
@@ -187,7 +188,7 @@ internal static PSESSymbols.ScriptExtent GetNameExtent(PropertyMemberAst propert
187188

188189
return new PSESSymbols.ScriptExtent()
189190
{
190-
Text = GetMemberOverloadName(propertyMemberAst, includeSignature),
191+
Text = GetMemberOverloadName(propertyMemberAst, includePropertyType),
191192
StartLineNumber = startLine,
192193
EndLineNumber = startLine,
193194
StartColumnNumber = startColumn,
@@ -221,24 +222,24 @@ internal static PSESSymbols.ScriptExtent GetNameExtent(ConfigurationDefinitionAs
221222
/// Gets the method or constructor name with parameters for current overload.
222223
/// </summary>
223224
/// <param name="functionMemberAst">A FunctionMemberAst object in the script's AST</param>
224-
/// <param name="includeSignature">A bool indicating if return type and class should be included</param>
225+
/// <param name="useQualifiedName">A bool indicating if class/enum name should be prepended</param>
226+
/// <param name="includeReturnType">A bool indicating if return type should be included for methods</param>
225227
/// <returns>Function member name with return type (optional) and parameters</returns>
226-
internal static string GetMemberOverloadName(FunctionMemberAst functionMemberAst, bool includeSignature = false)
228+
internal static string GetMemberOverloadName(FunctionMemberAst functionMemberAst,
229+
bool useQualifiedName = true,
230+
bool includeReturnType = false)
227231
{
228232
StringBuilder sb = new();
229233

230234
// Prepend return type and class. Used for symbol details (hover)
231-
if (includeSignature)
235+
if (includeReturnType && !functionMemberAst.IsConstructor)
232236
{
233-
if (!functionMemberAst.IsConstructor)
234-
{
235-
sb.Append(functionMemberAst.ReturnType?.TypeName.Name ?? "void").Append(' ');
236-
}
237+
sb.Append(functionMemberAst.ReturnType?.TypeName.Name ?? "void").Append(' ');
238+
}
237239

238-
if (functionMemberAst.Parent is TypeDefinitionAst typeAst && typeAst.IsClass)
239-
{
240-
sb.Append(typeAst.Name).Append('.');
241-
}
240+
if (useQualifiedName && functionMemberAst.Parent is TypeDefinitionAst typeAst && typeAst.IsClass)
241+
{
242+
sb.Append(typeAst.Name).Append('.');
242243
}
243244

244245
sb.Append(functionMemberAst.Name);
@@ -264,16 +265,17 @@ internal static string GetMemberOverloadName(FunctionMemberAst functionMemberAst
264265
/// Gets the property name with type and class/enum.
265266
/// </summary>
266267
/// <param name="propertyMemberAst">A PropertyMemberAst object in the script's AST</param>
267-
/// <param name="includeSignature">A bool indicating if property-type and name of class/enum should be included</param>
268+
/// <param name="includePropertyType">A bool indicating if type should be included for class property</param>
268269
/// <returns>Property name with type (optional) and class/enum</returns>
269-
internal static string GetMemberOverloadName(PropertyMemberAst propertyMemberAst, bool includeSignature = false)
270+
internal static string GetMemberOverloadName(PropertyMemberAst propertyMemberAst,
271+
bool includePropertyType = false)
270272
{
271273
StringBuilder sb = new();
272274

273275
// Prepend return type and class. Used for symbol details (hover)
274-
if (includeSignature && propertyMemberAst.Parent is TypeDefinitionAst typeAst)
276+
if (propertyMemberAst.Parent is TypeDefinitionAst typeAst)
275277
{
276-
if (!typeAst.IsEnum)
278+
if (includePropertyType && !typeAst.IsEnum)
277279
{
278280
sb.Append(propertyMemberAst.PropertyType?.TypeName.Name ?? "object").Append(' ');
279281
}

0 commit comments

Comments
 (0)