From eb6e7d7b6489adb1eb4514091cedb0937369ae8a Mon Sep 17 00:00:00 2001 From: Kunall Banerjee Date: Tue, 21 Apr 2026 01:57:35 -0400 Subject: [PATCH] Fix Node.js language servers failing with `--user-data-dir` on Windows (#50767) Closes #50677. Release Notes: - Fixed Node.js language servers failing with `--user-data-dir` on Windows --- crates/paths/src/paths.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/paths/src/paths.rs b/crates/paths/src/paths.rs index c9b9c756217281d587491aac5cac81e7cd0baaf2..7afab7e81692e2b2953d2978b45b7aa20e8d137c 100644 --- a/crates/paths/src/paths.rs +++ b/crates/paths/src/paths.rs @@ -4,6 +4,7 @@ use std::env; use std::path::{Path, PathBuf}; use std::sync::{LazyLock, OnceLock}; +use util::paths::SanitizedPath; pub use util::paths::home_dir; use util::rel_path::RelPath; @@ -71,8 +72,14 @@ pub fn set_custom_data_dir(dir: &str) -> &'static PathBuf { CUSTOM_DATA_DIR.get_or_init(|| { let path = PathBuf::from(dir); std::fs::create_dir_all(&path).expect("failed to create custom data directory"); - path.canonicalize() - .expect("failed to canonicalize custom data directory's path to an absolute path") + let canonicalized = path + .canonicalize() + .expect("failed to canonicalize custom data directory's path to an absolute path"); + // On Windows, `canonicalize` produces extended-length paths prefixed + // with `\\?\`. Strip that prefix so downstream consumers (e.g. + // Node.js language servers) that receive derived paths as arguments + // don't choke on the verbatim syntax. + SanitizedPath::new(&canonicalized).as_path().to_path_buf() }) }