diff options
Diffstat (limited to 'cli/lsp')
-rw-r--r-- | cli/lsp/jsr.rs | 23 | ||||
-rw-r--r-- | cli/lsp/language_server.rs | 7 | ||||
-rw-r--r-- | cli/lsp/npm.rs | 38 |
3 files changed, 26 insertions, 42 deletions
diff --git a/cli/lsp/jsr.rs b/cli/lsp/jsr.rs index 29ecec60b..a9c35aad6 100644 --- a/cli/lsp/jsr.rs +++ b/cli/lsp/jsr.rs @@ -15,20 +15,18 @@ use std::sync::Arc; use super::search::PackageSearchApi; -#[derive(Debug, Clone)] +#[derive(Debug)] pub struct CliJsrSearchApi { file_fetcher: FileFetcher, - /// We only store this here so the completion system has access to a resolver - /// that always uses the global cache. - resolver: Arc<JsrFetchResolver>, - search_cache: Arc<DashMap<String, Arc<Vec<String>>>>, - versions_cache: Arc<DashMap<String, Arc<Vec<Version>>>>, - exports_cache: Arc<DashMap<PackageNv, Arc<Vec<String>>>>, + resolver: JsrFetchResolver, + search_cache: DashMap<String, Arc<Vec<String>>>, + versions_cache: DashMap<String, Arc<Vec<Version>>>, + exports_cache: DashMap<PackageNv, Arc<Vec<String>>>, } impl CliJsrSearchApi { pub fn new(file_fetcher: FileFetcher) -> Self { - let resolver = Arc::new(JsrFetchResolver::new(file_fetcher.clone())); + let resolver = JsrFetchResolver::new(file_fetcher.clone()); Self { file_fetcher, resolver, @@ -38,7 +36,7 @@ impl CliJsrSearchApi { } } - pub fn get_resolver(&self) -> &Arc<JsrFetchResolver> { + pub fn get_resolver(&self) -> &JsrFetchResolver { &self.resolver } } @@ -49,12 +47,7 @@ impl PackageSearchApi for CliJsrSearchApi { if let Some(names) = self.search_cache.get(query) { return Ok(names.clone()); } - let mut search_url = jsr_api_url().clone(); - search_url - .path_segments_mut() - .map_err(|_| anyhow!("Custom jsr URL cannot be a base."))? - .pop_if_empty() - .push("packages"); + let mut search_url = jsr_api_url().join("packages")?; search_url.query_pairs_mut().append_pair("query", query); let file = self .file_fetcher diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index c22752e9e..3555a0545 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -875,9 +875,8 @@ impl Inner { None, ); deps_file_fetcher.set_download_log_level(super::logging::lsp_log_level()); - self.jsr_search_api = CliJsrSearchApi::new(deps_file_fetcher); - self.npm.search_api = - CliNpmSearchApi::new(self.module_registries.file_fetcher.clone()); + self.jsr_search_api = CliJsrSearchApi::new(deps_file_fetcher.clone()); + self.npm.search_api = CliNpmSearchApi::new(deps_file_fetcher); let maybe_local_cache = self.config.maybe_vendor_dir_path().map(|local_path| { Arc::new(LocalLspHttpCache::new(local_path, global_cache.clone())) @@ -1182,7 +1181,7 @@ async fn create_npm_resolver( // do not install while resolving in the lsp—leave that to the cache command package_json_installer: CliNpmResolverManagedPackageJsonInstallerOption::NoInstall, - npm_registry_url: crate::args::npm_registry_default_url().to_owned(), + npm_registry_url: crate::args::npm_registry_url().to_owned(), npm_system_info: NpmSystemInfo::default(), }) }) diff --git a/cli/lsp/npm.rs b/cli/lsp/npm.rs index 59156fe88..33cf48675 100644 --- a/cli/lsp/npm.rs +++ b/cli/lsp/npm.rs @@ -4,29 +4,32 @@ use dashmap::DashMap; use deno_core::anyhow::anyhow; use deno_core::error::AnyError; use deno_core::serde_json; -use deno_npm::registry::NpmPackageInfo; use deno_runtime::permissions::PermissionsContainer; use deno_semver::package::PackageNv; use deno_semver::Version; use serde::Deserialize; use std::sync::Arc; -use crate::args::npm_registry_default_url; +use crate::args::npm_registry_url; use crate::file_fetcher::FileFetcher; +use crate::npm::NpmFetchResolver; use super::search::PackageSearchApi; -#[derive(Debug, Clone)] +#[derive(Debug)] pub struct CliNpmSearchApi { file_fetcher: FileFetcher, - search_cache: Arc<DashMap<String, Arc<Vec<String>>>>, - versions_cache: Arc<DashMap<String, Arc<Vec<Version>>>>, + resolver: NpmFetchResolver, + search_cache: DashMap<String, Arc<Vec<String>>>, + versions_cache: DashMap<String, Arc<Vec<Version>>>, } impl CliNpmSearchApi { pub fn new(file_fetcher: FileFetcher) -> Self { + let resolver = NpmFetchResolver::new(file_fetcher.clone()); Self { file_fetcher, + resolver, search_cache: Default::default(), versions_cache: Default::default(), } @@ -39,12 +42,7 @@ impl PackageSearchApi for CliNpmSearchApi { if let Some(names) = self.search_cache.get(query) { return Ok(names.clone()); } - let mut search_url = npm_registry_default_url().clone(); - search_url - .path_segments_mut() - .map_err(|_| anyhow!("Custom npm registry URL cannot be a base."))? - .pop_if_empty() - .extend("-/v1/search".split('/')); + let mut search_url = npm_registry_url().join("-/v1/search")?; search_url .query_pairs_mut() .append_pair("text", &format!("{} boost-exact:false", query)); @@ -62,18 +60,12 @@ impl PackageSearchApi for CliNpmSearchApi { if let Some(versions) = self.versions_cache.get(name) { return Ok(versions.clone()); } - let mut info_url = npm_registry_default_url().clone(); - info_url - .path_segments_mut() - .map_err(|_| anyhow!("Custom npm registry URL cannot be a base."))? - .pop_if_empty() - .push(name); - let file = self - .file_fetcher - .fetch(&info_url, PermissionsContainer::allow_all()) - .await?; - let info = serde_json::from_slice::<NpmPackageInfo>(&file.source)?; - let mut versions = info.versions.into_keys().collect::<Vec<_>>(); + let info = self + .resolver + .package_info(name) + .await + .ok_or_else(|| anyhow!("npm package info not found: {}", name))?; + let mut versions = info.versions.keys().cloned().collect::<Vec<_>>(); versions.sort(); versions.reverse(); let versions = Arc::new(versions); |