Skip to content

Commit 09416f9

Browse files
committed
Make ResolveCodeLens return a Task (again)
Ironically this was clearly how it used to work, and was for some reason changed, even though it does need to be a task and was previously relying on synchronous side effects.
1 parent 6d90c44 commit 09416f9

File tree

7 files changed

+40
-38
lines changed

7 files changed

+40
-38
lines changed

src/PowerShellEditorServices/Services/CodeLens/ICodeLensProvider.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT License.
33

4+
using System.Threading.Tasks;
45
using Microsoft.PowerShell.EditorServices.Services.TextDocument;
56
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
67

@@ -34,13 +35,12 @@ internal interface ICodeLensProvider
3435
/// The CodeLens to resolve.
3536
/// </param>
3637
/// <param name="scriptFile">
37-
/// A CancellationToken which can be used to cancel the
38-
/// request.
38+
/// The ScriptFile to resolve it in (sometimes unused).
3939
/// </param>
4040
/// <returns>
4141
/// A Task which returns the resolved CodeLens when completed.
4242
/// </returns>
43-
CodeLens ResolveCodeLens(
43+
Task<CodeLens> ResolveCodeLens(
4444
CodeLens codeLens,
4545
ScriptFile scriptFile);
4646
}

src/PowerShellEditorServices/Services/CodeLens/PesterCodeLensProvider.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT License.
33
using System;
44
using System.Collections.Generic;
5+
using System.Threading.Tasks;
56
using Microsoft.PowerShell.EditorServices.Services;
67
using Microsoft.PowerShell.EditorServices.Services.Symbols;
78
using Microsoft.PowerShell.EditorServices.Services.TextDocument;
@@ -133,11 +134,11 @@ public CodeLens[] ProvideCodeLenses(ScriptFile scriptFile)
133134
/// <param name="codeLens">The code lens to resolve.</param>
134135
/// <param name="scriptFile">The script file.</param>
135136
/// <returns>The given CodeLens, wrapped in a task.</returns>
136-
public CodeLens ResolveCodeLens(CodeLens codeLens, ScriptFile scriptFile)
137+
public Task<CodeLens> ResolveCodeLens(CodeLens codeLens, ScriptFile scriptFile)
137138
{
138139
// This provider has no specific behavior for
139140
// resolving CodeLenses.
140-
return codeLens;
141+
return Task.FromResult(codeLens);
141142
}
142143
}
143144
}

src/PowerShellEditorServices/Services/CodeLens/ReferencesCodeLensProvider.cs

+5-4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System;
55
using System.Collections.Generic;
66
using System.Text;
7+
using System.Threading.Tasks;
78
using Microsoft.PowerShell.EditorServices.Services;
89
using Microsoft.PowerShell.EditorServices.Services.Symbols;
910
using Microsoft.PowerShell.EditorServices.Services.TextDocument;
@@ -79,10 +80,10 @@ public CodeLens[] ProvideCodeLenses(ScriptFile scriptFile)
7980
/// Take a codelens and create a new codelens object with updated references.
8081
/// </summary>
8182
/// <param name="codeLens">The old code lens to get updated references for.</param>
83+
/// <param name="scriptFile"></param>
8284
/// <returns>A new code lens object describing the same data as the old one but with updated references.</returns>
83-
public CodeLens ResolveCodeLens(CodeLens codeLens, ScriptFile scriptFile)
85+
public async Task<CodeLens> ResolveCodeLens(CodeLens codeLens, ScriptFile scriptFile)
8486
{
85-
8687
ScriptFile[] references = _workspaceService.ExpandScriptReferences(
8788
scriptFile);
8889

@@ -91,10 +92,10 @@ public CodeLens ResolveCodeLens(CodeLens codeLens, ScriptFile scriptFile)
9192
codeLens.Range.Start.Line + 1,
9293
codeLens.Range.Start.Character + 1);
9394

94-
List<SymbolReference> referencesResult = _symbolsService.FindReferencesOfSymbol(
95+
List<SymbolReference> referencesResult = await _symbolsService.FindReferencesOfSymbol(
9596
foundSymbol,
9697
references,
97-
_workspaceService);
98+
_workspaceService).ConfigureAwait(false);
9899

99100
Location[] referenceLocations;
100101
if (referencesResult == null)

src/PowerShellEditorServices/Services/Symbols/SymbolsService.cs

+13-12
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ internal class SymbolsService
4848
/// the given Runspace to execute language service operations.
4949
/// </summary>
5050
/// <param name="factory">An ILoggerFactory implementation used for writing log messages.</param>
51+
/// <param name="runspaceContext"></param>
52+
/// <param name="executionService"></param>
53+
/// <param name="workspaceService"></param>
54+
/// <param name="configurationService"></param>
5155
public SymbolsService(
5256
ILoggerFactory factory,
5357
IRunspaceContext runspaceContext,
@@ -175,7 +179,7 @@ public static SymbolReference FindSymbolAtLocation(
175179
/// <param name="referencedFiles">An array of scriptFiles too search for references in</param>
176180
/// <param name="workspace">The workspace that will be searched for symbols</param>
177181
/// <returns>FindReferencesResult</returns>
178-
public List<SymbolReference> FindReferencesOfSymbol(
182+
public async Task<List<SymbolReference>> FindReferencesOfSymbol(
179183
SymbolReference foundSymbol,
180184
ScriptFile[] referencedFiles,
181185
WorkspaceService workspace)
@@ -303,7 +307,7 @@ public static SymbolReference FindFunctionDefinitionAtLocation(
303307
/// <param name="lineNumber">The line number at which the symbol can be located.</param>
304308
/// <param name="columnNumber">The column number at which the symbol can be located.</param>
305309
/// <returns></returns>
306-
public async Task<SymbolDetails> FindSymbolDetailsAtLocationAsync(
310+
public Task<SymbolDetails> FindSymbolDetailsAtLocationAsync(
307311
ScriptFile scriptFile,
308312
int lineNumber,
309313
int columnNumber)
@@ -316,16 +320,14 @@ public async Task<SymbolDetails> FindSymbolDetailsAtLocationAsync(
316320

317321
if (symbolReference == null)
318322
{
319-
return null;
323+
return Task.FromResult<SymbolDetails>(null);
320324
}
321325

322326
symbolReference.FilePath = scriptFile.FilePath;
323-
SymbolDetails symbolDetails = await SymbolDetails.CreateAsync(
327+
return SymbolDetails.CreateAsync(
324328
symbolReference,
325329
_runspaceContext.CurrentRunspace,
326-
_executionService).ConfigureAwait(false);
327-
328-
return symbolDetails;
330+
_executionService);
329331
}
330332

331333
/// <summary>
@@ -443,8 +445,7 @@ public async Task<SymbolReference> GetDefinitionOfSymbolAsync(
443445
if (foundDefinition == null)
444446
{
445447
// Get a list of all powershell files in the workspace path
446-
IEnumerable<string> allFiles = _workspaceService.EnumeratePSFiles();
447-
foreach (string file in allFiles)
448+
foreach (string file in _workspaceService.EnumeratePSFiles())
448449
{
449450
if (filesSearched.Contains(file))
450451
{
@@ -540,7 +541,7 @@ private ScriptFile[] GetBuiltinCommandScriptFiles(
540541
}
541542

542543
string modPath = moduleInfo.Path;
543-
List<ScriptFile> scriptFiles = new List<ScriptFile>();
544+
List<ScriptFile> scriptFiles = new();
544545
ScriptFile newFile;
545546

546547
// find any files where the moduleInfo's path ends with ps1 or psm1
@@ -595,7 +596,7 @@ public static FunctionDefinitionAst GetFunctionDefinitionForHelpComment(
595596
IEnumerable<Ast> foundAsts = scriptFile.ScriptAst.FindAll(
596597
ast =>
597598
{
598-
if (!(ast is FunctionDefinitionAst fdAst))
599+
if (ast is not FunctionDefinitionAst fdAst)
599600
{
600601
return false;
601602
}
@@ -605,7 +606,7 @@ public static FunctionDefinitionAst GetFunctionDefinitionForHelpComment(
605606
},
606607
true);
607608

608-
if (foundAsts == null || !foundAsts.Any())
609+
if (foundAsts?.Any() != true)
609610
{
610611
helpLocation = null;
611612
return null;

src/PowerShellEditorServices/Services/TextDocument/Handlers/CodeLensHandlers.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ public Task<CodeLens> Handle(CodeLens request, CancellationToken cancellationTok
7575
_workspaceService.GetFile(
7676
codeLensData.Uri);
7777

78-
var resolvedCodeLens = originalProvider.ResolveCodeLens(request, scriptFile);
79-
return Task.FromResult(resolvedCodeLens);
78+
return originalProvider.ResolveCodeLens(request, scriptFile);
8079
}
8180

8281
public void SetCapability(CodeLensCapability capability)

src/PowerShellEditorServices/Services/TextDocument/Handlers/ReferencesHandler.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public PsesReferencesHandler(ILoggerFactory factory, SymbolsService symbolsServi
3434
DocumentSelector = LspUtils.PowerShellDocumentSelector
3535
};
3636

37-
public override Task<LocationContainer> Handle(ReferenceParams request, CancellationToken cancellationToken)
37+
public async override Task<LocationContainer> Handle(ReferenceParams request, CancellationToken cancellationToken)
3838
{
3939
ScriptFile scriptFile = _workspaceService.GetFile(request.TextDocument.Uri);
4040

@@ -45,10 +45,10 @@ public override Task<LocationContainer> Handle(ReferenceParams request, Cancella
4545
request.Position.Character + 1);
4646

4747
List<SymbolReference> referencesResult =
48-
_symbolsService.FindReferencesOfSymbol(
48+
await _symbolsService.FindReferencesOfSymbol(
4949
foundSymbol,
5050
_workspaceService.ExpandScriptReferences(scriptFile),
51-
_workspaceService);
51+
_workspaceService).ConfigureAwait(false);
5252

5353
var locations = new List<Location>();
5454

@@ -64,7 +64,7 @@ public override Task<LocationContainer> Handle(ReferenceParams request, Cancella
6464
}
6565
}
6666

67-
return Task.FromResult(new LocationContainer(locations));
67+
return new LocationContainer(locations);
6868
}
6969

7070
private static Range GetRangeFromScriptRegion(ScriptRegion scriptRegion)

test/PowerShellEditorServices.Test/Language/SymbolsServiceTests.cs

+11-11
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ private Task<SymbolReference> GetDefinition(ScriptRegion scriptRegion)
7171
return symbolsService.GetDefinitionOfSymbolAsync(scriptFile, symbolReference);
7272
}
7373

74-
private List<SymbolReference> GetReferences(ScriptRegion scriptRegion)
74+
private Task<List<SymbolReference>> GetReferences(ScriptRegion scriptRegion)
7575
{
7676
ScriptFile scriptFile = GetScriptFile(scriptRegion);
7777

@@ -126,9 +126,9 @@ public async Task FindsFunctionDefinition()
126126
}
127127

128128
[Fact]
129-
public void FindsReferencesOnFunction()
129+
public async Task FindsReferencesOnFunction()
130130
{
131-
List<SymbolReference> referencesResult = GetReferences(FindsReferencesOnFunctionData.SourceDetails);
131+
List<SymbolReference> referencesResult = await GetReferences(FindsReferencesOnFunctionData.SourceDetails).ConfigureAwait(true);
132132
Assert.Equal(3, referencesResult.Count);
133133
Assert.Equal(1, referencesResult[0].ScriptRegion.StartLineNumber);
134134
Assert.Equal(10, referencesResult[0].ScriptRegion.StartColumnNumber);
@@ -177,9 +177,9 @@ public async Task FindsVariableDefinition()
177177
}
178178

179179
[Fact]
180-
public void FindsReferencesOnVariable()
180+
public async Task FindsReferencesOnVariable()
181181
{
182-
List<SymbolReference> referencesResult = GetReferences(FindsReferencesOnVariableData.SourceDetails);
182+
List<SymbolReference> referencesResult = await GetReferences(FindsReferencesOnVariableData.SourceDetails).ConfigureAwait(true);
183183
Assert.Equal(3, referencesResult.Count);
184184
Assert.Equal(10, referencesResult[referencesResult.Count - 1].ScriptRegion.StartLineNumber);
185185
Assert.Equal(13, referencesResult[referencesResult.Count - 1].ScriptRegion.StartColumnNumber);
@@ -204,26 +204,26 @@ public void FindsOccurrencesOnParameter()
204204
}
205205

206206
[Fact]
207-
public void FindsReferencesOnCommandWithAlias()
207+
public async Task FindsReferencesOnCommandWithAlias()
208208
{
209-
List<SymbolReference> referencesResult = GetReferences(FindsReferencesOnBuiltInCommandWithAliasData.SourceDetails);
209+
List<SymbolReference> referencesResult = await GetReferences(FindsReferencesOnBuiltInCommandWithAliasData.SourceDetails).ConfigureAwait(true);
210210
Assert.Equal(4, referencesResult.Count);
211211
Assert.Equal("gci", referencesResult[1].SymbolName);
212212
Assert.Equal("dir", referencesResult[2].SymbolName);
213213
Assert.Equal("Get-ChildItem", referencesResult[referencesResult.Count - 1].SymbolName);
214214
}
215215

216216
[Fact]
217-
public void FindsReferencesOnFileWithReferencesFileB()
217+
public async Task FindsReferencesOnFileWithReferencesFileB()
218218
{
219-
List<SymbolReference> referencesResult = GetReferences(FindsReferencesOnFunctionMultiFileDotSourceFileB.SourceDetails);
219+
List<SymbolReference> referencesResult = await GetReferences(FindsReferencesOnFunctionMultiFileDotSourceFileB.SourceDetails).ConfigureAwait(true);
220220
Assert.Equal(4, referencesResult.Count);
221221
}
222222

223223
[Fact]
224-
public void FindsReferencesOnFileWithReferencesFileC()
224+
public async Task FindsReferencesOnFileWithReferencesFileC()
225225
{
226-
List<SymbolReference> referencesResult = GetReferences(FindsReferencesOnFunctionMultiFileDotSourceFileC.SourceDetails);
226+
List<SymbolReference> referencesResult = await GetReferences(FindsReferencesOnFunctionMultiFileDotSourceFileC.SourceDetails).ConfigureAwait(true);
227227
Assert.Equal(4, referencesResult.Count);
228228
}
229229

0 commit comments

Comments
 (0)