Skip to content

Commit 2729e83

Browse files
committed
Fix FindsPropertyDefinition test
Name was wrong.
1 parent 04345dd commit 2729e83

File tree

3 files changed

+38
-55
lines changed

3 files changed

+38
-55
lines changed

src/PowerShellEditorServices/Services/Symbols/Visitors/SymbolVisitor.cs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -153,15 +153,12 @@ public override AstVisitAction VisitFunctionMember(FunctionMemberAst functionMem
153153
? SymbolType.Constructor
154154
: SymbolType.Method;
155155

156-
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(
157-
functionMemberAst,
158-
useQualifiedName: false,
159-
includeReturnType: false);
156+
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(functionMemberAst);
160157

161158
return _action(new SymbolReference(
162159
symbolType,
163160
functionMemberAst.Name, // We bucket all the overloads.
164-
VisitorUtils.GetMemberOverloadName(functionMemberAst, false, true),
161+
VisitorUtils.GetMemberOverloadName(functionMemberAst),
165162
nameExtent,
166163
functionMemberAst.Extent,
167164
_file,
@@ -172,13 +169,18 @@ public override AstVisitAction VisitPropertyMember(PropertyMemberAst propertyMem
172169
{
173170
SymbolType symbolType =
174171
propertyMemberAst.Parent is TypeDefinitionAst typeAst && typeAst.IsEnum
175-
? SymbolType.EnumMember : SymbolType.Property;
172+
? SymbolType.EnumMember
173+
: SymbolType.Property;
174+
175+
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(propertyMemberAst);
176+
string name = symbolType == SymbolType.EnumMember
177+
? propertyMemberAst.Name
178+
: "$" + propertyMemberAst.Name;
176179

177-
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(propertyMemberAst, false, false);
178180
return _action(new SymbolReference(
179181
symbolType,
180-
nameExtent.Text,
181-
VisitorUtils.GetMemberOverloadName(propertyMemberAst, false, true),
182+
name,
183+
VisitorUtils.GetMemberOverloadName(propertyMemberAst),
182184
nameExtent,
183185
propertyMemberAst.Extent,
184186
_file,
@@ -228,11 +230,20 @@ public override AstVisitAction VisitInvokeMemberExpression(InvokeMemberExpressio
228230

229231
public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
230232
{
233+
string? name = configurationDefinitionAst.InstanceName is StringConstantExpressionAst stringConstant
234+
? stringConstant.Value : null;
235+
if (string.IsNullOrEmpty(name))
236+
{
237+
return AstVisitAction.Continue;
238+
}
239+
231240
IScriptExtent nameExtent = VisitorUtils.GetNameExtent(configurationDefinitionAst);
232241
return _action(new SymbolReference(
233242
SymbolType.Configuration,
234-
nameExtent.Text,
235-
"configuration " + nameExtent.Text + " { }",
243+
#pragma warning disable CS8604 // Possible null reference argument.
244+
name,
245+
#pragma warning restore CS8604
246+
"configuration " + name + " { }",
236247
nameExtent,
237248
configurationDefinitionAst.Extent,
238249
_file,

src/PowerShellEditorServices/Utility/VisitorUtils.cs

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -170,16 +170,14 @@ internal static PSESSymbols.ScriptExtent GetNameExtent(TypeDefinitionAst typeDef
170170
/// Gets a new ScriptExtent for a given Ast for the symbol name only (variable)
171171
/// </summary>
172172
/// <param name="functionMemberAst">A FunctionMemberAst in the script's AST</param>
173-
/// <param name="useQualifiedName">A bool indicating if class/enum name should be prepended</param>
174-
/// <param name="includeReturnType">A bool indicating if return type should be included for methods</param>
175173
/// <returns>A ScriptExtent with for the symbol name only</returns>
176-
internal static PSESSymbols.ScriptExtent GetNameExtent(FunctionMemberAst functionMemberAst, bool useQualifiedName = true, bool includeReturnType = false)
174+
internal static PSESSymbols.ScriptExtent GetNameExtent(FunctionMemberAst functionMemberAst)
177175
{
178176
(int startColumn, int startLine) = GetNameStartColumnAndLineFromAst(functionMemberAst);
179177

180178
return new PSESSymbols.ScriptExtent()
181179
{
182-
Text = GetMemberOverloadName(functionMemberAst, useQualifiedName, includeReturnType),
180+
Text = GetMemberOverloadName(functionMemberAst),
183181
StartLineNumber = startLine,
184182
EndLineNumber = startLine,
185183
StartColumnNumber = startColumn,
@@ -192,13 +190,8 @@ internal static PSESSymbols.ScriptExtent GetNameExtent(FunctionMemberAst functio
192190
/// Gets a new ScriptExtent for a given Ast for the property name only
193191
/// </summary>
194192
/// <param name="propertyMemberAst">A PropertyMemberAst in the script's AST</param>
195-
/// <param name="useQualifiedName">A bool indicating if class/enum name should be prepended</param>
196-
/// <param name="includePropertyType">A bool indicating if type should be included for class property</param>
197193
/// <returns>A ScriptExtent with for the symbol name only</returns>
198-
internal static PSESSymbols.ScriptExtent GetNameExtent(
199-
PropertyMemberAst propertyMemberAst,
200-
bool useQualifiedName = true,
201-
bool includePropertyType = false)
194+
internal static PSESSymbols.ScriptExtent GetNameExtent(PropertyMemberAst propertyMemberAst)
202195
{
203196
bool isEnumMember = propertyMemberAst.Parent is TypeDefinitionAst typeDef && typeDef.IsEnum;
204197
(int startColumn, int startLine) = GetNameStartColumnAndLineFromAst(propertyMemberAst, isEnumMember);
@@ -210,10 +203,7 @@ internal static PSESSymbols.ScriptExtent GetNameExtent(
210203

211204
return new PSESSymbols.ScriptExtent()
212205
{
213-
Text = GetMemberOverloadName(
214-
propertyMemberAst,
215-
useQualifiedName: useQualifiedName,
216-
includePropertyType: includePropertyType),
206+
Text = GetMemberOverloadName(propertyMemberAst),
217207
StartLineNumber = startLine,
218208
EndLineNumber = startLine,
219209
StartColumnNumber = startColumn,
@@ -307,26 +297,17 @@ internal static string GetParamDisplayName(ParameterAst parameterAst)
307297
/// Gets the method or constructor name with parameters for current overload.
308298
/// </summary>
309299
/// <param name="functionMemberAst">A FunctionMemberAst object in the script's AST</param>
310-
/// <param name="useQualifiedName">A bool indicating if class/enum name should be prepended</param>
311-
/// <param name="includeReturnType">A bool indicating if return type should be included for methods</param>
312300
/// <returns>Function member name with return type (optional) and parameters</returns>
313-
internal static string GetMemberOverloadName(FunctionMemberAst functionMemberAst,
314-
bool useQualifiedName = true,
315-
bool includeReturnType = false)
301+
internal static string GetMemberOverloadName(FunctionMemberAst functionMemberAst)
316302
{
317303
StringBuilder sb = new();
318304

319305
// Prepend return type and class. Used for symbol details (hover)
320-
if (includeReturnType && !functionMemberAst.IsConstructor)
306+
if (!functionMemberAst.IsConstructor)
321307
{
322308
sb.Append(functionMemberAst.ReturnType?.TypeName.Name ?? "void").Append(' ');
323309
}
324310

325-
if (useQualifiedName && functionMemberAst.Parent is TypeDefinitionAst typeAst && typeAst.IsClass)
326-
{
327-
sb.Append(typeAst.Name).Append('.');
328-
}
329-
330311
sb.Append(functionMemberAst.Name);
331312

332313
// Add parameters
@@ -350,27 +331,17 @@ internal static string GetMemberOverloadName(FunctionMemberAst functionMemberAst
350331
/// Gets the property name with type and class/enum.
351332
/// </summary>
352333
/// <param name="propertyMemberAst">A PropertyMemberAst object in the script's AST</param>
353-
/// <param name="useQualifiedName">A bool indicating if class/enum name should be prepended</param>
354-
/// <param name="includePropertyType">A bool indicating if type should be included for class property</param>
355334
/// <returns>Property name with type (optional) and class/enum</returns>
356-
internal static string GetMemberOverloadName(PropertyMemberAst propertyMemberAst,
357-
bool useQualifiedName = true,
358-
bool includePropertyType = false)
335+
internal static string GetMemberOverloadName(PropertyMemberAst propertyMemberAst)
359336
{
360337
StringBuilder sb = new();
361338

362339
// Prepend return type and class. Used for symbol details (hover)
363-
if (propertyMemberAst.Parent is TypeDefinitionAst typeAst)
340+
if (propertyMemberAst.Parent is TypeDefinitionAst typeAst && !typeAst.IsEnum)
364341
{
365-
if (includePropertyType && !typeAst.IsEnum)
366-
{
367-
sb.Append(propertyMemberAst.PropertyType?.TypeName.Name ?? "object").Append(' ');
368-
}
369-
370-
if (useQualifiedName)
371-
{
372-
sb.Append(typeAst.Name).Append('.');
373-
}
342+
sb.Append('[')
343+
.Append(propertyMemberAst.PropertyType?.TypeName.Name ?? "object")
344+
.Append("] $");
374345
}
375346

376347
sb.Append(propertyMemberAst.Name);

test/PowerShellEditorServices.Test/Language/SymbolsServiceTests.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -603,10 +603,11 @@ public async Task FindsReferencesOnMethod()
603603
[Fact]
604604
public async Task FindsPropertyDefinition()
605605
{
606-
SymbolReference definitionResult = await GetDefinition(FindsTypeSymbolsDefinitionData.PropertySourceDetails).ConfigureAwait(true);
607-
Assert.Equal(15, definitionResult.ScriptRegion.StartLineNumber);
608-
Assert.Equal(13, definitionResult.ScriptRegion.StartColumnNumber);
609-
Assert.Equal("SuperClass.SomePropWithDefault", definitionResult.SymbolName);
606+
SymbolReference symbol = await GetDefinition(FindsTypeSymbolsDefinitionData.PropertySourceDetails).ConfigureAwait(true);
607+
Assert.Equal("$SomePropWithDefault", symbol.SymbolName);
608+
Assert.Equal("[string] $SomePropWithDefault", symbol.DisplayString);
609+
Assert.Equal(SymbolType.Property, symbol.SymbolType);
610+
Assert.True(symbol.IsDeclaration);
610611
}
611612

612613
[Fact]

0 commit comments

Comments
 (0)