diff options
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r-- | cli/lsp/documents.rs | 42 |
1 files changed, 24 insertions, 18 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 |