diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-07-01 21:07:57 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-02 01:07:57 +0000 |
commit | cfbc9b471f9ae0a00639b69623068021a6cfcbbd (patch) | |
tree | 6609ee07363f0e5b415b9a12706dd72fa93d41c7 /cli/npm/resolution.rs | |
parent | e746b6d80654ba4e4e26370fe6e4f784ce841d92 (diff) |
feat(lsp): basic support of auto-imports for npm specifiers (#19675)
Closes #19625
Closes https://github.com/denoland/vscode_deno/issues/857
Diffstat (limited to 'cli/npm/resolution.rs')
-rw-r--r-- | cli/npm/resolution.rs | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/cli/npm/resolution.rs b/cli/npm/resolution.rs index 37c8aa08c..95d9fd4c9 100644 --- a/cli/npm/resolution.rs +++ b/cli/npm/resolution.rs @@ -16,6 +16,7 @@ use deno_npm::resolution::NpmResolutionError; use deno_npm::resolution::NpmResolutionSnapshot; use deno_npm::resolution::NpmResolutionSnapshotPendingResolver; use deno_npm::resolution::NpmResolutionSnapshotPendingResolverOptions; +use deno_npm::resolution::PackageCacheFolderIdNotFoundError; use deno_npm::resolution::PackageNotFoundFromReferrerError; use deno_npm::resolution::PackageNvNotFoundError; use deno_npm::resolution::PackageReqNotFoundError; @@ -145,7 +146,7 @@ impl NpmResolution { Ok(()) } - pub fn resolve_package_cache_folder_id_from_id( + pub fn resolve_pkg_cache_folder_id_from_pkg_id( &self, id: &NpmPackageId, ) -> Option<NpmPackageCacheFolderId> { @@ -156,6 +157,17 @@ impl NpmResolution { .map(|p| p.get_package_cache_folder_id()) } + pub fn resolve_pkg_id_from_pkg_cache_folder_id( + &self, + id: &NpmPackageCacheFolderId, + ) -> Result<NpmPackageId, PackageCacheFolderIdNotFoundError> { + self + .snapshot + .read() + .resolve_pkg_from_pkg_cache_folder_id(id) + .map(|pkg| pkg.id.clone()) + } + pub fn resolve_package_from_package( &self, name: &str, @@ -180,6 +192,21 @@ impl NpmResolution { .map(|pkg| pkg.id.clone()) } + pub fn resolve_pkg_reqs_from_pkg_id( + &self, + id: &NpmPackageId, + ) -> Vec<NpmPackageReq> { + let snapshot = self.snapshot.read(); + let mut pkg_reqs = snapshot + .package_reqs() + .iter() + .filter(|(_, nv)| *nv == &id.nv) + .map(|(req, _)| req.clone()) + .collect::<Vec<_>>(); + pkg_reqs.sort(); // be deterministic + pkg_reqs + } + pub fn resolve_pkg_id_from_deno_module( &self, id: &NpmPackageNv, |