From d42a1423486e3f747f73db754ae5c32740b95ca1 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Fri, 4 May 2018 23:49:04 -0400 Subject: [PATCH 1/5] close stray processes on exit --- .../PowerShellEditorServices.psm1 | 2 ++ .../EditorServicesHost.cs | 4 ++-- .../Server/LanguageServer.cs | 14 +++++++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/module/PowerShellEditorServices/PowerShellEditorServices.psm1 b/module/PowerShellEditorServices/PowerShellEditorServices.psm1 index 46b20884d..fb7c3b943 100644 --- a/module/PowerShellEditorServices/PowerShellEditorServices.psm1 +++ b/module/PowerShellEditorServices/PowerShellEditorServices.psm1 @@ -124,6 +124,8 @@ function Start-EditorServicesHost { if ($DebugServiceOnly.IsPresent) { $editorServicesHost.StartDebugService($debugServiceConfig, $profilePaths, $false); + } elseif ($Stdio.IsPresent) { + $editorServicesHost.StartLanguageService($languageServiceConfig, $profilePaths); } else { $editorServicesHost.StartLanguageService($languageServiceConfig, $profilePaths); $editorServicesHost.StartDebugService($debugServiceConfig, $profilePaths, $true); diff --git a/src/PowerShellEditorServices.Host/EditorServicesHost.cs b/src/PowerShellEditorServices.Host/EditorServicesHost.cs index cb7a0162b..758095db2 100644 --- a/src/PowerShellEditorServices.Host/EditorServicesHost.cs +++ b/src/PowerShellEditorServices.Host/EditorServicesHost.cs @@ -70,7 +70,7 @@ public class EditorServicesHost private IServerListener languageServiceListener; private IServerListener debugServiceListener; - private TaskCompletionSource serverCompletedTask; + private TaskCompletionSource serverCompletedTask = new TaskCompletionSource(); #endregion @@ -226,6 +226,7 @@ private async void OnLanguageServiceClientConnect( this.editorSession, messageDispatcher, protocolEndpoint, + this.serverCompletedTask, this.logger); await this.editorSession.PowerShellContext.ImportCommandsModule( @@ -348,7 +349,6 @@ public void StopServices() public void WaitForCompletion() { // TODO: We need a way to know when to complete this task! - this.serverCompletedTask = new TaskCompletionSource(); this.serverCompletedTask.Task.Wait(); } diff --git a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs index a31173457..69275ba01 100644 --- a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs +++ b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs @@ -40,22 +40,30 @@ public class LanguageServer private Dictionary> codeActionsPerFile = new Dictionary>(); + private TaskCompletionSource serverCompletedTask; + public IEditorOperations EditorOperations { get { return this.editorOperations; } } + /// + /// + /// + /// + /// /// /// Provides details about the host application. /// - public LanguageServer( - EditorSession editorSession, + public LanguageServer(EditorSession editorSession, IMessageHandlers messageHandlers, IMessageSender messageSender, + TaskCompletionSource serverCompletedTask, ILogger logger) { this.Logger = logger; this.editorSession = editorSession; + this.serverCompletedTask = serverCompletedTask; // Attach to the underlying PowerShell context to listen for changes in the runspace or execution status this.editorSession.PowerShellContext.RunspaceChanged += PowerShellContext_RunspaceChanged; this.editorSession.PowerShellContext.ExecutionStatusChanged += PowerShellContext_ExecutionStatusChanged; @@ -146,6 +154,7 @@ protected Task Stop() Logger.Write(LogLevel.Normal, "Language service is shutting down..."); // TODO: Raise an event so that the host knows to shut down + this.serverCompletedTask.SetResult(true); return Task.FromResult(true); } @@ -156,7 +165,6 @@ private async Task HandleShutdownRequest( RequestContext requestContext) { // Allow the implementor to shut down gracefully - await this.Stop(); await requestContext.SendResult(new object()); } From f2a1e2e2393967803c2dd70cb8c54af1048504e7 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Sat, 5 May 2018 00:03:46 -0400 Subject: [PATCH 2/5] revert only starting language service --- module/PowerShellEditorServices/PowerShellEditorServices.psm1 | 2 -- 1 file changed, 2 deletions(-) diff --git a/module/PowerShellEditorServices/PowerShellEditorServices.psm1 b/module/PowerShellEditorServices/PowerShellEditorServices.psm1 index fb7c3b943..46b20884d 100644 --- a/module/PowerShellEditorServices/PowerShellEditorServices.psm1 +++ b/module/PowerShellEditorServices/PowerShellEditorServices.psm1 @@ -124,8 +124,6 @@ function Start-EditorServicesHost { if ($DebugServiceOnly.IsPresent) { $editorServicesHost.StartDebugService($debugServiceConfig, $profilePaths, $false); - } elseif ($Stdio.IsPresent) { - $editorServicesHost.StartLanguageService($languageServiceConfig, $profilePaths); } else { $editorServicesHost.StartLanguageService($languageServiceConfig, $profilePaths); $editorServicesHost.StartDebugService($debugServiceConfig, $profilePaths, $true); From 2ce3349a12738d3594da0e4953bf1106cf271af4 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Sat, 5 May 2018 00:13:11 -0400 Subject: [PATCH 3/5] fixed up some comments --- .../Server/LanguageServer.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs index 69275ba01..3d2257a65 100644 --- a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs +++ b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs @@ -47,15 +47,16 @@ public IEditorOperations EditorOperations get { return this.editorOperations; } } - /// - /// - /// - /// - /// - /// - /// Provides details about the host application. - /// - public LanguageServer(EditorSession editorSession, + /// + /// Initializes a new language server that is used for handing language server protocol messages + /// + /// The editor session that handles the PowerShell runspace + /// An object that manages all of the message handlers + /// The message sender + /// A TaskCompletionSource that will be completed to stop the running process + /// The logger + public LanguageServer( + EditorSession editorSession, IMessageHandlers messageHandlers, IMessageSender messageSender, TaskCompletionSource serverCompletedTask, From e2c704a34da53bb57aedf4ece3948c06644a37c7 Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Sat, 5 May 2018 07:11:43 -0400 Subject: [PATCH 4/5] remove TODO --- .../Server/LanguageServer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs index 3d2257a65..6c4895406 100644 --- a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs +++ b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs @@ -48,7 +48,7 @@ public IEditorOperations EditorOperations } /// - /// Initializes a new language server that is used for handing language server protocol messages + /// Initializes a new language server that is used for handing language server protocol messages /// /// The editor session that handles the PowerShell runspace /// An object that manages all of the message handlers @@ -154,7 +154,7 @@ protected Task Stop() { Logger.Write(LogLevel.Normal, "Language service is shutting down..."); - // TODO: Raise an event so that the host knows to shut down + // complete the task so that the host knows to shut down this.serverCompletedTask.SetResult(true); return Task.FromResult(true); From 56d1a84b4e5a298b977a533eac2f22a9894ceebc Mon Sep 17 00:00:00 2001 From: Tyler Leonhardt Date: Sat, 5 May 2018 07:29:08 -0400 Subject: [PATCH 5/5] alphasort props, move initialization to constructor --- .../EditorServicesHost.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/PowerShellEditorServices.Host/EditorServicesHost.cs b/src/PowerShellEditorServices.Host/EditorServicesHost.cs index 758095db2..fa17d4e16 100644 --- a/src/PowerShellEditorServices.Host/EditorServicesHost.cs +++ b/src/PowerShellEditorServices.Host/EditorServicesHost.cs @@ -56,31 +56,30 @@ public class EditorServicesHost { #region Private Fields - private ILogger logger; - private bool enableConsoleRepl; - private HostDetails hostDetails; - private ProfilePaths profilePaths; + private string[] additionalModules; private string bundledModulesPath; private DebugAdapter debugAdapter; - private string[] additionalModules; private EditorSession editorSession; + private bool enableConsoleRepl; private HashSet featureFlags; + private HostDetails hostDetails; private LanguageServer languageServer; + private ILogger logger; + private ProfilePaths profilePaths; + private TaskCompletionSource serverCompletedTask; private IServerListener languageServiceListener; private IServerListener debugServiceListener; - private TaskCompletionSource serverCompletedTask = new TaskCompletionSource(); - #endregion #region Properties - public EditorServicesHostStatus Status { get; private set; } + public int DebugServicePort { get; private set; } public int LanguageServicePort { get; private set; } - public int DebugServicePort { get; private set; } + public EditorServicesHostStatus Status { get; private set; } #endregion @@ -108,6 +107,7 @@ public EditorServicesHost( this.bundledModulesPath = bundledModulesPath; this.additionalModules = additionalModules ?? new string[0]; this.featureFlags = new HashSet(featureFlags ?? new string[0]); + this.serverCompletedTask = new TaskCompletionSource(); #if DEBUG if (waitForDebugger) @@ -479,4 +479,4 @@ private IServerListener CreateServiceListener(MessageProtocolType protocol, Edit #endregion } -} \ No newline at end of file +}