telemetry: Consider the entire chain of config sources when merging (#31039)

Global settings were implemented in #30444, but `Settings`
implementations need to consider that source for it to be useful. This
PR does just that for `TelemetrySettings` so these can be controlled via
global settings.

Release Notes:

- N/A
This commit is contained in:
Andres Suarez 2025-05-20 13:21:49 -04:00 committed by GitHub
parent eb318c1626
commit a0ec9cf383
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -490,14 +490,14 @@ impl<T: 'static> Drop for PendingEntitySubscription<T> {
} }
} }
#[derive(Copy, Clone)] #[derive(Copy, Clone, Deserialize, Debug)]
pub struct TelemetrySettings { pub struct TelemetrySettings {
pub diagnostics: bool, pub diagnostics: bool,
pub metrics: bool, pub metrics: bool,
} }
/// Control what info is collected by Zed. /// Control what info is collected by Zed.
#[derive(Default, Clone, Serialize, Deserialize, JsonSchema)] #[derive(Default, Clone, Serialize, Deserialize, JsonSchema, Debug)]
pub struct TelemetrySettingsContent { pub struct TelemetrySettingsContent {
/// Send debug info like crash reports. /// Send debug info like crash reports.
/// ///
@ -515,25 +515,7 @@ impl settings::Settings for TelemetrySettings {
type FileContent = TelemetrySettingsContent; type FileContent = TelemetrySettingsContent;
fn load(sources: SettingsSources<Self::FileContent>, _: &mut App) -> Result<Self> { fn load(sources: SettingsSources<Self::FileContent>, _: &mut App) -> Result<Self> {
Ok(Self { sources.json_merge()
diagnostics: sources
.user
.as_ref()
.or(sources.server.as_ref())
.and_then(|v| v.diagnostics)
.unwrap_or(
sources
.default
.diagnostics
.ok_or_else(Self::missing_default)?,
),
metrics: sources
.user
.as_ref()
.or(sources.server.as_ref())
.and_then(|v| v.metrics)
.unwrap_or(sources.default.metrics.ok_or_else(Self::missing_default)?),
})
} }
fn import_from_vscode(vscode: &settings::VsCodeSettings, current: &mut Self::FileContent) { fn import_from_vscode(vscode: &settings::VsCodeSettings, current: &mut Self::FileContent) {