From 842e29057d6e545c6b498c584a5366fff34f6aa7 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 25 Oct 2023 18:13:22 -0400 Subject: refactor: break out ModuleInfoCache from ParsedSourceCache (#20977) As title. This will help use the two independently from the other, which will help in an upcoming deno doc PR where I need to parse the source files with scope analysis. --- cli/graph_util.rs | 66 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 19 deletions(-) (limited to 'cli/graph_util.rs') diff --git a/cli/graph_util.rs b/cli/graph_util.rs index d6b5228cf..2f5fd40fd 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -5,6 +5,7 @@ use crate::args::Lockfile; use crate::args::TsTypeLib; use crate::cache; use crate::cache::GlobalHttpCache; +use crate::cache::ModuleInfoCache; use crate::cache::ParsedSourceCache; use crate::colors; use crate::errors::get_error_class_name; @@ -27,6 +28,7 @@ use deno_graph::source::Loader; use deno_graph::source::ResolveError; use deno_graph::GraphKind; use deno_graph::Module; +use deno_graph::ModuleAnalyzer; use deno_graph::ModuleError; use deno_graph::ModuleGraph; use deno_graph::ModuleGraphError; @@ -182,10 +184,18 @@ pub fn graph_lock_or_exit(graph: &ModuleGraph, lockfile: &mut Lockfile) { } } +pub struct CreateGraphOptions<'a> { + pub graph_kind: GraphKind, + pub roots: Vec, + pub loader: &'a mut dyn Loader, + pub analyzer: &'a dyn ModuleAnalyzer, +} + pub struct ModuleGraphBuilder { options: Arc, resolver: Arc, npm_resolver: Arc, + module_info_cache: Arc, parsed_source_cache: Arc, lockfile: Option>>, maybe_file_watcher_reporter: Option, @@ -201,6 +211,7 @@ impl ModuleGraphBuilder { options: Arc, resolver: Arc, npm_resolver: Arc, + module_info_cache: Arc, parsed_source_cache: Arc, lockfile: Option>>, maybe_file_watcher_reporter: Option, @@ -213,6 +224,7 @@ impl ModuleGraphBuilder { options, resolver, npm_resolver, + module_info_cache, parsed_source_cache, lockfile, maybe_file_watcher_reporter, @@ -223,35 +235,61 @@ impl ModuleGraphBuilder { } } + pub async fn create_graph( + &self, + graph_kind: GraphKind, + roots: Vec, + ) -> Result { + let mut cache = self.create_graph_loader(); + self + .create_graph_with_loader(graph_kind, roots, &mut cache) + .await + } + pub async fn create_graph_with_loader( &self, graph_kind: GraphKind, roots: Vec, loader: &mut dyn Loader, + ) -> Result { + let store = self.parsed_source_cache.as_store(); + let analyzer = self.module_info_cache.as_module_analyzer(None, &*store); + self + .create_graph_with_options(CreateGraphOptions { + graph_kind, + roots, + loader, + analyzer: &analyzer, + }) + .await + } + + pub async fn create_graph_with_options( + &self, + options: CreateGraphOptions<'_>, ) -> Result { let maybe_imports = self.options.to_maybe_imports()?; let cli_resolver = self.resolver.clone(); let graph_resolver = cli_resolver.as_graph_resolver(); let graph_npm_resolver = cli_resolver.as_graph_npm_resolver(); - let analyzer = self.parsed_source_cache.as_analyzer(); let maybe_file_watcher_reporter = self .maybe_file_watcher_reporter .as_ref() .map(|r| r.as_reporter()); - let mut graph = ModuleGraph::new(graph_kind); + let mut graph = ModuleGraph::new(options.graph_kind); self .build_graph_with_npm_resolution( &mut graph, - roots, - loader, + options.roots, + options.loader, deno_graph::BuildOptions { is_dynamic: false, imports: maybe_imports, resolver: Some(graph_resolver), npm_resolver: Some(graph_npm_resolver), - module_analyzer: Some(&*analyzer), + module_analyzer: Some(options.analyzer), reporter: maybe_file_watcher_reporter, // todo(dsherret): workspace support workspace_members: vec![], @@ -277,7 +315,8 @@ impl ModuleGraphBuilder { let cli_resolver = self.resolver.clone(); let graph_resolver = cli_resolver.as_graph_resolver(); let graph_npm_resolver = cli_resolver.as_graph_npm_resolver(); - let analyzer = self.parsed_source_cache.as_analyzer(); + let store = self.parsed_source_cache.as_store(); + let analyzer = self.module_info_cache.as_module_analyzer(None, &*store); let graph_kind = self.options.type_check_mode().as_graph_kind(); let mut graph = ModuleGraph::new(graph_kind); let maybe_file_watcher_reporter = self @@ -295,7 +334,7 @@ impl ModuleGraphBuilder { imports: maybe_imports, resolver: Some(graph_resolver), npm_resolver: Some(graph_npm_resolver), - module_analyzer: Some(&*analyzer), + module_analyzer: Some(&analyzer), reporter: maybe_file_watcher_reporter, // todo(dsherret): workspace support workspace_members: vec![], @@ -436,21 +475,10 @@ impl ModuleGraphBuilder { self.options.resolve_file_header_overrides(), self.global_http_cache.clone(), self.npm_resolver.clone(), - self.parsed_source_cache.clone(), + self.module_info_cache.clone(), permissions, ) } - - pub async fn create_graph( - &self, - graph_kind: GraphKind, - roots: Vec, - ) -> Result { - let mut cache = self.create_graph_loader(); - self - .create_graph_with_loader(graph_kind, roots, &mut cache) - .await - } } pub fn error_for_any_npm_specifier( -- cgit v1.2.3