diff --git a/Cargo.lock b/Cargo.lock index 2576220b81..37633f6def 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2210,6 +2210,9 @@ dependencies = [ "lsp", "postage", "project", + "schemars", + "serde", + "serde_derive", "serde_json", "settings", "smallvec", diff --git a/assets/settings/default.json b/assets/settings/default.json index 1f8068d109..d46c758de3 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -227,6 +227,11 @@ }, // Automatically update Zed "auto_update": true, + // Diagnostics configuration. + "diagnostics": { + // Whether to show warnings or not by default. + "include_warnings": true + }, // Git gutter behavior configuration. "git": { // Control whether the git gutter is shown. May take 2 values: diff --git a/crates/diagnostics/Cargo.toml b/crates/diagnostics/Cargo.toml index 4e898cca0a..b0b2450f05 100644 --- a/crates/diagnostics/Cargo.toml +++ b/crates/diagnostics/Cargo.toml @@ -21,6 +21,9 @@ util = { path = "../util" } workspace = { path = "../workspace" } anyhow.workspace = true +schemars.workspace = true +serde.workspace = true +serde_derive.workspace = true smallvec.workspace = true postage.workspace = true diff --git a/crates/diagnostics/src/diagnostics.rs b/crates/diagnostics/src/diagnostics.rs index 4a2d8cbb78..899bd2a1af 100644 --- a/crates/diagnostics/src/diagnostics.rs +++ b/crates/diagnostics/src/diagnostics.rs @@ -1,4 +1,5 @@ pub mod items; +mod project_diagnostics_settings; mod toolbar_controls; use anyhow::Result; @@ -20,6 +21,7 @@ use language::{ }; use lsp::LanguageServerId; use project::{DiagnosticSummary, Project, ProjectPath}; +use project_diagnostics_settings::ProjectDiagnosticsSettings; use serde_json::json; use smallvec::SmallVec; use std::{ @@ -43,6 +45,7 @@ actions!(diagnostics, [Deploy, ToggleWarnings]); const CONTEXT_LINE_COUNT: u32 = 1; pub fn init(cx: &mut AppContext) { + settings::register::(cx); cx.add_action(ProjectDiagnosticsEditor::deploy); cx.add_action(ProjectDiagnosticsEditor::toggle_warnings); items::init(cx); @@ -191,7 +194,7 @@ impl ProjectDiagnosticsEditor { editor, path_states: Default::default(), paths_to_update, - include_warnings: true, + include_warnings: settings::get::(cx).include_warnings, }; this.update_excerpts(None, cx); this diff --git a/crates/diagnostics/src/project_diagnostics_settings.rs b/crates/diagnostics/src/project_diagnostics_settings.rs new file mode 100644 index 0000000000..1592d3c7f0 --- /dev/null +++ b/crates/diagnostics/src/project_diagnostics_settings.rs @@ -0,0 +1,28 @@ +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +#[derive(Deserialize, Debug)] +pub struct ProjectDiagnosticsSettings { + pub include_warnings: bool, +} + +#[derive(Clone, Default, Serialize, Deserialize, JsonSchema, Debug)] +pub struct ProjectDiagnosticsSettingsContent { + include_warnings: Option, +} + +impl settings::Setting for ProjectDiagnosticsSettings { + const KEY: Option<&'static str> = Some("diagnostics"); + type FileContent = ProjectDiagnosticsSettingsContent; + + fn load( + default_value: &Self::FileContent, + user_values: &[&Self::FileContent], + _cx: &gpui::AppContext, + ) -> anyhow::Result + where + Self: Sized, + { + Self::load_via_json_merge(default_value, user_values) + } +}