From 577b043fb7e2a606f2159d5fa632c070ea161325 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Tue, 31 Mar 2020 15:07:15 -0700 Subject: [PATCH 1/4] better logging for a couple handlers --- .../Services/TextDocument/Handlers/CodeActionHandler.cs | 1 + .../Services/TextDocument/Handlers/FoldingRangeHandler.cs | 1 + 2 files changed, 2 insertions(+) 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/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()); } From f50b8fdf302ed3e99a0f634c1249f15ed7e341af Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Tue, 31 Mar 2020 15:08:13 -0700 Subject: [PATCH 2/4] hover refactor and cancellation --- .../TextDocument/Handlers/HoverHandler.cs | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) 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), From ca3290aebd6feae1ec1771acb4abb33f6cc56564 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Tue, 31 Mar 2020 15:08:39 -0700 Subject: [PATCH 3/4] added lock for completionItem/resolve --- .../Handlers/CompletionHandler.cs | 52 ++++++++++++++----- 1 file changed, 39 insertions(+), 13 deletions(-) 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) From f06d868c89d3d56afadb86790bc85a5ead81002d Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Tue, 31 Mar 2020 15:17:51 -0700 Subject: [PATCH 4/4] rev to stable omnisharp version --- src/PowerShellEditorServices/PowerShellEditorServices.csproj | 4 ++-- .../PowerShellEditorServices.Test.E2E.csproj | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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/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 @@ - +