From 01392c13297b4a05565c7052536f73b32b8f05aa Mon Sep 17 00:00:00 2001 From: Kyle Kelley Date: Mon, 22 Jul 2024 14:30:21 -0700 Subject: [PATCH] repl: Enable jupyter by default, allow disabling (#14985) Enables the jupyter feature by default, which is shown only when we have a kernelspec or know that we (can) support it well (Python, Deno/TypeScript). Release Notes: - N/A --------- Co-authored-by: Marshall Bowers --- assets/settings/default.json | 9 +++++++ crates/editor/src/editor.rs | 2 +- crates/editor/src/editor_settings.rs | 23 ++++++++++++---- crates/repl/src/jupyter_settings.rs | 39 +--------------------------- 4 files changed, 29 insertions(+), 44 deletions(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index a2895ec950..c1dc82c63f 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -890,6 +890,15 @@ // } // } }, + // Jupyter settings + "jupyter": { + "enabled": true + // Specify the language name as the key and the kernel name as the value. + // "kernel_selections": { + // "python": "conda-base" + // "typescript": "deno" + // } + }, // Vim settings "vim": { "use_system_clipboard": "always", diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index c05d6bdc29..34f1143f89 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -1953,7 +1953,7 @@ impl Editor { EditorMode::Full => "full", }; - if EditorSettings::get_global(cx).jupyter.enabled { + if EditorSettings::jupyter_enabled(cx) { key_context.add("jupyter"); } diff --git a/crates/editor/src/editor_settings.rs b/crates/editor/src/editor_settings.rs index 9fe91f2ce0..0b570e6466 100644 --- a/crates/editor/src/editor_settings.rs +++ b/crates/editor/src/editor_settings.rs @@ -28,7 +28,6 @@ pub struct EditorSettings { pub search_wrap: bool, pub auto_signature_help: bool, pub show_signature_help_after_edits: bool, - #[serde(default)] pub jupyter: Jupyter, } @@ -69,15 +68,23 @@ pub enum DoubleClickInMultibuffer { Open, } -#[derive(Default, Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] -#[serde(rename_all = "snake_case")] +#[derive(Debug, Clone, Deserialize)] pub struct Jupyter { /// Whether the Jupyter feature is enabled. /// - /// Default: `false` + /// Default: true pub enabled: bool, } +#[derive(Default, Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub struct JupyterContent { + /// Whether the Jupyter feature is enabled. + /// + /// Default: true + pub enabled: Option, +} + #[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)] pub struct Toolbar { pub breadcrumbs: bool, @@ -247,7 +254,7 @@ pub struct EditorSettingsContent { pub show_signature_help_after_edits: Option, /// Jupyter REPL settings. - pub jupyter: Option, + pub jupyter: Option, } // Toolbar related settings @@ -318,6 +325,12 @@ pub struct GutterContent { pub folds: Option, } +impl EditorSettings { + pub fn jupyter_enabled(cx: &AppContext) -> bool { + EditorSettings::get_global(cx).jupyter.enabled + } +} + impl Settings for EditorSettings { const KEY: Option<&'static str> = None; diff --git a/crates/repl/src/jupyter_settings.rs b/crates/repl/src/jupyter_settings.rs index 3875c764a7..aefef6cec5 100644 --- a/crates/repl/src/jupyter_settings.rs +++ b/crates/repl/src/jupyter_settings.rs @@ -16,7 +16,7 @@ impl JupyterSettings { // In order to avoid a circular dependency between `editor` and `repl` crates, // we put the `enable` flag on its settings. // This allows the editor to set up context for key bindings/actions. - EditorSettings::get_global(cx).jupyter.enabled + EditorSettings::jupyter_enabled(cx) } } @@ -61,40 +61,3 @@ impl Settings for JupyterSettings { Ok(settings) } } - -#[cfg(test)] -mod tests { - use gpui::{AppContext, UpdateGlobal}; - use settings::SettingsStore; - - use super::*; - - #[gpui::test] - fn test_deserialize_jupyter_settings(cx: &mut AppContext) { - let store = settings::SettingsStore::test(cx); - cx.set_global(store); - - EditorSettings::register(cx); - JupyterSettings::register(cx); - - assert_eq!(JupyterSettings::enabled(cx), false); - - // Setting a custom setting through user settings - SettingsStore::update_global(cx, |store, cx| { - store - .set_user_settings( - r#"{ - "jupyter": { - "enabled": true, - "dock": "left", - "default_width": 800.0 - } - }"#, - cx, - ) - .unwrap(); - }); - - assert_eq!(JupyterSettings::enabled(cx), true); - } -}