diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2021-02-09 20:48:53 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-09 20:48:53 +1100 |
commit | d95666cae04376c041f5276774dc5445c6ca2415 (patch) | |
tree | f076e87b241bc310a5f24d1f23e1d6c909490070 /cli/lsp/utils.rs | |
parent | 97d5ef295065e74afa9e79d3796bded451b6d197 (diff) |
fix(lsp): handle code lenses for non-documents (#9454)
Diffstat (limited to 'cli/lsp/utils.rs')
-rw-r--r-- | cli/lsp/utils.rs | 30 |
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); |