From 7ccef1dd89fdb8f530f7009a0477b09b15f841a6 Mon Sep 17 00:00:00 2001 From: Roman Cinis <52065414+tsinis@users.noreply.github.com> Date: Wed, 25 Mar 2026 00:11:30 +0100 Subject: [PATCH] extension_api: Expose preferred_line_length in LanguageSettings (#52175) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #21822 ## Context Exposes `preferred_line_length` from `AllLanguageSettings` to the Extension API's `LanguageSettings` struct. Currently only `tab_size` is available to extensions, which prevents language extensions (e.g. Dart) from reading the user's preferred line length and forwarding it to their language server (e.g. as `dart.lineLength`). Related: https://github.com/zed-extensions/dart/issues/2 ## 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 - [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 --- crates/extension_api/src/settings.rs | 2 +- crates/extension_api/wit/since_v0.8.0/settings.rs | 2 ++ crates/extension_host/src/wasm_host/wit/since_v0_8_0.rs | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/extension_api/src/settings.rs b/crates/extension_api/src/settings.rs index a133a8027a4361c1f92e3fdecc73664497b4e6d6..bb9f2e20b23efd077e37b6c90b245f120c1d6ab9 100644 --- a/crates/extension_api/src/settings.rs +++ b/crates/extension_api/src/settings.rs @@ -1,6 +1,6 @@ //! Provides access to Zed settings. -#[path = "../wit/since_v0.2.0/settings.rs"] +#[path = "../wit/since_v0.8.0/settings.rs"] mod types; use crate::{Project, Result, SettingsLocation, Worktree, wit}; diff --git a/crates/extension_api/wit/since_v0.8.0/settings.rs b/crates/extension_api/wit/since_v0.8.0/settings.rs index 19e28c1ba955a998fe7b97f3eacb57c4b1104154..7c77dc79baf7ab89bec74b6c66ea5b736d2ba858 100644 --- a/crates/extension_api/wit/since_v0.8.0/settings.rs +++ b/crates/extension_api/wit/since_v0.8.0/settings.rs @@ -6,6 +6,8 @@ use std::{collections::HashMap, num::NonZeroU32}; pub struct LanguageSettings { /// How many columns a tab should occupy. pub tab_size: NonZeroU32, + /// The preferred line length (column at which to wrap). + pub preferred_line_length: u32, } /// The settings for a particular language server. diff --git a/crates/extension_host/src/wasm_host/wit/since_v0_8_0.rs b/crates/extension_host/src/wasm_host/wit/since_v0_8_0.rs index d7cf29ad0a3fcc7448d5bf44a8a2612d55e07a88..324a572f40c98037816870c99151a4789793da1b 100644 --- a/crates/extension_host/src/wasm_host/wit/since_v0_8_0.rs +++ b/crates/extension_host/src/wasm_host/wit/since_v0_8_0.rs @@ -941,6 +941,7 @@ impl ExtensionImports for WasmState { ); Ok(serde_json::to_string(&settings::LanguageSettings { tab_size: settings.tab_size, + preferred_line_length: settings.preferred_line_length, })?) } "lsp" => {