diff options
Diffstat (limited to 'cli/lsp')
-rw-r--r-- | cli/lsp/documents.rs | 66 | ||||
-rw-r--r-- | cli/lsp/language_server.rs | 42 | ||||
-rw-r--r-- | cli/lsp/tsc.rs | 2 |
3 files changed, 54 insertions, 56 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index c003a61c7..7b206406c 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -17,11 +17,9 @@ use crate::file_fetcher::get_source_from_bytes; use crate::file_fetcher::map_content_type; use crate::file_fetcher::SUPPORTED_SCHEMES; use crate::lsp::logging::lsp_warn; -use crate::node; -use crate::node::node_resolve_npm_reference; +use crate::node::CliNodeResolver; use crate::node::NodeResolution; use crate::npm::CliNpmRegistryApi; -use crate::npm::NpmPackageResolver; use crate::npm::NpmResolution; use crate::npm::PackageJsonDepsInstaller; use crate::resolver::CliGraphResolver; @@ -1057,7 +1055,7 @@ impl Documents { &self, specifiers: Vec<String>, referrer_doc: &AssetOrDocument, - maybe_npm_resolver: Option<&Arc<NpmPackageResolver>>, + maybe_node_resolver: Option<&Arc<CliNodeResolver>>, ) -> Vec<Option<(ModuleSpecifier, MediaType)>> { let referrer = referrer_doc.specifier(); let dependencies = match referrer_doc { @@ -1066,19 +1064,19 @@ impl Documents { }; let mut results = Vec::new(); for specifier in specifiers { - if let Some(npm_resolver) = maybe_npm_resolver { - if npm_resolver.in_npm_package(referrer) { + if let Some(node_resolver) = maybe_node_resolver { + if node_resolver.in_npm_package(referrer) { // we're in an npm package, so use node resolution results.push(Some(NodeResolution::into_specifier_and_media_type( - node::node_resolve( - &specifier, - referrer, - NodeResolutionMode::Types, - &npm_resolver.as_require_npm_resolver(), - &mut PermissionsContainer::allow_all(), - ) - .ok() - .flatten(), + node_resolver + .resolve( + &specifier, + referrer, + NodeResolutionMode::Types, + &mut PermissionsContainer::allow_all(), + ) + .ok() + .flatten(), ))); continue; } @@ -1106,9 +1104,9 @@ impl Documents { dependencies.as_ref().and_then(|d| d.deps.get(&specifier)) { if let Some(specifier) = dep.maybe_type.maybe_specifier() { - results.push(self.resolve_dependency(specifier, maybe_npm_resolver)); + results.push(self.resolve_dependency(specifier, maybe_node_resolver)); } else if let Some(specifier) = dep.maybe_code.maybe_specifier() { - results.push(self.resolve_dependency(specifier, maybe_npm_resolver)); + results.push(self.resolve_dependency(specifier, maybe_node_resolver)); } else { results.push(None); } @@ -1116,11 +1114,12 @@ impl Documents { .resolve_imports_dependency(&specifier) .and_then(|r| r.maybe_specifier()) { - results.push(self.resolve_dependency(specifier, maybe_npm_resolver)); + results.push(self.resolve_dependency(specifier, maybe_node_resolver)); } else if let Ok(npm_req_ref) = NpmPackageReqReference::from_str(&specifier) { - results.push(node_resolve_npm_req_ref(npm_req_ref, maybe_npm_resolver)); + results + .push(node_resolve_npm_req_ref(npm_req_ref, maybe_node_resolver)); } else { results.push(None); } @@ -1418,10 +1417,10 @@ impl Documents { fn resolve_dependency( &self, specifier: &ModuleSpecifier, - maybe_npm_resolver: Option<&Arc<NpmPackageResolver>>, + maybe_node_resolver: Option<&Arc<CliNodeResolver>>, ) -> Option<(ModuleSpecifier, MediaType)> { if let Ok(npm_ref) = NpmPackageReqReference::from_specifier(specifier) { - return node_resolve_npm_req_ref(npm_ref, maybe_npm_resolver); + return node_resolve_npm_req_ref(npm_ref, maybe_node_resolver); } let doc = self.get(specifier)?; let maybe_module = doc.maybe_esm_module().and_then(|r| r.as_ref().ok()); @@ -1430,7 +1429,7 @@ impl Documents { if let Some(specifier) = maybe_types_dependency.and_then(|d| d.maybe_specifier()) { - self.resolve_dependency(specifier, maybe_npm_resolver) + self.resolve_dependency(specifier, maybe_node_resolver) } else { let media_type = doc.media_type(); Some((specifier.clone(), media_type)) @@ -1453,23 +1452,18 @@ impl Documents { fn node_resolve_npm_req_ref( npm_req_ref: NpmPackageReqReference, - maybe_npm_resolver: Option<&Arc<NpmPackageResolver>>, + maybe_node_resolver: Option<&Arc<CliNodeResolver>>, ) -> Option<(ModuleSpecifier, MediaType)> { - maybe_npm_resolver.map(|npm_resolver| { + maybe_node_resolver.map(|node_resolver| { NodeResolution::into_specifier_and_media_type( - npm_resolver - .pkg_req_ref_to_nv_ref(npm_req_ref) + node_resolver + .resolve_npm_req_reference( + &npm_req_ref, + NodeResolutionMode::Types, + &mut PermissionsContainer::allow_all(), + ) .ok() - .and_then(|pkg_id_ref| { - node_resolve_npm_reference( - &pkg_id_ref, - NodeResolutionMode::Types, - npm_resolver, - &mut PermissionsContainer::allow_all(), - ) - .ok() - .flatten() - }), + .flatten(), ) }) } diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 3f395f410..239ff8a6e 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -78,6 +78,7 @@ use crate::file_fetcher::FileFetcher; use crate::graph_util; use crate::http_util::HttpClient; use crate::lsp::urls::LspUrlKind; +use crate::node::CliNodeResolver; use crate::npm::create_npm_fs_resolver; use crate::npm::CliNpmRegistryApi; use crate::npm::NpmCache; @@ -101,6 +102,7 @@ pub struct StateSnapshot { pub cache_metadata: cache::CacheMetadata, pub documents: Documents, pub maybe_import_map: Option<Arc<ImportMap>>, + pub maybe_node_resolver: Option<Arc<CliNodeResolver>>, pub maybe_npm_resolver: Option<Arc<NpmPackageResolver>>, } @@ -695,30 +697,32 @@ impl Inner { } pub fn snapshot(&self) -> Arc<StateSnapshot> { + // create a new snapshotted npm resolution and resolver + let npm_resolution = Arc::new(NpmResolution::new( + self.npm_api.clone(), + self.npm_resolution.snapshot(), + None, + )); + let npm_resolver = Arc::new(NpmPackageResolver::new( + npm_resolution.clone(), + create_npm_fs_resolver( + self.npm_cache.clone(), + &ProgressBar::new(ProgressBarStyle::TextOnly), + self.npm_api.base_url().clone(), + npm_resolution.clone(), + None, + ), + None, + )); + let node_resolver = + Arc::new(CliNodeResolver::new(npm_resolution, npm_resolver.clone())); Arc::new(StateSnapshot { assets: self.assets.snapshot(), cache_metadata: self.cache_metadata.clone(), documents: self.documents.clone(), maybe_import_map: self.maybe_import_map.clone(), - maybe_npm_resolver: Some({ - // create a new snapshotted npm resolution and resolver - let resolution = Arc::new(NpmResolution::new( - self.npm_api.clone(), - self.npm_resolution.snapshot(), - None, - )); - Arc::new(NpmPackageResolver::new( - resolution.clone(), - create_npm_fs_resolver( - self.npm_cache.clone(), - &ProgressBar::new(ProgressBarStyle::TextOnly), - self.npm_api.base_url().clone(), - resolution, - None, - ), - None, - )) - }), + maybe_node_resolver: Some(node_resolver), + maybe_npm_resolver: Some(npm_resolver), }) } diff --git a/cli/lsp/tsc.rs b/cli/lsp/tsc.rs index eba3c5b3e..c6035192c 100644 --- a/cli/lsp/tsc.rs +++ b/cli/lsp/tsc.rs @@ -2763,7 +2763,7 @@ fn op_resolve( let resolved = state.state_snapshot.documents.resolve( args.specifiers, &referrer_doc, - state.state_snapshot.maybe_npm_resolver.as_ref(), + state.state_snapshot.maybe_node_resolver.as_ref(), ); Ok( resolved |