summaryrefslogtreecommitdiff
path: root/cli/lsp/sources.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/sources.rs')
-rw-r--r--cli/lsp/sources.rs74
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();