summaryrefslogtreecommitdiff
path: root/cli/lsp/language_server.rs
diff options
context:
space:
mode:
authorHajime-san <41257923+Hajime-san@users.noreply.github.com>2024-03-28 00:58:18 +0900
committerGitHub <noreply@github.com>2024-03-27 15:58:18 +0000
commitfeb744cebd37263026893c7e7c4852daa5df24d0 (patch)
tree99f8da702a85406acec872494a760c538025354e /cli/lsp/language_server.rs
parent3462248571fd3193106a0427b3d8f585f9716c48 (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.rs14
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!("{}&#8203;{}", scheme, rest).replace('@', "&#8203;@")
+ };
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!(
- "{}&#8203;{}",
+ let mut result = format(
&specifier[..url::Position::AfterScheme],
&specifier[url::Position::AfterScheme..],
- )
- .replace('@', "&#8203;@");
+ );
if let Ok(jsr_req_ref) =
JsrPackageReqReference::from_specifier(specifier)
{