diff options
Diffstat (limited to 'cli/tools')
-rw-r--r-- | cli/tools/bench.rs | 38 | ||||
-rw-r--r-- | cli/tools/repl/mod.rs | 2 | ||||
-rw-r--r-- | cli/tools/run.rs | 18 | ||||
-rw-r--r-- | cli/tools/test.rs | 69 |
4 files changed, 71 insertions, 56 deletions
diff --git a/cli/tools/bench.rs b/cli/tools/bench.rs index 88e19dd70..3f606cfa9 100644 --- a/cli/tools/bench.rs +++ b/cli/tools/bench.rs @@ -6,6 +6,7 @@ use crate::args::TypeCheckMode; use crate::colors; use crate::display::write_json_to_stdout; use crate::graph_util::graph_valid_with_cli_options; +use crate::module_loader::ModuleLoadPreparer; use crate::ops; use crate::proc_state::ProcState; use crate::tools::test::format_test_error; @@ -36,7 +37,6 @@ use indexmap::IndexSet; use log::Level; use serde::Deserialize; use serde::Serialize; -use std::cell::RefCell; use std::collections::HashSet; use std::path::Path; use std::path::PathBuf; @@ -418,11 +418,12 @@ impl BenchReporter for ConsoleReporter { /// Type check a collection of module and document specifiers. async fn check_specifiers( - ps: &ProcState, + cli_options: &CliOptions, + module_load_preparer: &ModuleLoadPreparer, specifiers: Vec<ModuleSpecifier>, ) -> Result<(), AnyError> { - let lib = ps.options.ts_type_lib_window(); - ps.module_load_preparer + let lib = cli_options.ts_type_lib_window(); + module_load_preparer .prepare_module_load( specifiers, false, @@ -648,14 +649,15 @@ pub async fn run_benchmarks( return Err(generic_error("No bench modules found")); } - check_specifiers(&ps, specifiers.clone()).await?; + check_specifiers(&ps.options, &ps.module_load_preparer, specifiers.clone()) + .await?; if bench_options.no_run { return Ok(()); } let log_level = ps.options.log_level(); - let worker_factory = Arc::new(ps.into_cli_main_worker_factory()); + let worker_factory = Arc::new(ps.create_cli_main_worker_factory()); bench_specifiers( worker_factory, &permissions, @@ -684,14 +686,13 @@ pub async fn run_benchmarks_with_watch( Permissions::from_options(&ps.options.permissions_options())?; let no_check = ps.options.type_check_mode() == TypeCheckMode::None; - let ps = RefCell::new(ps); - let resolver = |changed: Option<Vec<PathBuf>>| { let paths_to_watch = bench_options.files.include.clone(); let paths_to_watch_clone = paths_to_watch.clone(); let files_changed = changed.is_some(); let bench_options = &bench_options; - let ps = ps.borrow().clone(); + let module_graph_builder = ps.module_graph_builder.clone(); + let cli_options = ps.options.clone(); async move { let bench_modules = @@ -703,11 +704,10 @@ pub async fn run_benchmarks_with_watch( } else { bench_modules.clone() }; - let graph = ps - .module_graph_builder + let graph = module_graph_builder .create_graph(bench_modules.clone()) .await?; - graph_valid_with_cli_options(&graph, &bench_modules, &ps.options)?; + graph_valid_with_cli_options(&graph, &bench_modules, &cli_options)?; // TODO(@kitsonk) - This should be totally derivable from the graph. for specifier in bench_modules { @@ -800,8 +800,10 @@ pub async fn run_benchmarks_with_watch( let operation = |modules_to_reload: Vec<ModuleSpecifier>| { let permissions = &permissions; let bench_options = &bench_options; - ps.borrow_mut().reset_for_file_watcher(); - let ps = ps.borrow().clone(); + ps.reset_for_file_watcher(); + let module_load_preparer = ps.module_load_preparer.clone(); + let cli_options = ps.options.clone(); + let worker_factory = Arc::new(ps.create_cli_main_worker_factory()); async move { let specifiers = @@ -810,14 +812,14 @@ pub async fn run_benchmarks_with_watch( .filter(|specifier| modules_to_reload.contains(specifier)) .collect::<Vec<ModuleSpecifier>>(); - check_specifiers(&ps, specifiers.clone()).await?; + check_specifiers(&cli_options, &module_load_preparer, specifiers.clone()) + .await?; if bench_options.no_run { return Ok(()); } - let log_level = ps.options.log_level(); - let worker_factory = Arc::new(ps.into_cli_main_worker_factory()); + let log_level = cli_options.log_level(); bench_specifiers( worker_factory, permissions, @@ -834,7 +836,7 @@ pub async fn run_benchmarks_with_watch( } }; - let clear_screen = !ps.borrow().options.no_clear_screen(); + let clear_screen = !ps.options.no_clear_screen(); file_watcher::watch_func( resolver, operation, diff --git a/cli/tools/repl/mod.rs b/cli/tools/repl/mod.rs index 59b79ce86..f0faf74ec 100644 --- a/cli/tools/repl/mod.rs +++ b/cli/tools/repl/mod.rs @@ -108,7 +108,7 @@ pub async fn run(flags: Flags, repl_flags: ReplFlags) -> Result<i32, AnyError> { let resolver = ps.resolver.clone(); let dir = ps.dir.clone(); let file_fetcher = ps.file_fetcher.clone(); - let worker_factory = ps.into_cli_main_worker_factory(); + let worker_factory = ps.create_cli_main_worker_factory(); let mut worker = worker_factory .create_main_worker(main_module, permissions) diff --git a/cli/tools/run.rs b/cli/tools/run.rs index 6515ebde6..e1dc529bc 100644 --- a/cli/tools/run.rs +++ b/cli/tools/run.rs @@ -47,7 +47,7 @@ To grant permissions, set them before the script argument. For example: let permissions = PermissionsContainer::new(Permissions::from_options( &ps.options.permissions_options(), )?); - let worker_factory = ps.into_cli_main_worker_factory(); + let worker_factory = ps.create_cli_main_worker_factory(); let mut worker = worker_factory .create_main_worker(main_module, permissions) .await?; @@ -78,7 +78,7 @@ pub async fn run_from_stdin(flags: Flags) -> Result<i32, AnyError> { // to allow module access by TS compiler ps.file_fetcher.insert_cached(source_file); - let worker_factory = ps.into_cli_main_worker_factory(); + let worker_factory = ps.create_cli_main_worker_factory(); let mut worker = worker_factory .create_main_worker(main_module, permissions) .await?; @@ -90,19 +90,19 @@ pub async fn run_from_stdin(flags: Flags) -> Result<i32, AnyError> { // code properly. async fn run_with_watch(flags: Flags) -> Result<i32, AnyError> { let (sender, receiver) = tokio::sync::mpsc::unbounded_channel(); - let mut ps = + let ps = ProcState::from_flags_for_file_watcher(flags, sender.clone()).await?; let clear_screen = !ps.options.no_clear_screen(); let main_module = ps.options.resolve_main_module()?; let operation = |main_module: ModuleSpecifier| { ps.reset_for_file_watcher(); - let ps = ps.clone(); + let permissions = PermissionsContainer::new(Permissions::from_options( + &ps.options.permissions_options(), + )?); + let worker_factory = ps.create_cli_main_worker_factory(); + Ok(async move { - let permissions = PermissionsContainer::new(Permissions::from_options( - &ps.options.permissions_options(), - )?); - let worker_factory = ps.into_cli_main_worker_factory(); let worker = worker_factory .create_main_worker(main_module, permissions) .await?; @@ -157,7 +157,7 @@ pub async fn eval_command( ps.file_fetcher.insert_cached(file); let mut worker = ps - .into_cli_main_worker_factory() + .create_cli_main_worker_factory() .create_main_worker(main_module, permissions) .await?; let exit_code = worker.run().await?; diff --git a/cli/tools/test.rs b/cli/tools/test.rs index 0bdcb8860..429bee71b 100644 --- a/cli/tools/test.rs +++ b/cli/tools/test.rs @@ -7,7 +7,9 @@ use crate::args::TypeCheckMode; use crate::colors; use crate::display; use crate::file_fetcher::File; +use crate::file_fetcher::FileFetcher; use crate::graph_util::graph_valid_with_cli_options; +use crate::module_loader::ModuleLoadPreparer; use crate::ops; use crate::proc_state::ProcState; use crate::util::checksum; @@ -49,7 +51,6 @@ use rand::seq::SliceRandom; use rand::SeedableRng; use regex::Regex; use serde::Deserialize; -use std::cell::RefCell; use std::collections::BTreeMap; use std::collections::BTreeSet; use std::collections::HashMap; @@ -1200,13 +1201,13 @@ fn extract_files_from_fenced_blocks( } async fn fetch_inline_files( - ps: &ProcState, + file_fetcher: &FileFetcher, specifiers: Vec<ModuleSpecifier>, ) -> Result<Vec<File>, AnyError> { let mut files = Vec::new(); for specifier in specifiers { let fetch_permissions = PermissionsContainer::allow_all(); - let file = ps.file_fetcher.fetch(&specifier, fetch_permissions).await?; + let file = file_fetcher.fetch(&specifier, fetch_permissions).await?; let inline_files = if file.media_type == MediaType::Unknown { extract_files_from_fenced_blocks( @@ -1230,12 +1231,14 @@ async fn fetch_inline_files( /// Type check a collection of module and document specifiers. pub async fn check_specifiers( - ps: &ProcState, + cli_options: &CliOptions, + file_fetcher: &FileFetcher, + module_load_preparer: &ModuleLoadPreparer, specifiers: Vec<(ModuleSpecifier, TestMode)>, ) -> Result<(), AnyError> { - let lib = ps.options.ts_type_lib_window(); + let lib = cli_options.ts_type_lib_window(); let inline_files = fetch_inline_files( - ps, + file_fetcher, specifiers .iter() .filter_map(|(specifier, mode)| { @@ -1256,10 +1259,10 @@ pub async fn check_specifiers( .collect(); for file in inline_files { - ps.file_fetcher.insert_cached(file); + file_fetcher.insert_cached(file); } - ps.module_load_preparer + module_load_preparer .prepare_module_load( specifiers, false, @@ -1280,7 +1283,7 @@ pub async fn check_specifiers( }) .collect(); - ps.module_load_preparer + module_load_preparer .prepare_module_load( module_specifiers, false, @@ -1601,15 +1604,14 @@ fn collect_specifiers_with_test_mode( /// cannot be run, and therefore need to be marked as `TestMode::Documentation` /// as well. async fn fetch_specifiers_with_test_mode( - ps: &ProcState, + file_fetcher: &FileFetcher, files: &FilesConfig, doc: &bool, ) -> Result<Vec<(ModuleSpecifier, TestMode)>, AnyError> { let mut specifiers_with_mode = collect_specifiers_with_test_mode(files, doc)?; for (specifier, mode) in &mut specifiers_with_mode { - let file = ps - .file_fetcher + let file = file_fetcher .fetch(specifier, PermissionsContainer::allow_all()) .await?; @@ -1636,7 +1638,7 @@ pub async fn run_tests( let log_level = ps.options.log_level(); let specifiers_with_mode = fetch_specifiers_with_test_mode( - &ps, + &ps.file_fetcher, &test_options.files, &test_options.doc, ) @@ -1646,13 +1648,19 @@ pub async fn run_tests( return Err(generic_error("No test modules found")); } - check_specifiers(&ps, specifiers_with_mode.clone()).await?; + check_specifiers( + &ps.options, + &ps.file_fetcher, + &ps.module_load_preparer, + specifiers_with_mode.clone(), + ) + .await?; if test_options.no_run { return Ok(()); } - let worker_factory = Arc::new(ps.into_cli_main_worker_factory()); + let worker_factory = Arc::new(ps.create_cli_main_worker_factory()); test_specifiers( worker_factory, @@ -1693,14 +1701,13 @@ pub async fn run_tests_with_watch( let no_check = ps.options.type_check_mode() == TypeCheckMode::None; let log_level = ps.options.log_level(); - let ps = RefCell::new(ps); - let resolver = |changed: Option<Vec<PathBuf>>| { let paths_to_watch = test_options.files.include.clone(); let paths_to_watch_clone = paths_to_watch.clone(); let files_changed = changed.is_some(); let test_options = &test_options; - let ps = ps.borrow().clone(); + let cli_options = ps.options.clone(); + let module_graph_builder = ps.module_graph_builder.clone(); async move { let test_modules = if test_options.doc { @@ -1715,11 +1722,10 @@ pub async fn run_tests_with_watch( } else { test_modules.clone() }; - let graph = ps - .module_graph_builder + let graph = module_graph_builder .create_graph(test_modules.clone()) .await?; - graph_valid_with_cli_options(&graph, &test_modules, &ps.options)?; + graph_valid_with_cli_options(&graph, &test_modules, &cli_options)?; // TODO(@kitsonk) - This should be totally derivable from the graph. for specifier in test_modules { @@ -1812,12 +1818,15 @@ pub async fn run_tests_with_watch( let operation = |modules_to_reload: Vec<ModuleSpecifier>| { let permissions = &permissions; let test_options = &test_options; - ps.borrow_mut().reset_for_file_watcher(); - let ps = ps.borrow().clone(); + ps.reset_for_file_watcher(); + let cli_options = ps.options.clone(); + let file_fetcher = ps.file_fetcher.clone(); + let module_load_preparer = ps.module_load_preparer.clone(); + let worker_factory = Arc::new(ps.create_cli_main_worker_factory()); async move { let specifiers_with_mode = fetch_specifiers_with_test_mode( - &ps, + &file_fetcher, &test_options.files, &test_options.doc, ) @@ -1826,14 +1835,18 @@ pub async fn run_tests_with_watch( .filter(|(specifier, _)| modules_to_reload.contains(specifier)) .collect::<Vec<(ModuleSpecifier, TestMode)>>(); - check_specifiers(&ps, specifiers_with_mode.clone()).await?; + check_specifiers( + &cli_options, + &file_fetcher, + &module_load_preparer, + specifiers_with_mode.clone(), + ) + .await?; if test_options.no_run { return Ok(()); } - let worker_factory = Arc::new(ps.into_cli_main_worker_factory()); - test_specifiers( worker_factory, permissions, @@ -1874,7 +1887,7 @@ pub async fn run_tests_with_watch( } }); - let clear_screen = !ps.borrow().options.no_clear_screen(); + let clear_screen = !ps.options.no_clear_screen(); file_watcher::watch_func( resolver, operation, |