1565 lines · 52.5 KB · Rust
RawDownload
use std::num::NonZeroU32; use collections::{HashMap, HashSet};use schemars::JsonSchema;use serde::{Deserialize, Serialize};use settings_macros::{MergeFrom, with_fallible_options};use std::sync::Arc; use crate::{DocumentFoldingRanges, DocumentSymbols, ExtendingVec, SemanticTokens, merge_from}; /// The state of the modifier keys at some point in time#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema, MergeFrom)]pub struct ModifiersContent {    /// The control key    #[serde(default)]    pub control: bool,    /// The alt key    /// Sometimes also known as the 'meta' key    #[serde(default)]    pub alt: bool,    /// The shift key    #[serde(default)]    pub shift: bool,    /// The command key, on macos    /// the windows key, on windows    /// the super key, on linux    #[serde(default)]    pub platform: bool,    /// The function key    #[serde(default)]    pub function: bool,} #[with_fallible_options]#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema)]pub struct AllLanguageSettingsContent {    /// The edit prediction settings.    pub edit_predictions: Option<EditPredictionSettingsContent>,    /// The default language settings.    #[serde(flatten)]    pub defaults: LanguageSettingsContent,    /// The settings for individual languages.    #[serde(default)]    pub languages: LanguageToSettingsMap,    /// Settings for associating file extensions and filenames    /// with languages.    pub file_types: Option<HashMap<Arc<str>, ExtendingVec<String>>>,} impl merge_from::MergeFrom for AllLanguageSettingsContent {    fn merge_from(&mut self, other: &Self) {        self.file_types.merge_from(&other.file_types);        self.edit_predictions.merge_from(&other.edit_predictions);         // A user's global settings override the default global settings and        // all default language-specific settings.        self.defaults.merge_from(&other.defaults);        let globally_disabled_servers = other.defaults.language_servers.as_ref().map(|servers| {            servers                .iter()                .filter(|entry| entry.starts_with('!'))                .cloned()                .collect::<Vec<_>>()        });        for language_settings in self.languages.0.values_mut() {            let language_server_overrides = language_settings.language_servers.clone();            language_settings.merge_from(&other.defaults);            if let Some(mut language_server_overrides) = language_server_overrides {                if let Some(disabled) = &globally_disabled_servers {                    for disabled_server in disabled {                        if let Some(enabled_server) = disabled_server.strip_prefix('!') {                            language_server_overrides.retain(|entry| entry != enabled_server);                        }                    }                     let insert_before = language_server_overrides                        .iter()                        .position(|entry| entry == REST_OF_LANGUAGE_SERVERS)                        .unwrap_or(language_server_overrides.len());                    for disabled_server in disabled {                        if !language_server_overrides.contains(disabled_server) {                            language_server_overrides                                .insert(insert_before, disabled_server.clone());                        }                    }                }                language_settings.language_servers = Some(language_server_overrides);            }        }         // A user's language-specific settings override default language-specific settings.        for (language_name, user_language_settings) in &other.languages.0 {            if let Some(existing) = self.languages.0.get_mut(language_name) {                existing.merge_from(&user_language_settings);            } else {                let mut new_settings = self.defaults.clone();                new_settings.merge_from(&user_language_settings);                 self.languages.0.insert(language_name.clone(), new_settings);            }        }    }} /// The provider that supplies edit predictions.#[derive(    Copy, Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom,)]#[serde(rename_all = "snake_case")]pub enum EditPredictionProvider {    None,    #[default]    Copilot,    Zed,    Codestral,    Ollama,    OpenAiCompatibleApi,    Mercury,} impl EditPredictionProvider {    pub fn is_zed(&self) -> bool {        match self {            EditPredictionProvider::Zed => true,            EditPredictionProvider::None            | EditPredictionProvider::Copilot            | EditPredictionProvider::Codestral            | EditPredictionProvider::Ollama            | EditPredictionProvider::OpenAiCompatibleApi            | EditPredictionProvider::Mercury => false,        }    }     pub fn display_name(&self) -> Option<&'static str> {        match self {            EditPredictionProvider::Zed => Some("Zed AI"),            EditPredictionProvider::Copilot => Some("GitHub Copilot"),            EditPredictionProvider::Codestral => Some("Codestral"),            EditPredictionProvider::Mercury => Some("Mercury"),            EditPredictionProvider::None => None,            EditPredictionProvider::Ollama => Some("Ollama"),            EditPredictionProvider::OpenAiCompatibleApi => Some("OpenAI-Compatible API"),        }    }} /// The contents of the edit prediction settings.#[with_fallible_options]#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq)]pub struct EditPredictionSettingsContent {    /// Determines which edit prediction provider to use.    pub provider: Option<EditPredictionProvider>,    /// A list of globs representing files that edit predictions should be disabled for.    /// This list adds to a pre-existing, sensible default set of globs.    /// Any additional ones you add are combined with them.    pub disabled_globs: Option<Vec<String>>,    /// The mode used to display edit predictions in the buffer.    /// Provider support required.    pub mode: Option<EditPredictionsMode>,    /// Settings specific to GitHub Copilot.    pub copilot: Option<CopilotSettingsContent>,    /// Settings specific to Codestral.    pub codestral: Option<CodestralSettingsContent>,    /// Settings specific to Ollama.    pub ollama: Option<OllamaEditPredictionSettingsContent>,    /// Settings specific to using custom OpenAI-compatible servers for edit prediction.    pub open_ai_compatible_api: Option<CustomEditPredictionProviderSettingsContent>,    /// Controls whether Zed may collect training data when using Zed's Edit Predictions.    /// Data is only ever captured for files in projects that are detected as open source.    ///    /// - `"default"`: use the preference previously set via the status-bar toggle,    ///   or false if no preference has been stored.    /// - `"yes"`: allow data collection for files in open-source projects.    /// - `"no"`: never allow data collection.    pub allow_data_collection: Option<EditPredictionDataCollectionChoice>,} #[with_fallible_options]#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq)]pub struct CustomEditPredictionProviderSettingsContent {    /// Api URL to use for completions.    ///    /// Default: ""    pub api_url: Option<String>,    /// The prompt format to use for completions. Set to `""` to have the format be derived from the model name.    ///    /// Default: ""    pub prompt_format: Option<EditPredictionPromptFormatContent>,    /// The name of the model.    ///    /// Default: ""    pub model: Option<String>,    /// Maximum tokens to generate.    ///    /// Default: 256    pub max_output_tokens: Option<u32>,} #[derive(    Copy,    Clone,    Debug,    Default,    PartialEq,    Eq,    Serialize,    Deserialize,    JsonSchema,    MergeFrom,    strum::VariantArray,    strum::VariantNames,)]#[serde(rename_all = "snake_case")]pub enum EditPredictionPromptFormatContent {    #[default]    Infer,    Zeta,    Zeta2,    Zeta2_1,    CodeLlama,    StarCoder,    DeepseekCoder,    Qwen,    CodeGemma,    Codestral,    Glm,} #[with_fallible_options]#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq)]pub struct CopilotSettingsContent {    /// HTTP/HTTPS proxy to use for Copilot.    ///    /// Default: none    pub proxy: Option<String>,    /// Disable certificate verification for the proxy (not recommended).    ///    /// Default: false    pub proxy_no_verify: Option<bool>,    /// Enterprise URI for Copilot.    ///    /// Default: none    pub enterprise_uri: Option<String>,    /// Whether the Copilot Next Edit Suggestions feature is enabled.    ///    /// Default: true    pub enable_next_edit_suggestions: Option<bool>,} #[with_fallible_options]#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq)]pub struct CodestralSettingsContent {    /// Model to use for completions.    ///    /// Default: "codestral-latest"    pub model: Option<String>,    /// Maximum tokens to generate.    ///    /// Default: 150    pub max_tokens: Option<u32>,    /// Api URL to use for completions.    ///    /// Default: "https://codestral.mistral.ai"    pub api_url: Option<String>,} /// Ollama model name for edit predictions.#[with_fallible_options]#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq, Eq)]#[serde(transparent)]pub struct OllamaModelName(pub String); impl AsRef<str> for OllamaModelName {    fn as_ref(&self) -> &str {        &self.0    }} impl From<String> for OllamaModelName {    fn from(value: String) -> Self {        Self(value)    }} impl From<OllamaModelName> for String {    fn from(value: OllamaModelName) -> Self {        value.0    }} #[with_fallible_options]#[derive(Clone, Debug, Default, Serialize, Deserialize, JsonSchema, MergeFrom, PartialEq)]pub struct OllamaEditPredictionSettingsContent {    /// Model to use for completions.    ///    /// Default: none    pub model: Option<OllamaModelName>,    /// Maximum tokens to generate for FIM models.    ///    /// Default: 256    pub max_output_tokens: Option<u32>,    /// Api URL to use for completions.    ///    /// Default: "http://localhost:11434"    pub api_url: Option<String>,     /// The prompt format to use for completions. Set to `""` to have the format be derived from the model name.    ///    /// Default: ""    pub prompt_format: Option<EditPredictionPromptFormatContent>,} /// Controls whether Zed collects training data when using Zed's Edit Predictions.#[derive(    Copy,    Clone,    Debug,    Default,    Eq,    PartialEq,    Serialize,    Deserialize,    JsonSchema,    MergeFrom,    strum::VariantArray,    strum::VariantNames,)]#[serde(rename_all = "snake_case")]pub enum EditPredictionDataCollectionChoice {    /// Use the preference previously set via the status-bar toggle, or false    /// if no preference has been stored.    #[default]    Default,    /// Allow Zed to collect training data from open-source projects.    Yes,    /// Never allow training data collection.    No,} /// The mode in which edit predictions should be displayed.#[derive(    Copy,    Clone,    Debug,    Default,    Eq,    PartialEq,    Serialize,    Deserialize,    JsonSchema,    MergeFrom,    strum::VariantArray,    strum::VariantNames,)]#[serde(rename_all = "snake_case")]pub enum EditPredictionsMode {    /// If provider supports it, display inline when holding modifier key (e.g., alt).    /// Otherwise, eager preview is used.    #[serde(alias = "auto")]    Subtle,    /// Display inline when there are no language server completions available.    #[default]    #[serde(alias = "eager_preview")]    Eager,} /// Controls the soft-wrapping behavior in the editor.#[derive(    Copy,    Clone,    Debug,    Serialize,    Deserialize,    PartialEq,    Eq,    JsonSchema,    MergeFrom,    strum::VariantArray,    strum::VariantNames,)]#[serde(rename_all = "snake_case")]pub enum AutoIndentMode {    /// Adjusts indentation based on syntax context when typing.    /// Uses tree-sitter to analyze code structure and indent accordingly.    SyntaxAware,    /// Preserve the indentation of the current line when creating new lines,    /// but don't adjust based on syntax context.    PreserveIndent,    /// No automatic indentation. New lines start at column 0.    None,} /// Controls the soft-wrapping behavior in the editor.#[derive(    Copy,    Clone,    Debug,    Serialize,    Deserialize,    PartialEq,    Eq,    JsonSchema,    MergeFrom,    strum::VariantArray,    strum::VariantNames,)]#[serde(rename_all = "snake_case")]pub enum SoftWrap {    /// Prefer a single line generally, unless an overly long line is encountered.    None,    /// Deprecated: use None instead. Left to avoid breaking existing users' configs.    /// Prefer a single line generally, unless an overly long line is encountered.    PreferLine,    /// Soft wrap lines that exceed the editor width.    EditorWidth,    /// Soft wrap line at the preferred line length or the editor width (whichever is smaller).    #[serde(alias = "preferred_line_length")]    Bounded,} pub const REST_OF_LANGUAGE_SERVERS: &str = "..."; /// The settings for a particular language.#[with_fallible_options]#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, MergeFrom)]pub struct LanguageSettingsContent {    /// How many columns a tab should occupy.    ///    /// Default: 4    #[schemars(range(min = 1, max = 128))]    pub tab_size: Option<NonZeroU32>,    /// Whether to indent lines using tab characters, as opposed to multiple    /// spaces.    ///    /// Default: false    pub hard_tabs: Option<bool>,    /// How to soft-wrap long lines of text.    ///    /// Default: none    pub soft_wrap: Option<SoftWrap>,    /// The column at which to soft-wrap lines, for buffers where soft-wrap    /// is enabled.    ///    /// Default: 80    pub preferred_line_length: Option<u32>,    /// Whether to show wrap guides in the editor. Setting this to true will    /// show a guide at the 'preferred_line_length' value if softwrap is set to    /// 'preferred_line_length', and will show any additional guides as specified    /// by the 'wrap_guides' setting.    ///    /// Default: true    pub show_wrap_guides: Option<bool>,    /// Character counts at which to show wrap guides in the editor.    ///    /// Default: []    pub wrap_guides: Option<Vec<usize>>,    /// Indent guide related settings.    pub indent_guides: Option<IndentGuideSettingsContent>,    /// Whether or not to perform a buffer format before saving.    ///    /// Default: on    pub format_on_save: Option<FormatOnSave>,    /// Whether or not to remove any trailing whitespace from lines of a buffer    /// before saving it.    ///    /// Default: true    pub remove_trailing_whitespace_on_save: Option<bool>,    /// Whether or not to ensure there's a single newline at the end of a buffer    /// when saving it.    ///    /// Default: true    pub ensure_final_newline_on_save: Option<bool>,    /// How line endings should be handled for new files and during format and    /// save operations.    ///    /// - `detect`: Detect existing line endings and otherwise use the platform    ///   default (`lf` on Unix, `crlf` on Windows).    /// - `prefer_lf`: Prefer LF for new files and files with no existing line    ///   ending.    /// - `prefer_crlf`: Prefer CRLF for new files and files with no existing    ///   line ending.    /// - `enforce_lf`: Enforce LF during format and save.    /// - `enforce_crlf`: Enforce CRLF during format and save.    ///    /// The EditorConfig `end_of_line` property overrides this setting and    /// behaves like `enforce_lf` or `enforce_crlf`.    ///    /// Default: detect    pub line_ending: Option<LineEndingSetting>,    /// How to perform a buffer format.    ///    /// Default: auto    pub formatter: Option<FormatterList>,    /// Zed's Prettier integration settings.    /// Allows to enable/disable formatting with Prettier    /// and configure default Prettier, used when no project-level Prettier installation is found.    ///    /// Default: off    pub prettier: Option<PrettierSettingsContent>,    /// Whether to automatically close JSX tags.

Lines 1–500 of 1565.