Merge pull request #2334 from zed-industries/quiet-copilot-loggin

Mikayla Maki created

Add handlers for LogMessage and statusNotification to copilot LSP

Change summary

crates/copilot/src/copilot.rs | 23 +++++++++++++++++++++++
crates/copilot/src/request.rs | 29 +++++++++++++++++++++++++++++
2 files changed, 52 insertions(+)

Detailed changes

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};
 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::<LogMessage, _>(|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::<StatusNotification, _>(
+                        |_, _| { /* Silence the notification */ },
+                    )
+                    .detach();
+
                 anyhow::Ok((server, status))
             };
 

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<String>,
+}
+
+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";
+}