diff options
Diffstat (limited to 'cli/lsp/sources.rs')
-rw-r--r-- | cli/lsp/sources.rs | 74 |
1 files changed, 29 insertions, 45 deletions
diff --git a/cli/lsp/sources.rs b/cli/lsp/sources.rs index 265491895..0cd7b5876 100644 --- a/cli/lsp/sources.rs +++ b/cli/lsp/sources.rs @@ -55,12 +55,12 @@ fn resolve_remote_specifier( http_cache: &HttpCache, redirect_limit: isize, ) -> Option<ModuleSpecifier> { - let cache_filename = http_cache.get_cache_filename(specifier.as_url())?; + let cache_filename = http_cache.get_cache_filename(specifier)?; if redirect_limit >= 0 && cache_filename.is_file() { let headers = get_remote_headers(&cache_filename)?; if let Some(location) = headers.get("location") { let redirect = - ModuleSpecifier::resolve_import(location, specifier.as_str()).ok()?; + deno_core::resolve_import(location, specifier.as_str()).ok()?; resolve_remote_specifier(&redirect, http_cache, redirect_limit - 1) } else { Some(specifier.clone()) @@ -75,7 +75,7 @@ fn resolve_specifier( redirects: &mut HashMap<ModuleSpecifier, ModuleSpecifier>, http_cache: &HttpCache, ) -> Option<ModuleSpecifier> { - let scheme = specifier.as_url().scheme(); + let scheme = specifier.scheme(); if !SUPPORTED_SCHEMES.contains(&scheme) { return None; } @@ -83,7 +83,7 @@ fn resolve_specifier( if scheme == "data" { Some(specifier.clone()) } else if scheme == "file" { - let path = specifier.as_url().to_file_path().ok()?; + let path = specifier.to_file_path().ok()?; if path.is_file() { Some(specifier.clone()) } else { @@ -295,15 +295,14 @@ impl Inner { let version = self.calculate_script_version(specifier)?; let path = self.get_path(specifier)?; let bytes = fs::read(path).ok()?; - let scheme = specifier.as_url().scheme(); + let scheme = specifier.scheme(); let (source, media_type, maybe_types) = if scheme == "file" { let maybe_charset = Some(text_encoding::detect_charset(&bytes).to_string()); let source = get_source_from_bytes(bytes, maybe_charset).ok()?; (source, MediaType::from(specifier), None) } else { - let cache_filename = - self.http_cache.get_cache_filename(specifier.as_url())?; + let cache_filename = self.http_cache.get_cache_filename(specifier)?; let headers = get_remote_headers(&cache_filename)?; let maybe_content_type = headers.get("content-type").cloned(); let (media_type, maybe_charset) = @@ -329,12 +328,12 @@ impl Inner { } fn get_path(&mut self, specifier: &ModuleSpecifier) -> Option<PathBuf> { - if specifier.as_url().scheme() == "file" { - specifier.as_url().to_file_path().ok() + if specifier.scheme() == "file" { + specifier.to_file_path().ok() } else if let Some(path) = self.remotes.get(&specifier) { Some(path.clone()) } else { - let path = self.http_cache.get_cache_filename(&specifier.as_url())?; + let path = self.http_cache.get_cache_filename(&specifier)?; if path.is_file() { self.remotes.insert(specifier.clone(), path.clone()); Some(path) @@ -436,6 +435,8 @@ impl Inner { #[cfg(test)] mod tests { use super::*; + use deno_core::resolve_path; + use deno_core::resolve_url; use std::env; use tempfile::TempDir; @@ -451,10 +452,8 @@ mod tests { let (sources, _) = setup(); let c = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap()); let tests = c.join("tests"); - let specifier = ModuleSpecifier::resolve_path( - &tests.join("001_hello.js").to_string_lossy(), - ) - .unwrap(); + let specifier = + resolve_path(&tests.join("001_hello.js").to_string_lossy()).unwrap(); let actual = sources.get_script_version(&specifier); assert!(actual.is_some()); } @@ -464,10 +463,8 @@ mod tests { let (sources, _) = setup(); let c = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap()); let tests = c.join("tests"); - let specifier = ModuleSpecifier::resolve_path( - &tests.join("001_hello.js").to_string_lossy(), - ) - .unwrap(); + let specifier = + resolve_path(&tests.join("001_hello.js").to_string_lossy()).unwrap(); let actual = sources.get_source(&specifier); assert!(actual.is_some()); let actual = actual.unwrap(); @@ -479,10 +476,8 @@ mod tests { let (sources, _) = setup(); let c = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap()); let tests = c.join("tests"); - let specifier = ModuleSpecifier::resolve_path( - &tests.join("001_hello.js").to_string_lossy(), - ) - .unwrap(); + let specifier = + resolve_path(&tests.join("001_hello.js").to_string_lossy()).unwrap(); let actual = sources.get_length_utf16(&specifier); assert!(actual.is_some()); let actual = actual.unwrap(); @@ -493,32 +488,25 @@ mod tests { fn test_resolve_dependency_types() { let (sources, location) = setup(); let cache = HttpCache::new(&location); - let specifier_dep = - ModuleSpecifier::resolve_url("https://deno.land/x/mod.ts").unwrap(); + let specifier_dep = resolve_url("https://deno.land/x/mod.ts").unwrap(); cache .set( - specifier_dep.as_url(), + &specifier_dep, Default::default(), b"export * from \"https://deno.land/x/lib.js\";", ) .unwrap(); - let specifier_code = - ModuleSpecifier::resolve_url("https://deno.land/x/lib.js").unwrap(); + let specifier_code = resolve_url("https://deno.land/x/lib.js").unwrap(); let mut headers_code = HashMap::new(); headers_code .insert("x-typescript-types".to_string(), "./lib.d.ts".to_string()); cache - .set( - specifier_code.as_url(), - headers_code, - b"export const a = 1;", - ) + .set(&specifier_code, headers_code, b"export const a = 1;") .unwrap(); - let specifier_type = - ModuleSpecifier::resolve_url("https://deno.land/x/lib.d.ts").unwrap(); + let specifier_type = resolve_url("https://deno.land/x/lib.d.ts").unwrap(); cache .set( - specifier_type.as_url(), + &specifier_type, Default::default(), b"export const a: number;", ) @@ -532,19 +520,15 @@ mod tests { fn test_resolve_dependency_evil_redirect() { let (sources, location) = setup(); let cache = HttpCache::new(&location); - let evil_specifier = - ModuleSpecifier::resolve_url("https://deno.land/x/evil.ts").unwrap(); + let evil_specifier = resolve_url("https://deno.land/x/evil.ts").unwrap(); let mut evil_headers = HashMap::new(); evil_headers .insert("location".to_string(), "file:///etc/passwd".to_string()); - cache - .set(evil_specifier.as_url(), evil_headers, b"") - .unwrap(); - let remote_specifier = - ModuleSpecifier::resolve_url("https://deno.land/x/mod.ts").unwrap(); + cache.set(&evil_specifier, evil_headers, b"").unwrap(); + let remote_specifier = resolve_url("https://deno.land/x/mod.ts").unwrap(); cache .set( - remote_specifier.as_url(), + &remote_specifier, Default::default(), b"export * from \"./evil.ts\";", ) @@ -556,8 +540,8 @@ mod tests { #[test] fn test_sources_resolve_specifier_non_supported_schema() { let (sources, _) = setup(); - let specifier = ModuleSpecifier::resolve_url("foo://a/b/c.ts") - .expect("could not create specifier"); + let specifier = + resolve_url("foo://a/b/c.ts").expect("could not create specifier"); let sources = sources.0.lock().unwrap(); let mut redirects = sources.redirects.clone(); let http_cache = sources.http_cache.clone(); |