From feb744cebd37263026893c7e7c4852daa5df24d0 Mon Sep 17 00:00:00 2001 From: Hajime-san <41257923+Hajime-san@users.noreply.github.com> Date: Thu, 28 Mar 2024 00:58:18 +0900 Subject: fix(lsp): decoding percent-encoding(non-ASCII) file path correctly (#22582) --- cli/lsp/language_server.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'cli/lsp/language_server.rs') diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index fafd9fe4c..e7e48a04c 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -122,6 +122,7 @@ use crate::tools::upgrade::upgrade_check_enabled; use crate::util::fs::remove_dir_all_if_exists; use crate::util::path::is_importable_ext; use crate::util::path::specifier_to_file_path; +use crate::util::path::to_percent_decoded_str; use crate::util::progress_bar::ProgressBar; use crate::util::progress_bar::ProgressBarStyle; @@ -1738,16 +1739,21 @@ impl Inner { match resolution { Resolution::Ok(resolved) => { let specifier = &resolved.specifier; + let format = |scheme: &str, rest: &str| -> String { + format!("{}​{}", scheme, rest).replace('@', "​@") + }; match specifier.scheme() { "data" => "_(a data url)_".to_string(), "blob" => "_(a blob url)_".to_string(), + "file" => format( + &specifier[..url::Position::AfterScheme], + &to_percent_decoded_str(&specifier[url::Position::AfterScheme..]), + ), _ => { - let mut result = format!( - "{}​{}", + let mut result = format( &specifier[..url::Position::AfterScheme], &specifier[url::Position::AfterScheme..], - ) - .replace('@', "​@"); + ); if let Ok(jsr_req_ref) = JsrPackageReqReference::from_specifier(specifier) { -- cgit v1.2.3