Merge pull request #2356 from zed-industries/copilot-on-preview

Antonio Scandurra created

Disable Copilot entirely for stable releases

Change summary

Cargo.lock                    |  2 -
crates/copilot/Cargo.toml     |  4 --
crates/copilot/src/copilot.rs | 61 +++++++-----------------------------
crates/util/src/channel.rs    |  8 +++-
crates/zed/src/main.rs        |  2 
5 files changed, 20 insertions(+), 57 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -1340,7 +1340,6 @@ dependencies = [
  "anyhow",
  "async-compression",
  "async-tar",
- "client",
  "collections",
  "context_menu",
  "futures 0.3.25",
@@ -1353,7 +1352,6 @@ dependencies = [
  "serde_derive",
  "settings",
  "smol",
- "staff_mode",
  "theme",
  "util",
  "workspace",

crates/copilot/Cargo.toml 🔗

@@ -10,7 +10,6 @@ doctest = false
 
 [features]
 test-support = [
-    "client/test-support",
     "collections/test-support",
     "gpui/test-support",
     "language/test-support",
@@ -26,11 +25,9 @@ gpui = { path = "../gpui" }
 language = { path = "../language" }
 settings = { path = "../settings" }
 theme = { path = "../theme" }
-staff_mode = { path = "../staff_mode" }
 lsp = { path = "../lsp" }
 node_runtime = { path = "../node_runtime"}
 util = { path = "../util" }
-client = { path = "../client" }
 async-compression = { version = "0.3", features = ["gzip", "futures-bufread"] }
 async-tar = "0.4.2"
 anyhow = "1.0"
@@ -47,5 +44,4 @@ language = { path = "../language", features = ["test-support"] }
 settings = { path = "../settings", features = ["test-support"] }
 lsp = { path = "../lsp", features = ["test-support"] }
 util = { path = "../util", features = ["test-support"] }
-client = { path = "../client", features = ["test-support"] }
 workspace = { path = "../workspace", features = ["test-support"] }

crates/copilot/src/copilot.rs 🔗

@@ -4,7 +4,6 @@ mod sign_in;
 use anyhow::{anyhow, Context, Result};
 use async_compression::futures::bufread::GzipDecoder;
 use async_tar::Archive;
-use client::Client;
 use collections::HashMap;
 use futures::{future::Shared, Future, FutureExt, TryFutureExt};
 use gpui::{
@@ -18,8 +17,6 @@ use node_runtime::NodeRuntime;
 use request::{LogMessage, StatusNotification};
 use settings::Settings;
 use smol::{fs, io::BufReader, stream::StreamExt};
-use staff_mode::{not_staff_mode, staff_mode};
-
 use std::{
     ffi::OsString,
     ops::Range,
@@ -27,7 +24,8 @@ use std::{
     sync::Arc,
 };
 use util::{
-    fs::remove_matching, github::latest_github_release, http::HttpClient, paths, ResultExt,
+    channel::ReleaseChannel, fs::remove_matching, github::latest_github_release, http::HttpClient,
+    paths, ResultExt,
 };
 
 const COPILOT_AUTH_NAMESPACE: &'static str = "copilot_auth";
@@ -36,33 +34,23 @@ actions!(copilot_auth, [SignIn, SignOut]);
 const COPILOT_NAMESPACE: &'static str = "copilot";
 actions!(copilot, [NextSuggestion, PreviousSuggestion, Reinstall]);
 
-pub fn init(client: Arc<Client>, node_runtime: Arc<NodeRuntime>, cx: &mut MutableAppContext) {
-    staff_mode(cx, {
-        move |cx| {
-            cx.update_global::<collections::CommandPaletteFilter, _, _>(|filter, _cx| {
-                filter.filtered_namespaces.remove(COPILOT_NAMESPACE);
-                filter.filtered_namespaces.remove(COPILOT_AUTH_NAMESPACE);
-            });
-
-            let copilot = cx.add_model({
-                let node_runtime = node_runtime.clone();
-                let http = client.http_client().clone();
-                move |cx| Copilot::start(http, node_runtime, cx)
-            });
-            cx.set_global(copilot.clone());
-
-            observe_namespaces(cx, copilot);
-
-            sign_in::init(cx);
-        }
-    });
-    not_staff_mode(cx, |cx| {
+pub fn init(http: Arc<dyn HttpClient>, node_runtime: Arc<NodeRuntime>, cx: &mut MutableAppContext) {
+    // Disable Copilot for stable releases.
+    if *cx.global::<ReleaseChannel>() == ReleaseChannel::Stable {
         cx.update_global::<collections::CommandPaletteFilter, _, _>(|filter, _cx| {
             filter.filtered_namespaces.insert(COPILOT_NAMESPACE);
             filter.filtered_namespaces.insert(COPILOT_AUTH_NAMESPACE);
         });
+        return;
+    }
+
+    let copilot = cx.add_model({
+        let node_runtime = node_runtime.clone();
+        move |cx| Copilot::start(http, node_runtime, cx)
     });
+    cx.set_global(copilot.clone());
 
+    sign_in::init(cx);
     cx.add_global_action(|_: &SignIn, cx| {
         if let Some(copilot) = Copilot::global(cx) {
             copilot
@@ -87,29 +75,6 @@ pub fn init(client: Arc<Client>, node_runtime: Arc<NodeRuntime>, cx: &mut Mutabl
     });
 }
 
-fn observe_namespaces(cx: &mut MutableAppContext, copilot: ModelHandle<Copilot>) {
-    cx.observe(&copilot, |handle, cx| {
-        let status = handle.read(cx).status();
-        cx.update_global::<collections::CommandPaletteFilter, _, _>(
-            move |filter, _cx| match status {
-                Status::Disabled => {
-                    filter.filtered_namespaces.insert(COPILOT_NAMESPACE);
-                    filter.filtered_namespaces.insert(COPILOT_AUTH_NAMESPACE);
-                }
-                Status::Authorized => {
-                    filter.filtered_namespaces.remove(COPILOT_NAMESPACE);
-                    filter.filtered_namespaces.remove(COPILOT_AUTH_NAMESPACE);
-                }
-                _ => {
-                    filter.filtered_namespaces.insert(COPILOT_NAMESPACE);
-                    filter.filtered_namespaces.remove(COPILOT_AUTH_NAMESPACE);
-                }
-            },
-        );
-    })
-    .detach();
-}
-
 enum CopilotServer {
     Disabled,
     Starting {

crates/util/src/channel.rs 🔗

@@ -3,8 +3,12 @@ use std::env;
 use lazy_static::lazy_static;
 
 lazy_static! {
-    pub static ref RELEASE_CHANNEL_NAME: String = env::var("ZED_RELEASE_CHANNEL")
-        .unwrap_or_else(|_| include_str!("../../zed/RELEASE_CHANNEL").to_string());
+    pub static ref RELEASE_CHANNEL_NAME: String = if cfg!(debug_assertions) {
+        env::var("ZED_RELEASE_CHANNEL")
+            .unwrap_or_else(|_| include_str!("../../zed/RELEASE_CHANNEL").to_string())
+    } else {
+        include_str!("../../zed/RELEASE_CHANNEL").to_string()
+    };
     pub static ref RELEASE_CHANNEL: ReleaseChannel = match RELEASE_CHANNEL_NAME.as_str() {
         "dev" => ReleaseChannel::Dev,
         "preview" => ReleaseChannel::Preview,

crates/zed/src/main.rs 🔗

@@ -161,7 +161,7 @@ fn main() {
         terminal_view::init(cx);
         theme_testbench::init(cx);
         recent_projects::init(cx);
-        copilot::init(client.clone(), node_runtime, cx);
+        copilot::init(http.clone(), node_runtime, cx);
 
         cx.spawn(|cx| watch_themes(fs.clone(), themes.clone(), cx))
             .detach();