summaryrefslogtreecommitdiff
path: root/cli/lsp
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp')
-rw-r--r--cli/lsp/jsr.rs23
-rw-r--r--cli/lsp/language_server.rs7
-rw-r--r--cli/lsp/npm.rs38
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);