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