This PR adds the ability for extensions to provide certain language settings via the language `config.toml`. These settings are then merged in with the rest of the settings when the language is loaded from the extension. The language settings that are available are: - `tab_size` - `hard_tabs` - `soft_wrap` Additionally, for bundled languages we moved these settings out of the `settings/default.json` and into their respective `config.toml`s . For languages currently provided by extensions, we are leaving the values in the `settings/default.json` temporarily until all released versions of Zed are able to load these settings from the extension. --- Along the way we ended up refactoring the `Settings::load` method slightly, introducing a new `SettingsSources` struct to better convey where the settings are being loaded from. This makes it easier to load settings from specific locations/sets of locations in an explicit way. Release Notes: - N/A --------- Co-authored-by: Max <max@zed.dev> Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
33 lines
868 B
Rust
33 lines
868 B
Rust
use anyhow::Result;
|
|
use collections::HashMap;
|
|
use gpui::AppContext;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use settings::{Settings, SettingsSources};
|
|
use std::sync::Arc;
|
|
|
|
#[derive(Deserialize, Serialize, Debug, Default, Clone, JsonSchema)]
|
|
pub struct ExtensionSettings {
|
|
#[serde(default)]
|
|
pub auto_update_extensions: HashMap<Arc<str>, bool>,
|
|
}
|
|
|
|
impl ExtensionSettings {
|
|
pub fn should_auto_update(&self, extension_id: &str) -> bool {
|
|
self.auto_update_extensions
|
|
.get(extension_id)
|
|
.copied()
|
|
.unwrap_or(true)
|
|
}
|
|
}
|
|
|
|
impl Settings for ExtensionSettings {
|
|
const KEY: Option<&'static str> = None;
|
|
|
|
type FileContent = Self;
|
|
|
|
fn load(sources: SettingsSources<Self::FileContent>, _cx: &mut AppContext) -> Result<Self> {
|
|
Ok(sources.user.cloned().unwrap_or_default())
|
|
}
|
|
}
|