summaryrefslogtreecommitdiff
path: root/cli/lsp/utils.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/utils.rs')
-rw-r--r--cli/lsp/utils.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/cli/lsp/utils.rs b/cli/lsp/utils.rs
index 09657a71d..8f4de9c05 100644
--- a/cli/lsp/utils.rs
+++ b/cli/lsp/utils.rs
@@ -16,6 +16,19 @@ pub fn normalize_file_name(file_name: &str) -> Result<Url, AnyError> {
Url::parse(&specifier_str).map_err(|err| err.into())
}
+pub fn normalize_specifier(
+ specifier: &ModuleSpecifier,
+) -> Result<Url, AnyError> {
+ let url = specifier.as_url();
+ if url.scheme() == "file" {
+ Ok(url.clone())
+ } else {
+ let specifier_str =
+ format!("deno:///{}", url.as_str().replacen("://", "/", 1));
+ Url::parse(&specifier_str).map_err(|err| err.into())
+ }
+}
+
/// Normalize URLs from the client, where "virtual" `deno:///` URLs are
/// converted into proper module specifiers.
pub fn normalize_url(url: Url) -> ModuleSpecifier {
@@ -41,6 +54,23 @@ mod tests {
use super::*;
#[test]
+ fn test_normalize_file_name() {
+ let fixture = "https://deno.land/x/mod.ts";
+ let actual = normalize_file_name(fixture).unwrap();
+ let expected = Url::parse("deno:///https/deno.land/x/mod.ts").unwrap();
+ assert_eq!(actual, expected);
+ }
+
+ #[test]
+ fn test_normalize_specifier() {
+ let fixture =
+ ModuleSpecifier::resolve_url("https://deno.land/x/mod.ts").unwrap();
+ let actual = normalize_specifier(&fixture).unwrap();
+ let expected = Url::parse("deno:///https/deno.land/x/mod.ts").unwrap();
+ assert_eq!(actual, expected);
+ }
+
+ #[test]
fn test_normalize_url() {
let fixture = Url::parse("deno:///https/deno.land/x/mod.ts").unwrap();
let actual = normalize_url(fixture);