summaryrefslogtreecommitdiff
path: root/cli/lsp
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-09-30 12:06:38 -0400
committerGitHub <noreply@github.com>2023-09-30 12:06:38 -0400
commit8d24be1a59714761665516e0d78d25059608c29b (patch)
treeaed0140b63441008cb9b549d44948f7a36a4f5f1 /cli/lsp
parent1cda3840ff673512f7c6d58fa8402c35c760bc3b (diff)
refactor(npm): create `cli::npm::managed` module (#20740)
Creates the `cli::npm::managed` module and starts moving more functionality into it.
Diffstat (limited to 'cli/lsp')
-rw-r--r--cli/lsp/analysis.rs7
-rw-r--r--cli/lsp/documents.rs37
-rw-r--r--cli/lsp/language_server.rs11
3 files changed, 22 insertions, 33 deletions
diff --git a/cli/lsp/analysis.rs b/cli/lsp/analysis.rs
index 1f12fb76b..8b2560f16 100644
--- a/cli/lsp/analysis.rs
+++ b/cli/lsp/analysis.rs
@@ -7,7 +7,6 @@ use super::language_server;
use super::tsc;
use crate::npm::CliNpmResolver;
-use crate::npm::NpmResolution;
use crate::tools::lint::create_linter;
use deno_ast::SourceRange;
@@ -162,7 +161,6 @@ fn code_as_string(code: &Option<lsp::NumberOrString>) -> String {
pub struct TsResponseImportMapper<'a> {
documents: &'a Documents,
maybe_import_map: Option<&'a ImportMap>,
- npm_resolution: &'a NpmResolution,
npm_resolver: &'a dyn CliNpmResolver,
}
@@ -170,13 +168,11 @@ impl<'a> TsResponseImportMapper<'a> {
pub fn new(
documents: &'a Documents,
maybe_import_map: Option<&'a ImportMap>,
- npm_resolution: &'a NpmResolution,
npm_resolver: &'a dyn CliNpmResolver,
) -> Self {
Self {
documents,
maybe_import_map,
- npm_resolution,
npm_resolver,
}
}
@@ -203,8 +199,7 @@ impl<'a> TsResponseImportMapper<'a> {
if let Ok(Some(pkg_id)) =
npm_resolver.resolve_pkg_id_from_specifier(specifier)
{
- let pkg_reqs =
- self.npm_resolution.resolve_pkg_reqs_from_pkg_id(&pkg_id);
+ let pkg_reqs = npm_resolver.resolve_pkg_reqs_from_pkg_id(&pkg_id);
// check if any pkg reqs match what is found in an import map
if !pkg_reqs.is_empty() {
let sub_path = self.resolve_package_path(specifier);
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs
index 14c01d13b..30f419249 100644
--- a/cli/lsp/documents.rs
+++ b/cli/lsp/documents.rs
@@ -17,9 +17,7 @@ use crate::file_fetcher::get_source_from_bytes;
use crate::file_fetcher::get_source_from_data_url;
use crate::file_fetcher::map_content_type;
use crate::lsp::logging::lsp_warn;
-use crate::npm::CliNpmRegistryApi;
-use crate::npm::NpmResolution;
-use crate::npm::PackageJsonDepsInstaller;
+use crate::npm::CliNpmResolver;
use crate::resolver::CliGraphResolver;
use crate::resolver::CliGraphResolverOptions;
use crate::util::glob;
@@ -860,8 +858,7 @@ pub struct UpdateDocumentConfigOptions<'a> {
pub maybe_import_map: Option<Arc<import_map::ImportMap>>,
pub maybe_config_file: Option<&'a ConfigFile>,
pub maybe_package_json: Option<&'a PackageJson>,
- pub npm_registry_api: Arc<CliNpmRegistryApi>,
- pub npm_resolution: Arc<NpmResolution>,
+ pub npm_resolver: Option<Arc<dyn CliNpmResolver>>,
}
/// Specify the documents to include on a `documents.documents(...)` call.
@@ -917,7 +914,15 @@ impl Documents {
file_system_docs: Default::default(),
resolver_config_hash: 0,
imports: Default::default(),
- resolver: Default::default(),
+ resolver: Arc::new(CliGraphResolver::new(
+ None,
+ Arc::new(PackageJsonDepsProvider::default()),
+ CliGraphResolverOptions {
+ maybe_jsx_import_source_config: None,
+ maybe_import_map: None,
+ maybe_vendor_dir: None,
+ },
+ )),
npm_specifier_reqs: Default::default(),
has_injected_types_node_package: false,
specifier_resolver: Arc::new(SpecifierResolver::new(cache)),
@@ -1293,12 +1298,9 @@ impl Documents {
);
let deps_provider =
Arc::new(PackageJsonDepsProvider::new(maybe_package_json_deps));
- let deps_installer = Arc::new(PackageJsonDepsInstaller::no_op());
self.resolver = Arc::new(CliGraphResolver::new(
- options.npm_registry_api,
- options.npm_resolution,
+ options.npm_resolver,
deps_provider,
- deps_installer,
CliGraphResolverOptions {
maybe_jsx_import_source_config: maybe_jsx_config,
maybe_import_map: options.maybe_import_map,
@@ -1306,7 +1308,6 @@ impl Documents {
.maybe_config_file
.and_then(|c| c.vendor_dir_path())
.as_ref(),
- no_npm: false,
},
));
self.imports = Arc::new(
@@ -1938,7 +1939,6 @@ fn sort_and_remove_non_leaf_dirs(mut dirs: Vec<PathBuf>) -> Vec<PathBuf> {
mod tests {
use crate::cache::GlobalHttpCache;
use crate::cache::RealDenoCacheEnv;
- use crate::npm::NpmResolution;
use super::*;
use import_map::ImportMap;
@@ -2046,13 +2046,6 @@ console.log(b, "hello deno");
#[test]
fn test_documents_refresh_dependencies_config_change() {
- let npm_registry_api = Arc::new(CliNpmRegistryApi::new_uninitialized());
- let npm_resolution = Arc::new(NpmResolution::from_serialized(
- npm_registry_api.clone(),
- None,
- None,
- ));
-
// it should never happen that a user of this API causes this to happen,
// but we'll guard against it anyway
let temp_dir = TempDir::new();
@@ -2089,8 +2082,7 @@ console.log(b, "hello deno");
maybe_import_map: Some(Arc::new(import_map)),
maybe_config_file: None,
maybe_package_json: None,
- npm_registry_api: npm_registry_api.clone(),
- npm_resolution: npm_resolution.clone(),
+ npm_resolver: None,
});
// open the document
@@ -2131,8 +2123,7 @@ console.log(b, "hello deno");
maybe_import_map: Some(Arc::new(import_map)),
maybe_config_file: None,
maybe_package_json: None,
- npm_registry_api,
- npm_resolution,
+ npm_resolver: None,
});
// check the document's dependencies
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs
index 9b3500361..7bed7b1bf 100644
--- a/cli/lsp/language_server.rs
+++ b/cli/lsp/language_server.rs
@@ -109,6 +109,7 @@ use crate::npm::ManagedCliNpmResolver;
use crate::npm::NpmCache;
use crate::npm::NpmCacheDir;
use crate::npm::NpmResolution;
+use crate::npm::PackageJsonDepsInstaller;
use crate::tools::fmt::format_file;
use crate::tools::fmt::format_parsed_source;
use crate::util::fs::remove_dir_all_if_exists;
@@ -509,7 +510,7 @@ fn create_npm_resolver_and_resolution(
maybe_snapshot: Option<ValidSerializedNpmResolutionSnapshot>,
) -> (Arc<dyn CliNpmResolver>, Arc<NpmResolution>) {
let resolution = Arc::new(NpmResolution::from_serialized(
- api,
+ api.clone(),
maybe_snapshot,
// Don't provide the lockfile. We don't want these resolvers
// updating it. Only the cache request should update the lockfile.
@@ -527,12 +528,14 @@ fn create_npm_resolver_and_resolution(
);
(
Arc::new(ManagedCliNpmResolver::new(
+ api,
fs,
resolution.clone(),
fs_resolver,
// Don't provide the lockfile. We don't want these resolvers
// updating it. Only the cache request should update the lockfile.
None,
+ Arc::new(PackageJsonDepsInstaller::no_op()),
)),
resolution,
)
@@ -804,6 +807,7 @@ impl Inner {
));
let node_fs = Arc::new(deno_fs::RealFs);
let npm_resolver = Arc::new(ManagedCliNpmResolver::new(
+ self.npm.api.clone(),
node_fs.clone(),
npm_resolution.clone(),
create_npm_fs_resolver(
@@ -816,6 +820,7 @@ impl Inner {
NpmSystemInfo::default(),
),
self.config.maybe_lockfile().cloned(),
+ Arc::new(PackageJsonDepsInstaller::no_op()),
));
let node_resolver =
Arc::new(NodeResolver::new(node_fs, npm_resolver.clone()));
@@ -1366,8 +1371,7 @@ impl Inner {
maybe_import_map: self.maybe_import_map.clone(),
maybe_config_file: self.config.maybe_config_file(),
maybe_package_json: self.maybe_package_json.as_ref(),
- npm_registry_api: self.npm.api.clone(),
- npm_resolution: self.npm.resolution.clone(),
+ npm_resolver: Some(self.npm.resolver.clone()),
});
// refresh the npm specifiers because it might have discovered
@@ -2161,7 +2165,6 @@ impl Inner {
TsResponseImportMapper::new(
&self.documents,
self.maybe_import_map.as_deref(),
- &self.npm.resolution,
self.npm.resolver.as_ref(),
)
}