summaryrefslogtreecommitdiff
path: root/cli/lsp/language_server.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2022-10-20 13:23:21 -0400
committerGitHub <noreply@github.com>2022-10-20 13:23:21 -0400
commitda906de18437318527ae368932c2c8663db44f76 (patch)
treeca1e55b8a8380b452bb89ce3537f87980fa2c0da /cli/lsp/language_server.rs
parenta48d05fac779e53e92fe0e8b5668adf120f319e4 (diff)
fix(lsp): allow caching deps in non-saved files (#16353)
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r--cli/lsp/language_server.rs20
1 files changed, 16 insertions, 4 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs
index 9141f7288..27d69127c 100644
--- a/cli/lsp/language_server.rs
+++ b/cli/lsp/language_server.rs
@@ -14,6 +14,7 @@ use import_map::ImportMap;
use log::error;
use log::warn;
use serde_json::from_value;
+use std::collections::HashMap;
use std::env;
use std::fmt::Write as _;
use std::path::PathBuf;
@@ -2825,9 +2826,19 @@ impl Inner {
async fn create_graph_for_caching(
cli_options: CliOptions,
roots: Vec<(ModuleSpecifier, ModuleKind)>,
+ open_docs: Vec<Document>,
) -> Result<(), AnyError> {
+ let open_docs = open_docs
+ .into_iter()
+ .map(|d| (d.specifier().clone(), d))
+ .collect::<HashMap<_, _>>();
let ps = ProcState::from_options(Arc::new(cli_options)).await?;
- let graph = ps.create_graph(roots).await?;
+ let mut inner_loader = ps.create_graph_loader();
+ let mut loader = crate::lsp::documents::DocumentsDenoGraphLoader {
+ inner_loader: &mut inner_loader,
+ open_docs: &open_docs,
+ };
+ let graph = ps.create_graph_with_loader(roots, &mut loader).await?;
graph_valid(&graph, true, false)?;
Ok(())
}
@@ -2867,10 +2878,11 @@ impl Inner {
// todo(dsherret): why is running this on a new thread necessary? It does
// a compile error otherwise.
+ let open_docs = self.documents.documents(true, true);
let handle = tokio::task::spawn_blocking(|| {
- run_local(
- async move { create_graph_for_caching(cli_options, roots).await },
- )
+ run_local(async move {
+ create_graph_for_caching(cli_options, roots, open_docs).await
+ })
});
if let Err(err) = handle.await.unwrap() {
self.client.show_message(MessageType::WARNING, err).await;