diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-09-30 12:06:38 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-30 12:06:38 -0400 |
commit | 8d24be1a59714761665516e0d78d25059608c29b (patch) | |
tree | aed0140b63441008cb9b549d44948f7a36a4f5f1 /cli/lsp | |
parent | 1cda3840ff673512f7c6d58fa8402c35c760bc3b (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.rs | 7 | ||||
-rw-r--r-- | cli/lsp/documents.rs | 37 | ||||
-rw-r--r-- | cli/lsp/language_server.rs | 11 |
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(), ) } |