From 4865ea2efc4a707afc41a434d276a0eb07d801cb Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Fri, 31 Mar 2023 10:58:18 -0700 Subject: [PATCH] Add handlers for LogMessage and statusNotification to copilot LSP --- crates/copilot/src/copilot.rs | 23 +++++++++++++++++++++++ crates/copilot/src/request.rs | 29 +++++++++++++++++++++++++++++ crates/lsp/src/lsp.rs | 2 +- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/crates/copilot/src/copilot.rs b/crates/copilot/src/copilot.rs index af07fc3e42..ddc8dd4151 100644 --- a/crates/copilot/src/copilot.rs +++ b/crates/copilot/src/copilot.rs @@ -11,8 +11,10 @@ use gpui::{ Task, }; use language::{point_from_lsp, point_to_lsp, Anchor, Bias, Buffer, BufferSnapshot, ToPointUtf16}; +use log::{debug, error, info, warn}; use lsp::LanguageServer; use node_runtime::NodeRuntime; +use request::{LogMessage, StatusNotification}; use settings::Settings; use smol::{fs, io::BufReader, stream::StreamExt}; use std::{ @@ -241,6 +243,27 @@ impl Copilot { local_checks_only: false, }) .await?; + + server + .on_notification::(|params, _cx| { + match params.level { + // Copilot is pretty agressive about logging + 0 => debug!("copilot: {}", params.message), + 1 => debug!("copilot: {}", params.message), + _ => error!("copilot: {}", params.message), + } + + debug!("copilot metadata: {}", params.metadata_str); + debug!("copilot extra: {:?}", params.extra); + }) + .detach(); + + server + .on_notification::( + |_, _| { /* Silence the notification */ }, + ) + .detach(); + anyhow::Ok((server, status)) }; diff --git a/crates/copilot/src/request.rs b/crates/copilot/src/request.rs index ea7f4577b6..e946c8f5cc 100644 --- a/crates/copilot/src/request.rs +++ b/crates/copilot/src/request.rs @@ -140,3 +140,32 @@ impl lsp::request::Request for GetCompletionsCycling { type Result = GetCompletionsResult; const METHOD: &'static str = "getCompletionsCycling"; } + +pub enum LogMessage {} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct LogMessageParams { + pub message: String, + pub level: u8, + pub metadata_str: String, + pub extra: Vec, +} + +impl lsp::notification::Notification for LogMessage { + type Params = LogMessageParams; + const METHOD: &'static str = "LogMessage"; +} + +pub enum StatusNotification {} + +#[derive(Debug, Serialize, Deserialize)] +pub struct StatusNotificationParams { + pub message: String, + pub status: String, // One of Normal/InProgress +} + +impl lsp::notification::Notification for StatusNotification { + type Params = StatusNotificationParams; + const METHOD: &'static str = "statusNotification"; +} diff --git a/crates/lsp/src/lsp.rs b/crates/lsp/src/lsp.rs index 514648cfa3..77d5997a27 100644 --- a/crates/lsp/src/lsp.rs +++ b/crates/lsp/src/lsp.rs @@ -475,7 +475,7 @@ impl LanguageServer { let prev_handler = self.notification_handlers.lock().insert( method, Box::new(move |_, params, cx| { - if let Some(params) = serde_json::from_str(params).log_err() { + if let Some(params) = serde_json::from_str(dbg!(params)).log_err() { f(params, cx); } }),