From 130f19d8f953ca43bf6c833ac0e0c7362a170850 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Tue, 10 Sep 2024 15:50:51 -0400 Subject: [PATCH] Correctly merge settings for vtsls (#17657) Release Notes: - Fixed vtsls initialization_options in project settings files --- crates/languages/src/vtsls.rs | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/crates/languages/src/vtsls.rs b/crates/languages/src/vtsls.rs index d38ee85f313891c18900f682de3a3d406fc59493..3dca82688cb81d71096c9b17bcb916e4da8bd65c 100644 --- a/crates/languages/src/vtsls.rs +++ b/crates/languages/src/vtsls.rs @@ -7,14 +7,14 @@ use lsp::{CodeActionKind, LanguageServerBinary}; use node_runtime::NodeRuntime; use project::project_settings::{BinarySettings, ProjectSettings}; use serde_json::{json, Value}; -use settings::Settings; +use settings::{Settings, SettingsLocation}; use std::{ any::Any, ffi::OsString, path::{Path, PathBuf}, sync::Arc, }; -use util::{maybe, ResultExt}; +use util::{maybe, merge_json_value_into, ResultExt}; fn typescript_server_binary_arguments(server_path: &Path) -> Vec { vec![server_path.into(), "--stdio".into()] @@ -274,17 +274,29 @@ impl LspAdapter for VtslsLspAdapter { cx: &mut AsyncAppContext, ) -> Result { let override_options = cx.update(|cx| { - ProjectSettings::get_global(cx) - .lsp - .get(SERVER_NAME) - .and_then(|s| s.initialization_options.clone()) + ProjectSettings::get( + Some(SettingsLocation { + worktree_id: adapter.worktree_id(), + path: adapter.worktree_root_path(), + }), + cx, + ) + .lsp + .get(SERVER_NAME) + .and_then(|s| s.initialization_options.clone()) })?; if let Some(options) = override_options { return Ok(options); } - self.initialization_options(adapter) + let mut initialization_options = self + .initialization_options(adapter) .await - .map(|o| o.unwrap()) + .map(|o| o.unwrap())?; + + if let Some(override_options) = override_options { + merge_json_value_into(override_options, &mut initialization_options) + } + Ok(initialization_options) } fn language_ids(&self) -> HashMap {