Introduce a new `include_warnings` setting under `diagnostics`

Antonio Scandurra created

Change summary

Cargo.lock                                             |  3 +
assets/settings/default.json                           |  5 ++
crates/diagnostics/Cargo.toml                          |  3 +
crates/diagnostics/src/diagnostics.rs                  |  5 +
crates/diagnostics/src/project_diagnostics_settings.rs | 28 ++++++++++++
5 files changed, 43 insertions(+), 1 deletion(-)

Detailed changes

Cargo.lock 🔗

@@ -2210,6 +2210,9 @@ dependencies = [
  "lsp",
  "postage",
  "project",
+ "schemars",
+ "serde",
+ "serde_derive",
  "serde_json",
  "settings",
  "smallvec",

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:

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
 

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::<ProjectDiagnosticsSettings>(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::<ProjectDiagnosticsSettings>(cx).include_warnings,
         };
         this.update_excerpts(None, cx);
         this

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<bool>,
+}
+
+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<Self>
+    where
+        Self: Sized,
+    {
+        Self::load_via_json_merge(default_value, user_values)
+    }
+}