summaryrefslogtreecommitdiff
path: root/cli/lsp
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-01-31 22:15:22 -0500
committerGitHub <noreply@github.com>2024-02-01 03:15:22 +0000
commit4b7c6049ef9d40394eb823859c82cbf8d293430d (patch)
tree61e6de7c69c9d00faeef0ff7e6c223224a53de9e /cli/lsp
parent830d096b66696ad9f4e67b3ed8460fb1ff7a9170 (diff)
refactor: load bytes in deno_graph (#22212)
Upgrades deno_graph to 0.64 where deno_graph is now responsible for turning bytes into a string. This is in preparation for Wasm modules.
Diffstat (limited to 'cli/lsp')
-rw-r--r--cli/lsp/documents.rs42
-rw-r--r--cli/lsp/npm.rs6
-rw-r--r--cli/lsp/registries.rs10
-rw-r--r--cli/lsp/urls.rs10
4 files changed, 39 insertions, 29 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs
index 611d1d07f..c758d341b 100644
--- a/cli/lsp/documents.rs
+++ b/cli/lsp/documents.rs
@@ -13,9 +13,6 @@ use crate::args::ConfigFile;
use crate::args::JsxImportSourceConfig;
use crate::cache::FastInsecureHasher;
use crate::cache::HttpCache;
-use crate::file_fetcher::get_source_from_bytes;
-use crate::file_fetcher::get_source_from_data_url;
-use crate::file_fetcher::map_content_type;
use crate::lsp::logging::lsp_warn;
use crate::npm::CliNpmResolver;
use crate::resolver::CliGraphResolver;
@@ -24,7 +21,6 @@ use crate::resolver::SloppyImportsFsEntry;
use crate::resolver::SloppyImportsResolution;
use crate::resolver::SloppyImportsResolver;
use crate::util::path::specifier_to_file_path;
-use crate::util::text_encoding;
use deno_ast::MediaType;
use deno_ast::ParsedSource;
@@ -278,7 +274,7 @@ impl DocumentDependencies {
}
}
- pub fn from_module(module: &deno_graph::EsmModule) -> Self {
+ pub fn from_module(module: &deno_graph::JsModule) -> Self {
Self {
deps: module.dependencies.clone(),
maybe_types_dependency: module.maybe_types_dependency.clone(),
@@ -286,7 +282,7 @@ impl DocumentDependencies {
}
}
-type ModuleResult = Result<deno_graph::EsmModule, deno_graph::ModuleGraphError>;
+type ModuleResult = Result<deno_graph::JsModule, deno_graph::ModuleGraphError>;
type ParsedSourceResult = Result<ParsedSource, deno_ast::Diagnostic>;
#[derive(Debug)]
@@ -593,7 +589,7 @@ impl Document {
self.0.maybe_lsp_version
}
- fn maybe_esm_module(&self) -> Option<&ModuleResult> {
+ fn maybe_js_module(&self) -> Option<&ModuleResult> {
self.0.maybe_module.as_ref()
}
@@ -632,7 +628,7 @@ impl Document {
&self,
position: &lsp::Position,
) -> Option<(String, deno_graph::Dependency, deno_graph::Range)> {
- let module = self.maybe_esm_module()?.as_ref().ok()?;
+ let module = self.maybe_js_module()?.as_ref().ok()?;
let position = deno_graph::Position {
line: position.line as usize,
character: position.character as usize,
@@ -798,9 +794,8 @@ impl FileSystemDocuments {
let path = specifier_to_file_path(specifier).ok()?;
let fs_version = calculate_fs_version_at_path(&path)?;
let bytes = fs::read(path).ok()?;
- let maybe_charset =
- Some(text_encoding::detect_charset(&bytes).to_string());
- let content = get_source_from_bytes(bytes, maybe_charset).ok()?;
+ let content =
+ deno_graph::source::decode_owned_source(specifier, bytes, None).ok()?;
Document::new(
specifier.clone(),
fs_version,
@@ -810,7 +805,10 @@ impl FileSystemDocuments {
npm_resolver,
)
} else if specifier.scheme() == "data" {
- let (source, _) = get_source_from_data_url(specifier).ok()?;
+ let source = deno_graph::source::RawDataUrl::parse(specifier)
+ .ok()?
+ .decode()
+ .ok()?;
Document::new(
specifier.clone(),
"1".to_string(),
@@ -824,10 +822,18 @@ impl FileSystemDocuments {
let cache_key = cache.cache_item_key(specifier).ok()?;
let bytes = cache.read_file_bytes(&cache_key).ok()??;
let specifier_metadata = cache.read_metadata(&cache_key).ok()??;
- let maybe_content_type = specifier_metadata.headers.get("content-type");
- let (_, maybe_charset) = map_content_type(specifier, maybe_content_type);
+ let (_, maybe_charset) =
+ deno_graph::source::resolve_media_type_and_charset_from_headers(
+ specifier,
+ Some(&specifier_metadata.headers),
+ );
+ let content = deno_graph::source::decode_owned_source(
+ specifier,
+ bytes,
+ maybe_charset,
+ )
+ .ok()?;
let maybe_headers = Some(specifier_metadata.headers);
- let content = get_source_from_bytes(bytes, maybe_charset).ok()?;
Document::new(
specifier.clone(),
fs_version,
@@ -1681,7 +1687,7 @@ impl Documents {
return node_resolve_npm_req_ref(npm_ref, maybe_npm, referrer);
}
let doc = self.get(specifier)?;
- let maybe_module = doc.maybe_esm_module().and_then(|r| r.as_ref().ok());
+ let maybe_module = doc.maybe_js_module().and_then(|r| r.as_ref().ok());
let maybe_types_dependency = maybe_module
.and_then(|m| m.maybe_types_dependency.as_ref().map(|d| &d.dependency));
if let Some(specifier) =
@@ -1752,7 +1758,7 @@ impl<'a> OpenDocumentsGraphLoader<'a> {
if let Some(doc) = self.open_docs.get(specifier) {
return Some(
future::ready(Ok(Some(deno_graph::source::LoadResponse::Module {
- content: doc.content(),
+ content: Arc::from(doc.content()),
specifier: doc.specifier().clone(),
maybe_headers: None,
})))
@@ -1816,7 +1822,7 @@ impl<'a> deno_graph::source::Loader for OpenDocumentsGraphLoader<'a> {
fn cache_module_info(
&mut self,
specifier: &deno_ast::ModuleSpecifier,
- source: &str,
+ source: &Arc<[u8]>,
module_info: &deno_graph::ModuleInfo,
) {
self
diff --git a/cli/lsp/npm.rs b/cli/lsp/npm.rs
index c730c7990..613b7897e 100644
--- a/cli/lsp/npm.rs
+++ b/cli/lsp/npm.rs
@@ -62,7 +62,8 @@ impl NpmSearchApi for CliNpmSearchApi {
let file = self
.file_fetcher
.fetch(&search_url, PermissionsContainer::allow_all())
- .await?;
+ .await?
+ .into_text_decoded()?;
let names = Arc::new(parse_npm_search_response(&file.source)?);
self
.search_cache
@@ -88,7 +89,8 @@ impl NpmSearchApi for CliNpmSearchApi {
.file_fetcher
.fetch(&info_url, PermissionsContainer::allow_all())
.await?;
- let info = Arc::new(serde_json::from_str::<NpmPackageInfo>(&file.source)?);
+ let info =
+ Arc::new(serde_json::from_slice::<NpmPackageInfo>(&file.source)?);
self
.info_cache
.lock()
diff --git a/cli/lsp/registries.rs b/cli/lsp/registries.rs
index 328b325ff..f4a64c7ee 100644
--- a/cli/lsp/registries.rs
+++ b/cli/lsp/registries.rs
@@ -528,7 +528,7 @@ impl ModuleRegistry {
);
self.http_cache.set(specifier, headers_map, &[])?;
}
- let file = fetch_result?;
+ let file = fetch_result?.into_text_decoded()?;
let config: RegistryConfigurationJson = serde_json::from_str(&file.source)?;
validate_config(&config)?;
Ok(config.registries)
@@ -610,6 +610,8 @@ impl ModuleRegistry {
.file_fetcher
.fetch(&endpoint, PermissionsContainer::allow_all())
.await
+ .ok()?
+ .into_text_decoded()
.ok()?;
let documentation: lsp::Documentation =
serde_json::from_str(&file.source).ok()?;
@@ -974,6 +976,8 @@ impl ModuleRegistry {
.file_fetcher
.fetch(&specifier, PermissionsContainer::allow_all())
.await
+ .ok()?
+ .into_text_decoded()
.ok()?;
serde_json::from_str(&file.source).ok()
}
@@ -1037,6 +1041,8 @@ impl ModuleRegistry {
specifier, err
);
})
+ .ok()?
+ .into_text_decoded()
.ok()?;
let items: VariableItems = serde_json::from_str(&file.source)
.map_err(|err| {
@@ -1073,6 +1079,8 @@ impl ModuleRegistry {
specifier, err
);
})
+ .ok()?
+ .into_text_decoded()
.ok()?;
let items: VariableItems = serde_json::from_str(&file.source)
.map_err(|err| {
diff --git a/cli/lsp/urls.rs b/cli/lsp/urls.rs
index b8f3037ba..f1e75c9dd 100644
--- a/cli/lsp/urls.rs
+++ b/cli/lsp/urls.rs
@@ -1,11 +1,8 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
use crate::cache::LocalLspHttpCache;
-use crate::file_fetcher::map_content_type;
-use data_url::DataUrl;
use deno_ast::MediaType;
-use deno_core::error::uri_error;
use deno_core::error::AnyError;
use deno_core::parking_lot::Mutex;
use deno_core::url::Position;
@@ -191,11 +188,8 @@ impl LspUrlMap {
let specifier_str = if specifier.scheme() == "asset" {
format!("deno:/asset{}", specifier.path())
} else if specifier.scheme() == "data" {
- let data_url = DataUrl::process(specifier.as_str())
- .map_err(|e| uri_error(format!("{e:?}")))?;
- let mime = data_url.mime_type();
- let (media_type, _) =
- map_content_type(specifier, Some(&format!("{mime}")));
+ let data_url = deno_graph::source::RawDataUrl::parse(specifier)?;
+ let media_type = data_url.media_type();
let extension = if media_type == MediaType::Unknown {
""
} else {