diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-06-03 17:17:08 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-03 21:17:08 +0000 |
commit | 3341c50b6ae676cdc8f7b1c44221aa633f2bde68 (patch) | |
tree | e051e384d722403ea0a04402679a358ef61002dc /cli/lsp/language_server.rs | |
parent | 72088f2f52d65b2948155a11e7b56722bf6c10f9 (diff) |
refactor: don't share `reqwest::HttpClient` across tokio runtimes (#24092)
This also fixes several issues where we weren't properly creating http
clients with the user's settings.
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 45b691b3f..e362a9e7e 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -92,7 +92,7 @@ use crate::args::Flags; use crate::factory::CliFactory; use crate::file_fetcher::FileFetcher; use crate::graph_util; -use crate::http_util::HttpClient; +use crate::http_util::HttpClientProvider; use crate::lsp::config::ConfigWatchedFileType; use crate::lsp::logging::init_log_file; use crate::lsp::tsc::file_text_changes_to_workspace_edit; @@ -191,7 +191,7 @@ pub struct Inner { /// The collection of documents that the server is currently handling, either /// on disk or "open" within the client. pub documents: Documents, - http_client: Arc<HttpClient>, + http_client_provider: Arc<HttpClientProvider>, initial_cwd: PathBuf, jsr_search_api: CliJsrSearchApi, /// Handles module registries, which allow discovery of modules @@ -475,10 +475,10 @@ impl LanguageServer { impl Inner { fn new(client: Client) -> Self { let cache = LspCache::default(); - let http_client = Arc::new(HttpClient::new(None, None)); + let http_client_provider = Arc::new(HttpClientProvider::new(None, None)); let module_registry = ModuleRegistry::new( cache.deno_dir().registries_folder_path(), - http_client.clone(), + http_client_provider.clone(), ); let jsr_search_api = CliJsrSearchApi::new(module_registry.file_fetcher.clone()); @@ -508,7 +508,7 @@ impl Inner { diagnostics_state, diagnostics_server, documents, - http_client, + http_client_provider, initial_cwd: initial_cwd.clone(), jsr_search_api, project_version: 0, @@ -652,7 +652,7 @@ impl Inner { .unwrap_or_else(|_| RootCertStore::empty()); let root_cert_store_provider = Arc::new(LspRootCertStoreProvider(root_cert_store)); - self.http_client = Arc::new(HttpClient::new( + self.http_client_provider = Arc::new(HttpClientProvider::new( Some(root_cert_store_provider), workspace_settings .unsafely_ignore_certificate_errors @@ -660,7 +660,7 @@ impl Inner { )); self.module_registry = ModuleRegistry::new( deno_dir.registries_folder_path(), - self.http_client.clone(), + self.http_client_provider.clone(), ); let workspace_settings = self.config.workspace_settings(); for (registry, enabled) in workspace_settings.suggest.imports.hosts.iter() { @@ -939,11 +939,12 @@ impl Inner { self.cache.global().clone(), CacheSetting::RespectHeaders, true, - self.http_client.clone(), + self.http_client_provider.clone(), Default::default(), None, ); file_fetcher.set_download_log_level(super::logging::lsp_log_level()); + let file_fetcher = Arc::new(file_fetcher); self .config .tree @@ -983,7 +984,7 @@ impl Inner { LspResolver::from_config( &self.config, &self.cache, - Some(&self.http_client), + Some(&self.http_client_provider), ) .await, ); @@ -1108,7 +1109,7 @@ impl Inner { async fn refresh_npm_specifiers(&mut self) { let package_reqs = self.documents.npm_package_reqs(); let resolver = self.resolver.clone(); - // spawn to avoid the LSP's Send requirements + // spawn due to the lsp's `Send` requirement let handle = spawn(async move { resolver.set_npm_package_reqs(&package_reqs).await }); if let Err(err) = handle.await.unwrap() { @@ -2966,7 +2967,7 @@ impl tower_lsp::LanguageServer for LanguageServer { ); } - (inner.client.clone(), inner.http_client.clone()) + (inner.client.clone(), inner.http_client_provider.clone()) }; for registration in registrations { |