Detailed changes
@@ -1879,7 +1879,8 @@
},
// Jupyter settings
"jupyter": {
- "enabled": true
+ "enabled": true,
+ "kernel_selections": {}
// Specify the language name as the key and the kernel name as the value.
// "kernel_selections": {
// "python": "conda-base"
@@ -1,10 +1,8 @@
-use std::collections::HashMap;
+use collections::HashMap;
use editor::EditorSettings;
use gpui::App;
-use schemars::JsonSchema;
-use serde::{Deserialize, Serialize};
-use settings::{Settings, SettingsKey, SettingsSources, SettingsUi};
+use settings::Settings;
#[derive(Debug, Default)]
pub struct JupyterSettings {
@@ -20,45 +18,20 @@ impl JupyterSettings {
}
}
-#[derive(Clone, Serialize, Deserialize, JsonSchema, Debug, SettingsUi, SettingsKey)]
-#[settings_key(key = "jupyter")]
-pub struct JupyterSettingsContent {
- /// Default kernels to select for each language.
- ///
- /// Default: `{}`
- pub kernel_selections: Option<HashMap<String, String>>,
-}
-
-impl Default for JupyterSettingsContent {
- fn default() -> Self {
- JupyterSettingsContent {
- kernel_selections: Some(HashMap::new()),
+impl Settings for JupyterSettings {
+ fn from_defaults(content: &settings::SettingsContent, _cx: &mut App) -> Self {
+ let jupyter = content.editor.jupyter.clone().unwrap();
+ Self {
+ kernel_selections: jupyter.kernel_selections.unwrap_or_default(),
}
}
-}
-impl Settings for JupyterSettings {
- type FileContent = JupyterSettingsContent;
-
- fn load(
- sources: SettingsSources<Self::FileContent>,
- _cx: &mut gpui::App,
- ) -> anyhow::Result<Self>
- where
- Self: Sized,
- {
- let mut settings = JupyterSettings::default();
-
- for value in sources.defaults_and_customizations() {
- if let Some(source) = &value.kernel_selections {
- for (k, v) in source {
- settings.kernel_selections.insert(k.clone(), v.clone());
- }
- }
+ fn refine(&mut self, content: &settings::SettingsContent, _cx: &mut App) {
+ let Some(jupyter) = content.editor.jupyter.as_ref() else {
+ return;
+ };
+ if let Some(kernel_selections) = jupyter.kernel_selections.clone() {
+ self.kernel_selections.extend(kernel_selections)
}
-
- Ok(settings)
}
-
- fn import_from_vscode(_vscode: &settings::VsCodeSettings, _current: &mut Self::FileContent) {}
}
@@ -1,55 +1,38 @@
use gpui::App;
-use schemars::JsonSchema;
-use serde::{Deserialize, Serialize};
-use settings::{Settings, SettingsKey, SettingsSources, SettingsUi};
+use settings::Settings;
+use util::MergeFrom;
/// Settings for configuring REPL display and behavior.
-#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, SettingsUi, SettingsKey)]
-#[settings_key(key = "repl")]
+#[derive(Clone, Debug)]
pub struct ReplSettings {
/// Maximum number of lines to keep in REPL's scrollback buffer.
/// Clamped with [4, 256] range.
///
/// Default: 32
- #[serde(default = "default_max_lines")]
pub max_lines: usize,
/// Maximum number of columns to keep in REPL's scrollback buffer.
/// Clamped with [20, 512] range.
///
/// Default: 128
- #[serde(default = "default_max_columns")]
pub max_columns: usize,
}
impl Settings for ReplSettings {
- type FileContent = Self;
+ fn from_defaults(content: &settings::SettingsContent, _cx: &mut App) -> Self {
+ let repl = content.repl.as_ref().unwrap();
- fn load(sources: SettingsSources<Self::FileContent>, _cx: &mut App) -> anyhow::Result<Self> {
- let mut settings: ReplSettings = sources.json_merge()?;
- settings.max_columns = settings.max_columns.clamp(20, 512);
- settings.max_lines = settings.max_lines.clamp(4, 256);
- Ok(settings)
+ Self {
+ max_lines: repl.max_lines.unwrap(),
+ max_columns: repl.max_columns.unwrap(),
+ }
}
- fn import_from_vscode(_vscode: &settings::VsCodeSettings, _current: &mut Self::FileContent) {}
-}
-
-const DEFAULT_NUM_LINES: usize = 32;
-const DEFAULT_NUM_COLUMNS: usize = 128;
-
-fn default_max_lines() -> usize {
- DEFAULT_NUM_LINES
-}
-
-fn default_max_columns() -> usize {
- DEFAULT_NUM_COLUMNS
-}
+ fn refine(&mut self, content: &settings::SettingsContent, _cx: &mut App) {
+ let Some(repl) = content.repl.as_ref() else {
+ return;
+ };
-impl Default for ReplSettings {
- fn default() -> Self {
- ReplSettings {
- max_lines: DEFAULT_NUM_LINES,
- max_columns: DEFAULT_NUM_COLUMNS,
- }
+ self.max_columns.merge_from(&repl.max_columns);
+ self.max_lines.merge_from(&repl.max_lines);
}
}
@@ -88,6 +88,8 @@ pub struct SettingsContent {
/// The settings for the image viewer.
pub image_viewer: Option<ImageViewerSettingsContent>,
+ pub repl: Option<ReplSettingsContent>,
+
/// Whether or not to enable Helix mode.
///
/// Default: false
@@ -766,3 +768,18 @@ pub struct SshPortForwardOption {
pub remote_host: Option<String>,
pub remote_port: u16,
}
+
+/// Settings for configuring REPL display and behavior.
+#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, JsonSchema)]
+pub struct ReplSettingsContent {
+ /// Maximum number of lines to keep in REPL's scrollback buffer.
+ /// Clamped with [4, 256] range.
+ ///
+ /// Default: 32
+ pub max_lines: Option<usize>,
+ /// Maximum number of columns to keep in REPL's scrollback buffer.
+ /// Clamped with [20, 512] range.
+ ///
+ /// Default: 128
+ pub max_columns: Option<usize>,
+}
@@ -1,5 +1,6 @@
use std::num;
+use collections::HashMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
@@ -541,6 +542,11 @@ pub struct JupyterContent {
///
/// Default: true
pub enabled: Option<bool>,
+
+ /// Default kernels to select for each language.
+ ///
+ /// Default: `{}`
+ pub kernel_selections: Option<HashMap<String, String>>,
}
/// Whether to allow drag and drop text selection in buffer.
@@ -694,7 +694,7 @@ mod test {
let mut cx = VimTestContext::new(cx, true).await;
cx.update_global(|store: &mut SettingsStore, cx| {
- store.update_user_settings::<EditorSettings>(cx, |s| s.search_wrap = Some(false));
+ store.update_user_settings(cx, |s| s.editor.search_wrap = Some(false));
});
cx.set_state("ˇhi\nhigh\nhi\n", Mode::Normal);
@@ -815,7 +815,7 @@ mod test {
// check that searching with unable search wrap
cx.update_global(|store: &mut SettingsStore, cx| {
- store.update_user_settings::<EditorSettings>(cx, |s| s.search_wrap = Some(false));
+ store.update_user_settings(cx, |s| s.editor.search_wrap = Some(false));
});
cx.set_state("aa\nbˇb\ncc\ncc\ncc\n", Mode::Normal);
cx.simulate_keystrokes("/ c c enter");