summaryrefslogtreecommitdiff
path: root/cli/lsp/completions.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-03-01 21:34:13 +0000
committerGitHub <noreply@github.com>2024-03-01 21:34:13 +0000
commit15f5f74eb745915e68b3bc16b9ec048b94e26b97 (patch)
tree2cf1b5a4febadffa77fb0a82fb2e273093034545 /cli/lsp/completions.rs
parent2e4a1fc3e89d00e060ca9d747b6887dae215f0eb (diff)
feat(unstable/pm): support version contraints in 'deno add' (#22646)
Diffstat (limited to 'cli/lsp/completions.rs')
-rw-r--r--cli/lsp/completions.rs53
1 files changed, 13 insertions, 40 deletions
diff --git a/cli/lsp/completions.rs b/cli/lsp/completions.rs
index 074d913c5..2186949fb 100644
--- a/cli/lsp/completions.rs
+++ b/cli/lsp/completions.rs
@@ -6,13 +6,13 @@ use super::config::WorkspaceSettings;
use super::documents::Documents;
use super::documents::DocumentsFilter;
use super::jsr::CliJsrSearchApi;
-use super::jsr::JsrResolver;
use super::lsp_custom;
use super::npm::CliNpmSearchApi;
use super::registries::ModuleRegistry;
use super::search::PackageSearchApi;
use super::tsc;
+use crate::jsr::JsrFetchResolver;
use crate::util::path::is_importable_ext;
use crate::util::path::relative_specifier;
use crate::util::path::specifier_to_file_path;
@@ -181,7 +181,7 @@ pub async fn get_import_completions(
&text,
&range,
jsr_search_api,
- jsr_search_api.get_resolver(),
+ Some(jsr_search_api.get_resolver()),
)
.await?;
Some(lsp::CompletionResponse::List(lsp::CompletionList {
@@ -518,7 +518,7 @@ async fn get_jsr_completions(
specifier: &str,
range: &lsp::Range,
jsr_search_api: &impl PackageSearchApi,
- jsr_resolver: &JsrResolver,
+ jsr_resolver: Option<&JsrFetchResolver>,
) -> Option<Vec<lsp::CompletionItem>> {
// First try to match `jsr:some-package@some-version/<export-to-complete>`.
if let Ok(req_ref) = JsrPackageReqReference::from_str(specifier) {
@@ -526,7 +526,10 @@ async fn get_jsr_completions(
if sub_path.is_some() || specifier.ends_with('/') {
let export_prefix = sub_path.unwrap_or("");
let req = req_ref.req();
- let nv = jsr_resolver.req_to_nv(req);
+ let nv = match jsr_resolver {
+ Some(jsr_resolver) => jsr_resolver.req_to_nv(req).await,
+ None => None,
+ };
let nv = nv.or_else(|| PackageNv::from_str(&req.to_string()).ok())?;
let exports = jsr_search_api.exports(&nv).await.ok()?;
let items = exports
@@ -799,7 +802,6 @@ mod tests {
use super::*;
use crate::cache::GlobalHttpCache;
use crate::cache::HttpCache;
- use crate::cache::RealDenoCacheEnv;
use crate::lsp::documents::Documents;
use crate::lsp::documents::LanguageId;
use crate::lsp::search::tests::TestPackageSearchApi;
@@ -1007,14 +1009,6 @@ mod tests {
#[tokio::test]
async fn test_get_jsr_completions() {
- let temp_dir = TempDir::default();
- let jsr_resolver = JsrResolver::from_cache_and_lockfile(
- Arc::new(GlobalHttpCache::new(
- temp_dir.path().to_path_buf(),
- RealDenoCacheEnv,
- )),
- None,
- );
let jsr_search_api = TestPackageSearchApi::default()
.with_package_version("@std/archive", "1.0.0", &[])
.with_package_version("@std/assert", "1.0.0", &[])
@@ -1031,15 +1025,10 @@ mod tests {
},
};
let referrer = ModuleSpecifier::parse("file:///referrer.ts").unwrap();
- let actual = get_jsr_completions(
- &referrer,
- "jsr:as",
- &range,
- &jsr_search_api,
- &jsr_resolver,
- )
- .await
- .unwrap();
+ let actual =
+ get_jsr_completions(&referrer, "jsr:as", &range, &jsr_search_api, None)
+ .await
+ .unwrap();
assert_eq!(
actual,
vec![
@@ -1095,14 +1084,6 @@ mod tests {
#[tokio::test]
async fn test_get_jsr_completions_for_versions() {
- let temp_dir = TempDir::default();
- let jsr_resolver = JsrResolver::from_cache_and_lockfile(
- Arc::new(GlobalHttpCache::new(
- temp_dir.path().to_path_buf(),
- RealDenoCacheEnv,
- )),
- None,
- );
let jsr_search_api = TestPackageSearchApi::default()
.with_package_version("@std/assert", "0.3.0", &[])
.with_package_version("@std/assert", "0.4.0", &[])
@@ -1123,7 +1104,7 @@ mod tests {
"jsr:@std/assert@",
&range,
&jsr_search_api,
- &jsr_resolver,
+ None,
)
.await
.unwrap();
@@ -1205,14 +1186,6 @@ mod tests {
#[tokio::test]
async fn test_get_jsr_completions_for_exports() {
- let temp_dir = TempDir::default();
- let jsr_resolver = JsrResolver::from_cache_and_lockfile(
- Arc::new(GlobalHttpCache::new(
- temp_dir.path().to_path_buf(),
- RealDenoCacheEnv,
- )),
- None,
- );
let jsr_search_api = TestPackageSearchApi::default().with_package_version(
"@std/path",
"0.1.0",
@@ -1234,7 +1207,7 @@ mod tests {
"jsr:@std/path@0.1.0/co",
&range,
&jsr_search_api,
- &jsr_resolver,
+ None,
)
.await
.unwrap();