public async Task HandleAsync()

in src/Engines/CompleteRequestHandler.cs [41:97]


        public async Task HandleAsync(Message message)
        {
            await engine.Initialized;

            var request = message.Content as CompleteRequestContent;
            if (request == null)
            {
                logger.LogError("Expected completion result content, but got {Type} instead.", message.Content.GetType());
                return;
            }
            this.logger.LogDebug("Ask to complete code at cursor position {CursorPos}:\n{Code}", request.CursorPos, request.Code);

            shellServer.NotifyBusyStatus(message, ExecutionState.Busy);
            try
            {
                var completion = await engine.Complete(request.Code, request.CursorPos);
                // If we got a completion back from the engine that was anything
                // other than null, respond with it here. Note that unlike execute_request,
                // it's ok to just ignore a complete request that we don't know
                // how to handle.
                if (completion != null)
                {
                    this.shellServer.SendShellMessage(
                        new Message
                        {
                            Content = new CompleteReplyContent
                            {
                                CompleteStatus = completion.Value.Status,
                                Matches = completion.Value.Matches.ToList(),
                                CursorStart = completion.Value.CursorStart ?? request.CursorPos,
                                CursorEnd = completion.Value.CursorEnd ?? request.CursorPos
                            },
                            Header = new MessageHeader
                            {
                                MessageType = "complete_reply"
                            }
                        }
                        .AsReplyTo(message)
                    );
                }
                return;
            }
            catch (TaskCanceledException tce)
            {
                this.logger?.LogDebug(tce, "Task cancelled.");
                return;
            }
            catch (Exception e)
            {
                this.logger?.LogError(e, "Unable to process CompleteRequest.");
                return;
            }
            finally
            {
                shellServer.NotifyBusyStatus(message, ExecutionState.Idle);
            }
        }