diff --git a/src/PowerShellEditorServices.Protocol/LanguageServer/ExecutionStatusChangedEvent.cs b/src/PowerShellEditorServices.Protocol/LanguageServer/ExecutionStatusChangedEvent.cs new file mode 100644 index 000000000..5ac6eac6d --- /dev/null +++ b/src/PowerShellEditorServices.Protocol/LanguageServer/ExecutionStatusChangedEvent.cs @@ -0,0 +1,17 @@ +using Microsoft.PowerShell.EditorServices.Protocol.MessageProtocol; + +namespace Microsoft.PowerShell.EditorServices.Protocol.LanguageServer +{ + /// + /// Defines an event type for PowerShell context execution status changes (e.g. execution has completed) + /// + public class ExecutionStatusChangedEvent + { + /// + /// The notification type for execution status change events in the message protocol + /// + public static readonly + NotificationType Type = + NotificationType.Create("powerShell/executionStatusChanged"); + } +} diff --git a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs index 854812717..f551d4884 100644 --- a/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs +++ b/src/PowerShellEditorServices.Protocol/Server/LanguageServer.cs @@ -56,7 +56,9 @@ public LanguageServer( { this.Logger = logger; this.editorSession = editorSession; + // 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; // Attach to ExtensionService events this.editorSession.ExtensionService.CommandAdded += ExtensionService_ExtensionAdded; @@ -1273,6 +1275,18 @@ await this.messageSender.SendEvent( new Protocol.LanguageServer.RunspaceDetails(e.NewRunspace)); } + /// + /// Event hook on the PowerShell context to listen for changes in script execution status + /// + /// the PowerShell context sending the execution event + /// details of the execution status change + private async void PowerShellContext_ExecutionStatusChanged(object sender, ExecutionStatusChangedEventArgs e) + { + await this.messageSender.SendEvent( + ExecutionStatusChangedEvent.Type, + e); + } + private async void ExtensionService_ExtensionAdded(object sender, EditorCommand e) { await this.messageSender.SendEvent(