1256 lines · 36.5 KB · Rust
RawDownload
mod agent;mod editor;mod extension;mod language;mod language_model;mod project;mod terminal;mod theme;mod workspace; pub use agent::*;pub use editor::*;pub use extension::*;pub use language::*;pub use language_model::*;pub use project::*;pub use terminal::*;pub use theme::*;pub use workspace::*; use collections::{HashMap, IndexMap};use gpui::{App, SharedString};use release_channel::ReleaseChannel;use schemars::JsonSchema;use serde::{Deserialize, Serialize};use serde_with::skip_serializing_none;use settings_macros::MergeFrom;use std::collections::BTreeSet;use std::env;use std::sync::Arc;pub use util::serde::default_true; use crate::{ActiveSettingsProfileName, merge_from}; #[skip_serializing_none]#[derive(Debug, PartialEq, Default, Clone, Serialize, Deserialize, JsonSchema, MergeFrom)]pub struct SettingsContent {    #[serde(flatten)]    pub project: ProjectSettingsContent,     #[serde(flatten)]    pub theme: Box<ThemeSettingsContent>,     #[serde(flatten)]    pub extension: ExtensionSettingsContent,     #[serde(flatten)]    pub workspace: WorkspaceSettingsContent,     #[serde(flatten)]    pub editor: EditorSettingsContent,     #[serde(flatten)]    pub remote: RemoteSettingsContent,     /// Settings related to the file finder.    pub file_finder: Option<FileFinderSettingsContent>,     pub git_panel: Option<GitPanelSettingsContent>,     pub tabs: Option<ItemSettingsContent>,    pub tab_bar: Option<TabBarSettingsContent>,    pub status_bar: Option<StatusBarSettingsContent>,     pub preview_tabs: Option<PreviewTabsSettingsContent>,     pub agent: Option<AgentSettingsContent>,    pub agent_servers: Option<AllAgentServersSettings>,     /// Configuration of audio in Zed.    pub audio: Option<AudioSettingsContent>,     /// Whether or not to automatically check for updates.    ///    /// Default: true    pub auto_update: Option<bool>,     /// This base keymap settings adjusts the default keybindings in Zed to be similar    /// to other common code editors. By default, Zed's keymap closely follows VSCode's    /// keymap, with minor adjustments, this corresponds to the "VSCode" setting.    ///    /// Default: VSCode    pub base_keymap: Option<BaseKeymapContent>,     /// Configuration for the collab panel visual settings.    pub collaboration_panel: Option<PanelSettingsContent>,     pub debugger: Option<DebuggerSettingsContent>,     /// Configuration for Diagnostics-related features.    pub diagnostics: Option<DiagnosticsSettingsContent>,     /// Configuration for Git-related features    pub git: Option<GitSettings>,     /// Common language server settings.    pub global_lsp_settings: Option<GlobalLspSettingsContent>,     /// The settings for the image viewer.    pub image_viewer: Option<ImageViewerSettingsContent>,     pub repl: Option<ReplSettingsContent>,     /// Whether or not to enable Helix mode.    ///    /// Default: false    pub helix_mode: Option<bool>,     pub journal: Option<JournalSettingsContent>,     /// A map of log scopes to the desired log level.    /// Useful for filtering out noisy logs or enabling more verbose logging.    ///    /// Example: {"log": {"client": "warn"}}    pub log: Option<HashMap<String, String>>,     pub line_indicator_format: Option<LineIndicatorFormat>,     pub language_models: Option<AllLanguageModelSettingsContent>,     pub outline_panel: Option<OutlinePanelSettingsContent>,     pub project_panel: Option<ProjectPanelSettingsContent>,     /// Configuration for the Message Editor    pub message_editor: Option<MessageEditorSettings>,     /// Configuration for Node-related features    pub node: Option<NodeBinarySettings>,     /// Configuration for the Notification Panel    pub notification_panel: Option<NotificationPanelSettingsContent>,     pub proxy: Option<String>,     /// The URL of the Zed server to connect to.    pub server_url: Option<String>,     /// Configuration for session-related features    pub session: Option<SessionSettingsContent>,    /// Control what info is collected by Zed.    pub telemetry: Option<TelemetrySettingsContent>,     /// Configuration of the terminal in Zed.    pub terminal: Option<TerminalSettingsContent>,     pub title_bar: Option<TitleBarSettingsContent>,     /// Whether or not to enable Vim mode.    ///    /// Default: false    pub vim_mode: Option<bool>,     // Settings related to calls in Zed    pub calls: Option<CallSettingsContent>,     /// Whether to disable all AI features in Zed.    ///    /// Default: false    pub disable_ai: Option<SaturatingBool>,     /// Settings related to Vim mode in Zed.    pub vim: Option<VimSettingsContent>,} impl SettingsContent {    pub fn languages_mut(&mut self) -> &mut HashMap<SharedString, LanguageSettingsContent> {        &mut self.project.all_languages.languages.0    }} #[skip_serializing_none]#[derive(Debug, Default, PartialEq, Clone, Serialize, Deserialize, JsonSchema, MergeFrom)]pub struct UserSettingsContent {    #[serde(flatten)]    pub content: Box<SettingsContent>,     pub dev: Option<Box<SettingsContent>>,    pub nightly: Option<Box<SettingsContent>>,    pub preview: Option<Box<SettingsContent>>,    pub stable: Option<Box<SettingsContent>>,     pub macos: Option<Box<SettingsContent>>,    pub windows: Option<Box<SettingsContent>>,    pub linux: Option<Box<SettingsContent>>,     #[serde(default)]    pub profiles: IndexMap<String, SettingsContent>,} pub struct ExtensionsSettingsContent {    pub all_languages: AllLanguageSettingsContent,} impl UserSettingsContent {    pub fn for_release_channel(&self) -> Option<&SettingsContent> {        match *release_channel::RELEASE_CHANNEL {            ReleaseChannel::Dev => self.dev.as_deref(),            ReleaseChannel::Nightly => self.nightly.as_deref(),            ReleaseChannel::Preview => self.preview.as_deref(),            ReleaseChannel::Stable => self.stable.as_deref(),        }    }     pub fn for_os(&self) -> Option<&SettingsContent> {        match env::consts::OS {            "macos" => self.macos.as_deref(),            "linux" => self.linux.as_deref(),            "windows" => self.windows.as_deref(),            _ => None,        }    }     pub fn for_profile(&self, cx: &App) -> Option<&SettingsContent> {        let Some(active_profile) = cx.try_global::<ActiveSettingsProfileName>() else {            return None;        };        self.profiles.get(&active_profile.0)    }} /// Base key bindings scheme. Base keymaps can be overridden with user keymaps.////// Default: VSCode#[derive(    Copy,    Clone,    Debug,    Serialize,    Deserialize,    JsonSchema,    MergeFrom,    PartialEq,    Eq,    Default,    strum::VariantArray,)]pub enum BaseKeymapContent {    #[default]    VSCode,    JetBrains,    SublimeText,    Atom,    TextMate,    Emacs,    Cursor,    None,} impl strum::VariantNames for BaseKeymapContent {    const VARIANTS: &'static [&'static str] = &[        "VSCode",        "JetBrains",        "Sublime Text",        "Atom",        "TextMate",        "Emacs",        "Cursor",        "None",    ];} #[skip_serializing_none]#[derive(Clone, PartialEq, Default, Serialize, Deserialize, JsonSchema, MergeFrom, Debug)]pub struct TitleBarSettingsContent {    /// Whether to show the branch icon beside branch switcher in the title bar.    ///    /// Default: false    pub show_branch_icon: Option<bool>,    /// Whether to show onboarding banners in the title bar.    ///    /// Default: true    pub show_onboarding_banner: Option<bool>,    /// Whether to show user avatar in the title bar.    ///    /// Default: true    pub show_user_picture: Option<bool>,    /// Whether to show the branch name button in the titlebar.    ///    /// Default: true    pub show_branch_name: Option<bool>,    /// Whether to show the project host and name in the titlebar.    ///    /// Default: true    pub show_project_items: Option<bool>,    /// Whether to show the sign in button in the title bar.    ///    /// Default: true    pub show_sign_in: Option<bool>,    /// Whether to show the menus in the title bar.    ///    /// Default: false    pub show_menus: Option<bool>,} /// Configuration of audio in Zed.#[skip_serializing_none]#[derive(Clone, PartialEq, Default, Serialize, Deserialize, JsonSchema, MergeFrom, Debug)]pub struct AudioSettingsContent {    /// Opt into the new audio system.    ///    /// You need to rejoin a call for this setting to apply    #[serde(rename = "experimental.rodio_audio")]    pub rodio_audio: Option<bool>, // default is false    /// Requires 'rodio_audio: true'    ///    /// Automatically increase or decrease you microphone's volume. This affects how    /// loud you sound to others.    ///    /// Recommended: off (default)    /// Microphones are too quite in zed, until everyone is on experimental    /// audio and has auto speaker volume on this will make you very loud    /// compared to other speakers.    #[serde(rename = "experimental.auto_microphone_volume")]    pub auto_microphone_volume: Option<bool>,    /// Requires 'rodio_audio: true'    ///    /// Automatically increate or decrease the volume of other call members.    /// This only affects how things sound for you.    #[serde(rename = "experimental.auto_speaker_volume")]    pub auto_speaker_volume: Option<bool>,    /// Requires 'rodio_audio: true'    ///    /// Remove background noises. Works great for typing, cars, dogs, AC. Does    /// not work well on music.    #[serde(rename = "experimental.denoise")]    pub denoise: Option<bool>,    /// Requires 'rodio_audio: true'    ///    /// Use audio parameters compatible with the previous versions of    /// experimental audio and non-experimental audio. When this is false you    /// will sound strange to anyone not on the latest experimental audio. In    /// the future we will migrate by setting this to false    ///    /// You need to rejoin a call for this setting to apply    #[serde(rename = "experimental.legacy_audio_compatible")]    pub legacy_audio_compatible: Option<bool>,} /// Control what info is collected by Zed.#[skip_serializing_none]#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Debug, MergeFrom)]pub struct TelemetrySettingsContent {    /// Send debug info like crash reports.    ///    /// Default: true    pub diagnostics: Option<bool>,    /// Send anonymized usage data like what languages you're using Zed with.    ///    /// Default: true    pub metrics: Option<bool>,} impl Default for TelemetrySettingsContent {    fn default() -> Self {        Self {            diagnostics: Some(true),            metrics: Some(true),        }    }} #[skip_serializing_none]#[derive(Default, Debug, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Clone, MergeFrom)]pub struct DebuggerSettingsContent {    /// Determines the stepping granularity.    ///    /// Default: line    pub stepping_granularity: Option<SteppingGranularity>,    /// Whether the breakpoints should be reused across Zed sessions.    ///    /// Default: true    pub save_breakpoints: Option<bool>,    /// Whether to show the debug button in the status bar.    ///    /// Default: true    pub button: Option<bool>,    /// Time in milliseconds until timeout error when connecting to a TCP debug adapter    ///    /// Default: 2000ms    pub timeout: Option<u64>,    /// Whether to log messages between active debug adapters and Zed    ///    /// Default: true    pub log_dap_communications: Option<bool>,    /// Whether to format dap messages in when adding them to debug adapter logger    ///    /// Default: true    pub format_dap_log_messages: Option<bool>,    /// The dock position of the debug panel    ///    /// Default: Bottom    pub dock: Option<DockPosition>,} /// The granularity of one 'step' in the stepping requests `next`, `stepIn`, `stepOut`, and `stepBack`.#[derive(    PartialEq,    Eq,    Debug,    Hash,    Clone,    Copy,    Deserialize,    Serialize,    JsonSchema,    MergeFrom,    strum::VariantArray,    strum::VariantNames,)]#[serde(rename_all = "snake_case")]pub enum SteppingGranularity {    /// The step should allow the program to run until the current statement has finished executing.    /// The meaning of a statement is determined by the adapter and it may be considered equivalent to a line.    /// For example 'for(int i = 0; i < 10; i++)' could be considered to have 3 statements 'int i = 0', 'i < 10', and 'i++'.    Statement,    /// The step should allow the program to run until the current source line has executed.    Line,    /// The step should allow one instruction to execute (e.g. one x86 instruction).    Instruction,} #[derive(    Copy,    Clone,    Debug,    Serialize,    Deserialize,    JsonSchema,    MergeFrom,    PartialEq,    Eq,    strum::VariantArray,    strum::VariantNames,)]#[serde(rename_all = "snake_case")]pub enum DockPosition {    Left,    Bottom,    Right,} /// Settings for slash commands.#[skip_serializing_none]#[derive(Deserialize, Serialize, Debug, Default, Clone, JsonSchema, MergeFrom, PartialEq, Eq)]pub struct SlashCommandSettings {    /// Settings for the `/cargo-workspace` slash command.    pub cargo_workspace: Option<CargoWorkspaceCommandSettings>,} /// Settings for the `/cargo-workspace` slash command.#[skip_serializing_none]#[derive(Deserialize, Serialize, Debug, Default, Clone, JsonSchema, MergeFrom, PartialEq, Eq)]pub struct CargoWorkspaceCommandSettings {    /// Whether `/cargo-workspace` is enabled.    pub enabled: Option<bool>,} /// Configuration of voice calls in Zed.#[skip_serializing_none]#[derive(Clone, PartialEq, Default, Serialize, Deserialize, JsonSchema, MergeFrom, Debug)]pub struct CallSettingsContent {    /// Whether the microphone should be muted when joining a channel or a call.    ///    /// Default: false    pub mute_on_join: Option<bool>,     /// Whether your current project should be shared when joining an empty channel.    ///    /// Default: false    pub share_on_join: Option<bool>,} #[skip_serializing_none]#[derive(Clone, PartialEq, Default, Serialize, Deserialize, JsonSchema, MergeFrom, Debug)]pub struct GitPanelSettingsContent {    /// Whether to show the panel button in the status bar.    ///    /// Default: true    pub button: Option<bool>,    /// Where to dock the panel.    ///    /// Default: left    pub dock: Option<DockPosition>,    /// Default width of the panel in pixels.    ///    /// Default: 360    #[serde(serialize_with = "crate::serialize_optional_f32_with_two_decimal_places")]    pub default_width: Option<f32>,    /// How entry statuses are displayed.    ///    /// Default: icon    pub status_style: Option<StatusStyle>,    /// How and when the scrollbar should be displayed.    ///    /// Default: inherits editor scrollbar settings    pub scrollbar: Option<ScrollbarSettings>,     /// What the default branch name should be when    /// `init.defaultBranch` is not set in git

Lines 1–500 of 1256.