From d95666cae04376c041f5276774dc5445c6ca2415 Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Tue, 9 Feb 2021 20:48:53 +1100 Subject: fix(lsp): handle code lenses for non-documents (#9454) --- cli/lsp/utils.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'cli/lsp/utils.rs') 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::parse(&specifier_str).map_err(|err| err.into()) } +pub fn normalize_specifier( + specifier: &ModuleSpecifier, +) -> Result { + 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 { @@ -40,6 +53,23 @@ pub fn normalize_url(url: Url) -> ModuleSpecifier { 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(); -- cgit v1.2.3