diff --git a/crates/assistant_settings/src/assistant_settings.rs b/crates/assistant_settings/src/assistant_settings.rs index bd345296e7..6333439b47 100644 --- a/crates/assistant_settings/src/assistant_settings.rs +++ b/crates/assistant_settings/src/assistant_settings.rs @@ -41,6 +41,7 @@ pub enum NotifyWhenAgentWaiting { #[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq)] #[serde(tag = "name", rename_all = "snake_case")] +#[schemars(deny_unknown_fields)] pub enum AssistantProviderContentV1 { #[serde(rename = "zed.dev")] ZedDotDev { default_model: Option }, @@ -543,6 +544,7 @@ impl AssistantSettingsContent { #[derive(Clone, Serialize, Deserialize, JsonSchema, Debug)] #[serde(tag = "version")] +#[schemars(deny_unknown_fields)] pub enum VersionedAssistantSettingsContent { #[serde(rename = "1")] V1(AssistantSettingsContentV1), @@ -576,6 +578,7 @@ impl Default for VersionedAssistantSettingsContent { } #[derive(Clone, Serialize, Deserialize, JsonSchema, Debug, Default)] +#[schemars(deny_unknown_fields)] pub struct AssistantSettingsContentV2 { /// Whether the Assistant is enabled. /// @@ -734,6 +737,7 @@ pub struct ContextServerPresetContent { } #[derive(Clone, Serialize, Deserialize, JsonSchema, Debug)] +#[schemars(deny_unknown_fields)] pub struct AssistantSettingsContentV1 { /// Whether the Assistant is enabled. /// @@ -763,6 +767,7 @@ pub struct AssistantSettingsContentV1 { } #[derive(Clone, Serialize, Deserialize, JsonSchema, Debug)] +#[schemars(deny_unknown_fields)] pub struct LegacyAssistantSettingsContent { /// Whether to show the assistant panel button in the status bar. /// diff --git a/crates/call/src/call_settings.rs b/crates/call/src/call_settings.rs index c8f51e0c1a..dd6999a170 100644 --- a/crates/call/src/call_settings.rs +++ b/crates/call/src/call_settings.rs @@ -12,6 +12,7 @@ pub struct CallSettings { /// Configuration of voice calls in Zed. #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)] +#[schemars(deny_unknown_fields)] pub struct CallSettingsContent { /// Whether the microphone should be muted when joining a channel or a call. /// diff --git a/crates/collab_ui/src/panel_settings.rs b/crates/collab_ui/src/panel_settings.rs index 652d9eb67f..497b403019 100644 --- a/crates/collab_ui/src/panel_settings.rs +++ b/crates/collab_ui/src/panel_settings.rs @@ -28,6 +28,7 @@ pub struct ChatPanelSettings { } #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)] +#[schemars(deny_unknown_fields)] pub struct ChatPanelSettingsContent { /// When to show the panel button in the status bar. /// @@ -51,6 +52,7 @@ pub struct NotificationPanelSettings { } #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)] +#[schemars(deny_unknown_fields)] pub struct PanelSettingsContent { /// Whether to show the panel button in the status bar. /// @@ -67,6 +69,7 @@ pub struct PanelSettingsContent { } #[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)] +#[schemars(deny_unknown_fields)] pub struct MessageEditorSettings { /// Whether to automatically replace emoji shortcodes with emoji characters. /// For example: typing `:wave:` gets replaced with `👋`. diff --git a/crates/editor/src/editor_settings.rs b/crates/editor/src/editor_settings.rs index 2827f85ebd..ca3c5121ef 100644 --- a/crates/editor/src/editor_settings.rs +++ b/crates/editor/src/editor_settings.rs @@ -332,6 +332,7 @@ pub enum SnippetSortOrder { } #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)] +#[schemars(deny_unknown_fields)] pub struct EditorSettingsContent { /// Whether the cursor blinks in the editor. /// diff --git a/crates/language/src/language_settings.rs b/crates/language/src/language_settings.rs index b5e1fcb4d8..3bcff8913a 100644 --- a/crates/language/src/language_settings.rs +++ b/crates/language/src/language_settings.rs @@ -381,6 +381,7 @@ fn default_lsp_fetch_timeout_ms() -> u64 { /// The settings for a particular language. #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)] +#[schemars(deny_unknown_fields)] pub struct LanguageSettingsContent { /// How many columns a tab should occupy. /// diff --git a/crates/project/src/project_settings.rs b/crates/project/src/project_settings.rs index 09cf16e9f1..51dcb6fb7e 100644 --- a/crates/project/src/project_settings.rs +++ b/crates/project/src/project_settings.rs @@ -36,6 +36,7 @@ use crate::{ }; #[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)] +#[schemars(deny_unknown_fields)] pub struct ProjectSettings { /// Configuration for language servers. /// diff --git a/crates/settings/src/settings_store.rs b/crates/settings/src/settings_store.rs index ff1d8089ba..73963431ed 100644 --- a/crates/settings/src/settings_store.rs +++ b/crates/settings/src/settings_store.rs @@ -1966,7 +1966,8 @@ mod tests { } #[derive(Default, Clone, Serialize, Deserialize, JsonSchema)] - struct UserSettingsJson { + #[schemars(deny_unknown_fields)] + struct UserSettingsContent { name: Option, age: Option, staff: Option, @@ -1974,7 +1975,7 @@ mod tests { impl Settings for UserSettings { const KEY: Option<&'static str> = Some("user"); - type FileContent = UserSettingsJson; + type FileContent = UserSettingsContent; fn load(sources: SettingsSources, _: &mut App) -> Result { sources.json_merge() @@ -2008,6 +2009,7 @@ mod tests { } #[derive(Clone, Default, Serialize, Deserialize, JsonSchema)] + #[schemars(deny_unknown_fields)] struct MultiKeySettingsJson { key1: Option, key2: Option, @@ -2046,6 +2048,7 @@ mod tests { } #[derive(Clone, Default, Debug, Serialize, Deserialize, JsonSchema)] + #[schemars(deny_unknown_fields)] struct JournalSettingsJson { pub path: Option, pub hour_format: Option, @@ -2076,6 +2079,7 @@ mod tests { } #[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema)] + #[schemars(deny_unknown_fields)] struct LanguageSettingEntry { language_setting_1: Option, language_setting_2: Option,