Closes #21822 The issue is closed already, but it was requested to provide the `hard_tabs` boolean param. Follow-up to #52175 Reviewed by @maxdeviant (it already bumped the settings path to v0.8.0, so this `hard_tabs` change only needs 2 files, 2-3 lines of code additions). ## Context Exposes `hard_tabs` from `AllLanguageSettings` to the Extension API's `LanguageSettings` struct. Currently, only `tab_size` and `preferred_line_length` are available to extensions, which prevents language extensions (e.g., Go, C++) from reading the user's hard tabs preference and forwarding it to their language server or formatter (e.g., as rustfmt.hard_tabs or clang-format.UseTab). Related: https://github.com/zed-industries/zed/issues/21822#issuecomment-4139809956 ## How to Review Small change — follow how `tab_size` is plumbed through: 1. WIT definition (`language-settings` record) 2. `extension_api` Rust struct 3. Host-side bridge conversion The new field follows the exact same pattern. ## Self-Review Checklist <!-- Check before requesting review: --> - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - Compile-time verified via WIT bindings; no runtime behavior change - [x] Performance impact has been considered and is acceptable Release Notes: - N/A
45 lines
1.6 KiB
Rust
45 lines
1.6 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
use std::{collections::HashMap, num::NonZeroU32};
|
|
|
|
/// The settings for a particular language.
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub struct LanguageSettings {
|
|
/// How many columns a tab should occupy.
|
|
pub tab_size: NonZeroU32,
|
|
/// Whether to indent with hard tabs (true) or spaces (false).
|
|
pub hard_tabs: bool,
|
|
/// The preferred line length (column at which to wrap).
|
|
pub preferred_line_length: u32,
|
|
}
|
|
|
|
/// The settings for a particular language server.
|
|
#[derive(Default, Debug, Serialize, Deserialize)]
|
|
pub struct LspSettings {
|
|
/// The settings for the language server binary.
|
|
pub binary: Option<CommandSettings>,
|
|
/// The initialization options to pass to the language server.
|
|
pub initialization_options: Option<serde_json::Value>,
|
|
/// The settings to pass to language server.
|
|
pub settings: Option<serde_json::Value>,
|
|
}
|
|
|
|
/// The settings for a particular context server.
|
|
#[derive(Default, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub struct ContextServerSettings {
|
|
/// The settings for the context server binary.
|
|
pub command: Option<CommandSettings>,
|
|
/// The settings to pass to the context server.
|
|
pub settings: Option<serde_json::Value>,
|
|
}
|
|
|
|
/// The settings for a command.
|
|
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
|
|
pub struct CommandSettings {
|
|
/// The path to the command.
|
|
pub path: Option<String>,
|
|
/// The arguments to pass to the command.
|
|
pub arguments: Option<Vec<String>>,
|
|
/// The environment variables.
|
|
pub env: Option<HashMap<String, String>>,
|
|
}
|