diff options
author | Hajime-san <41257923+Hajime-san@users.noreply.github.com> | 2024-03-28 00:58:18 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-27 15:58:18 +0000 |
commit | feb744cebd37263026893c7e7c4852daa5df24d0 (patch) | |
tree | 99f8da702a85406acec872494a760c538025354e /cli/lsp/language_server.rs | |
parent | 3462248571fd3193106a0427b3d8f585f9716c48 (diff) |
fix(lsp): decoding percent-encoding(non-ASCII) file path correctly (#22582)
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 14 |
1 files changed, 10 insertions, 4 deletions
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) { |