diff options
Diffstat (limited to 'cli/lsp')
-rw-r--r-- | cli/lsp/analysis.rs | 6 | ||||
-rw-r--r-- | cli/lsp/documents.rs | 40 | ||||
-rw-r--r-- | cli/lsp/language_server.rs | 27 |
3 files changed, 37 insertions, 36 deletions
diff --git a/cli/lsp/analysis.rs b/cli/lsp/analysis.rs index 3dd78e428..71f07275e 100644 --- a/cli/lsp/analysis.rs +++ b/cli/lsp/analysis.rs @@ -8,6 +8,7 @@ use super::tsc; use crate::args::jsr_url; use crate::npm::CliNpmResolver; +use crate::resolver::CliNodeResolver; use crate::tools::lint::create_linter; use crate::util::path::specifier_to_file_path; @@ -23,7 +24,6 @@ use deno_core::serde_json::json; use deno_core::ModuleSpecifier; use deno_lint::diagnostic::LintDiagnostic; use deno_lint::rules::LintRule; -use deno_runtime::deno_node::NodeResolver; use deno_runtime::deno_node::NpmResolver; use deno_runtime::deno_node::PathClean; use deno_runtime::permissions::PermissionsContainer; @@ -179,7 +179,7 @@ fn code_as_string(code: &Option<lsp::NumberOrString>) -> String { pub struct TsResponseImportMapper<'a> { documents: &'a Documents, maybe_import_map: Option<&'a ImportMap>, - node_resolver: Option<&'a NodeResolver>, + node_resolver: Option<&'a CliNodeResolver>, npm_resolver: Option<&'a dyn CliNpmResolver>, } @@ -187,7 +187,7 @@ impl<'a> TsResponseImportMapper<'a> { pub fn new( documents: &'a Documents, maybe_import_map: Option<&'a ImportMap>, - node_resolver: Option<&'a NodeResolver>, + node_resolver: Option<&'a CliNodeResolver>, npm_resolver: Option<&'a dyn CliNpmResolver>, ) -> Self { Self { diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 21a613bfa..b825bc020 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -19,6 +19,7 @@ use crate::lsp::logging::lsp_warn; use crate::npm::CliNpmResolver; use crate::resolver::CliGraphResolver; use crate::resolver::CliGraphResolverOptions; +use crate::resolver::CliNodeResolver; use crate::resolver::SloppyImportsFsEntry; use crate::resolver::SloppyImportsResolution; use crate::resolver::SloppyImportsResolver; @@ -40,11 +41,9 @@ use deno_graph::source::ResolutionMode; use deno_graph::GraphImport; use deno_graph::Resolution; use deno_lockfile::Lockfile; -use deno_runtime::deno_fs::RealFs; use deno_runtime::deno_node; use deno_runtime::deno_node::NodeResolution; use deno_runtime::deno_node::NodeResolutionMode; -use deno_runtime::deno_node::NodeResolver; use deno_runtime::deno_node::PackageJson; use deno_runtime::permissions::PermissionsContainer; use deno_semver::jsr::JsrPackageReqReference; @@ -835,7 +834,7 @@ pub struct UpdateDocumentConfigOptions<'a> { pub maybe_config_file: Option<&'a ConfigFile>, pub maybe_package_json: Option<&'a PackageJson>, pub maybe_lockfile: Option<Arc<Mutex<Lockfile>>>, - pub node_resolver: Option<Arc<NodeResolver>>, + pub node_resolver: Option<Arc<CliNodeResolver>>, pub npm_resolver: Option<Arc<dyn CliNpmResolver>>, } @@ -897,10 +896,8 @@ impl Documents { resolver_config_hash: 0, imports: Default::default(), resolver: Arc::new(CliGraphResolver::new(CliGraphResolverOptions { - fs: Arc::new(RealFs), node_resolver: None, npm_resolver: None, - cjs_resolutions: None, package_json_deps_provider: Arc::new(PackageJsonDepsProvider::default()), maybe_jsx_import_source_config: None, maybe_import_map: None, @@ -1273,7 +1270,7 @@ impl Documents { NpmPackageReqReference::from_str(&specifier) { results.push(node_resolve_npm_req_ref( - npm_req_ref, + &npm_req_ref, maybe_npm, referrer, )); @@ -1408,12 +1405,9 @@ impl Documents { ); let deps_provider = Arc::new(PackageJsonDepsProvider::new(maybe_package_json_deps)); - let fs = Arc::new(RealFs); self.resolver = Arc::new(CliGraphResolver::new(CliGraphResolverOptions { - fs: fs.clone(), node_resolver: options.node_resolver, npm_resolver: options.npm_resolver, - cjs_resolutions: None, // only used for runtime package_json_deps_provider: deps_provider, maybe_jsx_import_source_config: maybe_jsx_config, maybe_import_map: options.maybe_import_map, @@ -1693,7 +1687,7 @@ impl Documents { } if let Ok(npm_ref) = NpmPackageReqReference::from_specifier(specifier) { - return node_resolve_npm_req_ref(npm_ref, maybe_npm, referrer); + return node_resolve_npm_req_ref(&npm_ref, maybe_npm, referrer); } let doc = self.get(specifier)?; let maybe_module = doc.maybe_js_module().and_then(|r| r.as_ref().ok()); @@ -1724,29 +1718,21 @@ impl Documents { } fn node_resolve_npm_req_ref( - npm_req_ref: NpmPackageReqReference, + npm_req_ref: &NpmPackageReqReference, maybe_npm: Option<&StateNpmSnapshot>, referrer: &ModuleSpecifier, ) -> Option<(ModuleSpecifier, MediaType)> { maybe_npm.map(|npm| { NodeResolution::into_specifier_and_media_type( npm - .npm_resolver - .resolve_pkg_folder_from_deno_module_req(npm_req_ref.req(), referrer) - .ok() - .and_then(|package_folder| { - npm - .node_resolver - .resolve_package_subpath_from_deno_module( - &package_folder, - npm_req_ref.sub_path(), - referrer, - NodeResolutionMode::Types, - &PermissionsContainer::allow_all(), - ) - .ok() - .flatten() - }), + .node_resolver + .resolve_req_reference( + npm_req_ref, + &PermissionsContainer::allow_all(), + referrer, + NodeResolutionMode::Types, + ) + .ok(), ) }) } diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index b108eb54e..c22752e9e 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -121,6 +121,7 @@ use crate::npm::CliNpmResolverCreateOptions; use crate::npm::CliNpmResolverManagedCreateOptions; use crate::npm::CliNpmResolverManagedPackageJsonInstallerOption; use crate::npm::CliNpmResolverManagedSnapshotOption; +use crate::resolver::CliNodeResolver; use crate::tools::fmt::format_file; use crate::tools::fmt::format_parsed_source; use crate::tools::upgrade::check_for_upgrades_for_lsp; @@ -146,7 +147,7 @@ struct LspNpmServices { /// Npm's search api. search_api: CliNpmSearchApi, /// Node resolver. - node_resolver: Option<Arc<NodeResolver>>, + node_resolver: Option<Arc<CliNodeResolver>>, /// Resolver for npm packages. resolver: Option<Arc<dyn CliNpmResolver>>, } @@ -171,7 +172,7 @@ pub struct LanguageServer(Arc<tokio::sync::RwLock<Inner>>, CancellationToken); #[derive(Clone, Debug)] pub struct StateNpmSnapshot { - pub node_resolver: Arc<NodeResolver>, + pub node_resolver: Arc<CliNodeResolver>, pub npm_resolver: Arc<dyn CliNpmResolver>, } @@ -760,10 +761,18 @@ impl Inner { .map(|resolver| resolver.clone_snapshotted()) .map(|resolver| { let fs = Arc::new(deno_fs::RealFs); - let node_resolver = - Arc::new(NodeResolver::new(fs, resolver.clone().into_npm_resolver())); - StateNpmSnapshot { + let node_resolver = Arc::new(NodeResolver::new( + fs.clone(), + resolver.clone().into_npm_resolver(), + )); + let cli_node_resolver = Arc::new(CliNodeResolver::new( + None, + fs, node_resolver, + resolver.clone(), + )); + StateNpmSnapshot { + node_resolver: cli_node_resolver, npm_resolver: resolver, } }); @@ -907,9 +916,15 @@ impl Inner { self.config.maybe_node_modules_dir_path().cloned(), ) .await; - self.npm.node_resolver = Some(Arc::new(NodeResolver::new( + let node_resolver = Arc::new(NodeResolver::new( Arc::new(deno_fs::RealFs), npm_resolver.clone().into_npm_resolver(), + )); + self.npm.node_resolver = Some(Arc::new(CliNodeResolver::new( + None, + Arc::new(deno_fs::RealFs), + node_resolver, + npm_resolver.clone(), ))); self.npm.resolver = Some(npm_resolver); |