Skip to content

Commit 7d94efa

Browse files
committed
add codelens for class and enum
1 parent a137874 commit 7d94efa

File tree

4 files changed

+34
-20
lines changed

4 files changed

+34
-20
lines changed

src/PowerShellEditorServices/Services/CodeLens/ReferencesCodeLensProvider.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,17 @@ public ReferencesCodeLensProvider(WorkspaceService workspaceService, SymbolsServ
5555
/// </summary>
5656
/// <param name="scriptFile">The PowerShell script file to get code lenses for.</param>
5757
/// <param name="cancellationToken"></param>
58-
/// <returns>An array of CodeLenses describing all functions in the given script file.</returns>
58+
/// <returns>An array of CodeLenses describing all functions, classes and enums in the given script file.</returns>
5959
public CodeLens[] ProvideCodeLenses(ScriptFile scriptFile, CancellationToken cancellationToken)
6060
{
6161
List<CodeLens> acc = new();
6262
foreach (SymbolReference sym in _symbolProvider.ProvideDocumentSymbols(scriptFile))
6363
{
6464
cancellationToken.ThrowIfCancellationRequested();
65-
if (sym.SymbolType == SymbolType.Function)
65+
if (sym.SymbolType is
66+
SymbolType.Function or
67+
SymbolType.Class or
68+
SymbolType.Enum)
6669
{
6770
acc.Add(new CodeLens
6871
{
@@ -94,7 +97,7 @@ public async Task<CodeLens> ResolveCodeLens(
9497
ScriptFile[] references = _workspaceService.ExpandScriptReferences(
9598
scriptFile);
9699

97-
SymbolReference foundSymbol = SymbolsService.FindFunctionDefinitionAtLocation(
100+
SymbolReference foundSymbol = SymbolsService.FindSymbolDefinitionAtLocation(
98101
scriptFile,
99102
codeLens.Range.Start.Line + 1,
100103
codeLens.Range.Start.Character + 1);

src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,15 +269,15 @@ public static IReadOnlyList<SymbolReference> FindOccurrencesInFile(
269269
}
270270

271271
/// <summary>
272-
/// Finds a function definition in the script given a file location
272+
/// Finds a function, class or enum definition in the script given a file location
273273
/// </summary>
274274
/// <param name="scriptFile">The details and contents of a open script file</param>
275275
/// <param name="lineNumber">The line number of the cursor for the given script</param>
276276
/// <param name="columnNumber">The column number of the cursor for the given script</param>
277277
/// <returns>A SymbolReference of the symbol found at the given location
278278
/// or null if there is no symbol at that location
279279
/// </returns>
280-
public static SymbolReference FindFunctionDefinitionAtLocation(
280+
public static SymbolReference FindSymbolDefinitionAtLocation(
281281
ScriptFile scriptFile,
282282
int lineNumber,
283283
int columnNumber)
@@ -287,7 +287,7 @@ public static SymbolReference FindFunctionDefinitionAtLocation(
287287
scriptFile.ScriptAst,
288288
lineNumber,
289289
columnNumber,
290-
includeFunctionDefinitions: true);
290+
includeDefinitions: true);
291291

292292
if (symbolReference != null)
293293
{

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,19 +146,19 @@ await executionService.ExecuteDelegateAsync(
146146
/// <param name="scriptAst">The abstract syntax tree of the given script</param>
147147
/// <param name="lineNumber">The line number of the cursor for the given script</param>
148148
/// <param name="columnNumber">The column number of the cursor for the given script</param>
149-
/// <param name="includeFunctionDefinitions">Includes full function definition ranges in the search.</param>
149+
/// <param name="includeDefinitions">Includes full symbol definition ranges in the search.</param>
150150
/// <returns>SymbolReference of found symbol</returns>
151151
public static SymbolReference FindSymbolAtPosition(
152152
Ast scriptAst,
153153
int lineNumber,
154154
int columnNumber,
155-
bool includeFunctionDefinitions = false)
155+
bool includeDefinitions = false)
156156
{
157157
FindSymbolVisitor symbolVisitor =
158158
new(
159159
lineNumber,
160160
columnNumber,
161-
includeFunctionDefinitions);
161+
includeDefinitions);
162162

163163
scriptAst.Visit(symbolVisitor);
164164

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

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ internal class FindSymbolVisitor : AstVisitor2
1313
{
1414
private readonly int lineNumber;
1515
private readonly int columnNumber;
16-
private readonly bool includeFunctionDefinitions;
16+
private readonly bool includeDefinitions;
1717

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

2020
public FindSymbolVisitor(
2121
int lineNumber,
2222
int columnNumber,
23-
bool includeFunctionDefinitions)
23+
bool includeDefinitions)
2424
{
2525
this.lineNumber = lineNumber;
2626
this.columnNumber = columnNumber;
27-
this.includeFunctionDefinitions = includeFunctionDefinitions;
27+
this.includeDefinitions = includeDefinitions;
2828
}
2929

3030
/// <summary>
@@ -63,7 +63,7 @@ public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst fun
6363
int endLineNumber = functionDefinitionAst.Extent.EndLineNumber;
6464
int endColumnNumber = functionDefinitionAst.Extent.EndColumnNumber;
6565

66-
if (!includeFunctionDefinitions)
66+
if (!includeDefinitions)
6767
{
6868
// We only want the function name
6969
(int startColumn, int startLine) = VisitorUtils.GetNameStartColumnAndLineNumbersFromAst(functionDefinitionAst);
@@ -196,18 +196,29 @@ public override AstVisitAction VisitFunctionMember(FunctionMemberAst functionMem
196196
/// or a decision to continue if it wasn't found</returns>
197197
public override AstVisitAction VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst)
198198
{
199-
// Show only type name. Offset by StartColumn to include indentation etc.
200-
int startColumnNumber =
201-
typeDefinitionAst.Extent.StartColumnNumber +
202-
typeDefinitionAst.Extent.Text.IndexOf(typeDefinitionAst.Name);
199+
int startLineNumber = typeDefinitionAst.Extent.StartLineNumber;
200+
int startColumnNumber = typeDefinitionAst.Extent.StartColumnNumber;
201+
int endLineNumber = typeDefinitionAst.Extent.EndLineNumber;
202+
int endColumnNumber = typeDefinitionAst.Extent.EndColumnNumber;
203+
204+
if (!includeDefinitions)
205+
{
206+
// We only want the function name
207+
startColumnNumber =
208+
typeDefinitionAst.Extent.StartColumnNumber +
209+
typeDefinitionAst.Extent.Text.IndexOf(typeDefinitionAst.Name);
210+
startLineNumber = typeDefinitionAst.Extent.StartLineNumber;
211+
endColumnNumber = startColumnNumber + typeDefinitionAst.Name.Length;
212+
endLineNumber = typeDefinitionAst.Extent.StartLineNumber;
213+
}
203214

204215
IScriptExtent nameExtent = new ScriptExtent()
205216
{
206217
Text = typeDefinitionAst.Name,
207-
StartLineNumber = typeDefinitionAst.Extent.StartLineNumber,
208-
EndLineNumber = typeDefinitionAst.Extent.StartLineNumber,
218+
StartLineNumber = startLineNumber,
219+
EndLineNumber = endLineNumber,
209220
StartColumnNumber = startColumnNumber,
210-
EndColumnNumber = startColumnNumber + typeDefinitionAst.Name.Length,
221+
EndColumnNumber = endColumnNumber,
211222
File = typeDefinitionAst.Extent.File
212223
};
213224

0 commit comments

Comments
 (0)