diff --git a/src/PowerShellEditorServices/PowerShellEditorServices.csproj b/src/PowerShellEditorServices/PowerShellEditorServices.csproj
index b4726773b..aef6604ff 100644
--- a/src/PowerShellEditorServices/PowerShellEditorServices.csproj
+++ b/src/PowerShellEditorServices/PowerShellEditorServices.csproj
@@ -39,7 +39,7 @@
-
+
@@ -49,7 +49,7 @@
-
+
diff --git a/src/PowerShellEditorServices/Services/TextDocument/Handlers/CodeActionHandler.cs b/src/PowerShellEditorServices/Services/TextDocument/Handlers/CodeActionHandler.cs
index 7a9508192..7e238e4f7 100644
--- a/src/PowerShellEditorServices/Services/TextDocument/Handlers/CodeActionHandler.cs
+++ b/src/PowerShellEditorServices/Services/TextDocument/Handlers/CodeActionHandler.cs
@@ -62,6 +62,7 @@ public async Task Handle(CodeActionParams request,
{
if (cancellationToken.IsCancellationRequested)
{
+ _logger.LogDebug("CodeAction request canceled at range: {0}", request.Range);
return Array.Empty();
}
diff --git a/src/PowerShellEditorServices/Services/TextDocument/Handlers/CompletionHandler.cs b/src/PowerShellEditorServices/Services/TextDocument/Handlers/CompletionHandler.cs
index ffb10178d..5c6fa9324 100644
--- a/src/PowerShellEditorServices/Services/TextDocument/Handlers/CompletionHandler.cs
+++ b/src/PowerShellEditorServices/Services/TextDocument/Handlers/CompletionHandler.cs
@@ -25,6 +25,7 @@ internal class CompletionHandler : ICompletionHandler, ICompletionResolveHandler
{
const int DefaultWaitTimeoutMilliseconds = 5000;
private readonly SemaphoreSlim _completionLock = AsyncUtils.CreateSimpleLockingSemaphore();
+ private readonly SemaphoreSlim _completionResolveLock = AsyncUtils.CreateSimpleLockingSemaphore();
private readonly ILogger _logger;
private readonly PowerShellContextService _powerShellContextService;
@@ -67,7 +68,15 @@ public async Task Handle(CompletionParams request, CancellationT
ScriptFile scriptFile = _workspaceService.GetFile(request.TextDocument.Uri);
- await _completionLock.WaitAsync().ConfigureAwait(false);
+ try
+ {
+ await _completionLock.WaitAsync(cancellationToken).ConfigureAwait(false);
+ }
+ catch (OperationCanceledException)
+ {
+ _logger.LogDebug("Completion request canceled for file: {0}", request.TextDocument.Uri);
+ return Array.Empty();
+ }
try
{
@@ -116,22 +125,39 @@ public async Task Handle(CompletionItem request, CancellationTok
return request;
}
- // Get the documentation for the function
- CommandInfo commandInfo =
- await CommandHelpers.GetCommandInfoAsync(
- request.Label,
- _powerShellContextService).ConfigureAwait(false);
+ try
+ {
+ await _completionResolveLock.WaitAsync(cancellationToken).ConfigureAwait(false);
+ }
+ catch (OperationCanceledException)
+ {
+ _logger.LogDebug("CompletionItemResolve request canceled for item: {0}", request.Label);
+ return request;
+ }
- if (commandInfo != null)
+ try
{
- request.Documentation =
- await CommandHelpers.GetCommandSynopsisAsync(
- commandInfo,
+ // Get the documentation for the function
+ CommandInfo commandInfo =
+ await CommandHelpers.GetCommandInfoAsync(
+ request.Label,
_powerShellContextService).ConfigureAwait(false);
- }
- // Send back the updated CompletionItem
- return request;
+ if (commandInfo != null)
+ {
+ request.Documentation =
+ await CommandHelpers.GetCommandSynopsisAsync(
+ commandInfo,
+ _powerShellContextService).ConfigureAwait(false);
+ }
+
+ // Send back the updated CompletionItem
+ return request;
+ }
+ finally
+ {
+ _completionResolveLock.Release();
+ }
}
public void SetCapability(CompletionCapability capability)
diff --git a/src/PowerShellEditorServices/Services/TextDocument/Handlers/FoldingRangeHandler.cs b/src/PowerShellEditorServices/Services/TextDocument/Handlers/FoldingRangeHandler.cs
index 657694f97..aafee5b36 100644
--- a/src/PowerShellEditorServices/Services/TextDocument/Handlers/FoldingRangeHandler.cs
+++ b/src/PowerShellEditorServices/Services/TextDocument/Handlers/FoldingRangeHandler.cs
@@ -43,6 +43,7 @@ public Task> Handle(FoldingRangeRequestParam request, Ca
{
if (cancellationToken.IsCancellationRequested)
{
+ _logger.LogDebug("FoldingRange request canceled for file: {0}", request.TextDocument.Uri);
return Task.FromResult(new Container());
}
diff --git a/src/PowerShellEditorServices/Services/TextDocument/Handlers/HoverHandler.cs b/src/PowerShellEditorServices/Services/TextDocument/Handlers/HoverHandler.cs
index 307aa7b46..e6094a73e 100644
--- a/src/PowerShellEditorServices/Services/TextDocument/Handlers/HoverHandler.cs
+++ b/src/PowerShellEditorServices/Services/TextDocument/Handlers/HoverHandler.cs
@@ -48,6 +48,12 @@ public HoverRegistrationOptions GetRegistrationOptions()
public async Task Handle(HoverParams request, CancellationToken cancellationToken)
{
+ if (cancellationToken.IsCancellationRequested)
+ {
+ _logger.LogDebug("Hover request canceled for file: {0}", request.TextDocument.Uri);
+ return new Hover();
+ }
+
ScriptFile scriptFile = _workspaceService.GetFile(request.TextDocument.Uri);
SymbolDetails symbolDetails =
@@ -56,21 +62,21 @@ await _symbolsService.FindSymbolDetailsAtLocationAsync(
(int) request.Position.Line + 1,
(int) request.Position.Character + 1).ConfigureAwait(false);
- List symbolInfo = new List();
- Range symbolRange = null;
-
- if (symbolDetails != null)
+ if (symbolDetails == null)
{
- symbolInfo.Add(new MarkedString("PowerShell", symbolDetails.DisplayString));
+ return new Hover();
+ }
- if (!string.IsNullOrEmpty(symbolDetails.Documentation))
- {
- symbolInfo.Add(new MarkedString("markdown", symbolDetails.Documentation));
- }
+ List symbolInfo = new List();
+ symbolInfo.Add(new MarkedString("PowerShell", symbolDetails.DisplayString));
- symbolRange = GetRangeFromScriptRegion(symbolDetails.SymbolReference.ScriptRegion);
+ if (!string.IsNullOrEmpty(symbolDetails.Documentation))
+ {
+ symbolInfo.Add(new MarkedString("markdown", symbolDetails.Documentation));
}
+ Range symbolRange = GetRangeFromScriptRegion(symbolDetails.SymbolReference.ScriptRegion);
+
return new Hover
{
Contents = new MarkedStringsOrMarkupContent(symbolInfo),
diff --git a/test/PowerShellEditorServices.Test.E2E/PowerShellEditorServices.Test.E2E.csproj b/test/PowerShellEditorServices.Test.E2E/PowerShellEditorServices.Test.E2E.csproj
index b3225e1b5..243ab2a1d 100644
--- a/test/PowerShellEditorServices.Test.E2E/PowerShellEditorServices.Test.E2E.csproj
+++ b/test/PowerShellEditorServices.Test.E2E/PowerShellEditorServices.Test.E2E.csproj
@@ -10,7 +10,7 @@
-
+