Closes #ISSUE Moves the settings content definitions into their own crate, so that they are compiled+cached separately from settings, primarily to avoid recompiles due to changes in gpui. In that vain many gpui types such as font weight/features, and `SharedString` were replaced in the content crate, either with `*Content` types for font/modifier things, or `String`/`Arc<str>` for `SharedString`. To make the conversions easy a new trait method in the settings crate named `IntoGpui::into_gpui` allows for `into()` like conversions to the gpui types in `from_settings` impls. Release Notes: - N/A --------- Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
46 lines
1.5 KiB
Rust
46 lines
1.5 KiB
Rust
use std::sync::Arc;
|
|
|
|
use collections::HashMap;
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use settings_macros::{MergeFrom, with_fallible_options};
|
|
|
|
#[with_fallible_options]
|
|
#[derive(Debug, PartialEq, Clone, Default, Serialize, Deserialize, JsonSchema, MergeFrom)]
|
|
pub struct ExtensionSettingsContent {
|
|
/// The extensions that should be automatically installed by Zed.
|
|
///
|
|
/// This is used to make functionality provided by extensions (e.g., language support)
|
|
/// available out-of-the-box.
|
|
///
|
|
/// Default: { "html": true }
|
|
#[serde(default)]
|
|
pub auto_install_extensions: HashMap<Arc<str>, bool>,
|
|
#[serde(default)]
|
|
pub auto_update_extensions: HashMap<Arc<str>, bool>,
|
|
/// The capabilities granted to extensions.
|
|
pub granted_extension_capabilities: Option<Vec<ExtensionCapabilityContent>>,
|
|
}
|
|
|
|
/// A capability for an extension.
|
|
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, JsonSchema)]
|
|
#[serde(tag = "kind", rename_all = "snake_case")]
|
|
pub enum ExtensionCapabilityContent {
|
|
#[serde(rename = "process:exec")]
|
|
ProcessExec {
|
|
/// The command to execute.
|
|
command: String,
|
|
/// The arguments to pass to the command. Use `*` for a single wildcard argument.
|
|
/// If the last element is `**`, then any trailing arguments are allowed.
|
|
args: Vec<String>,
|
|
},
|
|
DownloadFile {
|
|
host: String,
|
|
path: Vec<String>,
|
|
},
|
|
#[serde(rename = "npm:install")]
|
|
NpmInstallPackage {
|
|
package: String,
|
|
},
|
|
}
|