diff options
Diffstat (limited to 'cli/lsp/documents.rs')
-rw-r--r-- | cli/lsp/documents.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index e395b565d..61db899e5 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -21,6 +21,7 @@ use deno_ast::ParsedSource; use deno_ast::SourceTextInfo; use deno_core::error::custom_error; use deno_core::error::AnyError; +use deno_core::futures::future; use deno_core::parking_lot::Mutex; use deno_core::url; use deno_core::ModuleSpecifier; @@ -1111,6 +1112,33 @@ impl Documents { } } +/// Loader that will look at the open documents. +pub struct DocumentsDenoGraphLoader<'a> { + pub inner_loader: &'a mut dyn deno_graph::source::Loader, + pub open_docs: &'a HashMap<ModuleSpecifier, Document>, +} + +impl<'a> deno_graph::source::Loader for DocumentsDenoGraphLoader<'a> { + fn load( + &mut self, + specifier: &ModuleSpecifier, + is_dynamic: bool, + ) -> 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 { + content: doc.content(), + specifier: doc.specifier().clone(), + maybe_headers: None, + }, + )))); + } + } + self.inner_loader.load(specifier, is_dynamic) + } +} + /// The default parser from `deno_graph` does not include the configuration /// options we require for the lsp. #[derive(Debug, Default)] |