diff options
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r-- | cli/lsp/documents.rs | 52 |
1 files changed, 41 insertions, 11 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 9c6710714..388f9f2e5 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -32,6 +32,7 @@ use deno_ast::SourceTextInfo; use deno_core::error::custom_error; use deno_core::error::AnyError; use deno_core::futures::future; +use deno_core::futures::FutureExt; use deno_core::parking_lot::Mutex; use deno_core::url; use deno_core::ModuleSpecifier; @@ -45,7 +46,7 @@ use deno_runtime::deno_node::PackageJson; use deno_runtime::permissions::PermissionsContainer; use deno_semver::npm::NpmPackageReqReference; use deno_semver::package::PackageReq; -use indexmap1::IndexMap; +use indexmap::IndexMap; use lsp::Url; use once_cell::sync::Lazy; use package_json::PackageJsonDepsProvider; @@ -1551,24 +1552,53 @@ pub struct OpenDocumentsGraphLoader<'a> { pub open_docs: &'a HashMap<ModuleSpecifier, Document>, } -impl<'a> deno_graph::source::Loader for OpenDocumentsGraphLoader<'a> { - fn load( - &mut self, +impl<'a> OpenDocumentsGraphLoader<'a> { + fn load_from_docs( + &self, specifier: &ModuleSpecifier, - is_dynamic: bool, - ) -> deno_graph::source::LoadFuture { + ) -> Option<deno_graph::source::LoadFuture> { if specifier.scheme() == "file" { if let Some(doc) = self.open_docs.get(specifier) { - return Box::pin(future::ready(Ok(Some( - deno_graph::source::LoadResponse::Module { + return Some( + future::ready(Ok(Some(deno_graph::source::LoadResponse::Module { content: doc.content(), specifier: doc.specifier().clone(), maybe_headers: None, - }, - )))); + }))) + .boxed_local(), + ); } } - self.inner_loader.load(specifier, is_dynamic) + None + } +} + +impl<'a> deno_graph::source::Loader for OpenDocumentsGraphLoader<'a> { + fn registry_url(&self) -> &Url { + self.inner_loader.registry_url() + } + + fn load( + &mut self, + specifier: &ModuleSpecifier, + is_dynamic: bool, + cache_setting: deno_graph::source::CacheSetting, + ) -> deno_graph::source::LoadFuture { + match self.load_from_docs(specifier) { + Some(fut) => fut, + None => self.inner_loader.load(specifier, is_dynamic, cache_setting), + } + } + + fn cache_module_info( + &mut self, + specifier: &deno_ast::ModuleSpecifier, + source: &str, + module_info: &deno_graph::ModuleInfo, + ) { + self + .inner_loader + .cache_module_info(specifier, source, module_info) } } |