summaryrefslogtreecommitdiff
path: root/cli/tools/fmt.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-06-14 18:29:19 -0400
committerGitHub <noreply@github.com>2023-06-14 22:29:19 +0000
commit84c793275b324c262dde02a432462565584c83f7 (patch)
treea5995a842fabb37b2ecdab794dbbce76b530ac3a /cli/tools/fmt.rs
parent48c6f7178703d448da229a5baf19efb403416da0 (diff)
fix: reload config files on watcher restarts (#19487)
Closes #19468
Diffstat (limited to 'cli/tools/fmt.rs')
-rw-r--r--cli/tools/fmt.rs147
1 files changed, 75 insertions, 72 deletions
diff --git a/cli/tools/fmt.rs b/cli/tools/fmt.rs
index f2fec9302..7116c78cc 100644
--- a/cli/tools/fmt.rs
+++ b/cli/tools/fmt.rs
@@ -9,6 +9,8 @@
use crate::args::CliOptions;
use crate::args::FilesConfig;
+use crate::args::Flags;
+use crate::args::FmtFlags;
use crate::args::FmtOptions;
use crate::args::FmtOptionsConfig;
use crate::args::ProseWrap;
@@ -16,7 +18,6 @@ use crate::colors;
use crate::factory::CliFactory;
use crate::util::diff::diff;
use crate::util::file_watcher;
-use crate::util::file_watcher::ResolutionResult;
use crate::util::fs::FileCollector;
use crate::util::path::get_extension;
use crate::util::text_encoding;
@@ -46,11 +47,10 @@ use std::sync::Arc;
use crate::cache::IncrementalCache;
/// Format JavaScript/TypeScript files.
-pub async fn format(
- cli_options: CliOptions,
- fmt_options: FmtOptions,
-) -> Result<(), AnyError> {
- if fmt_options.is_stdin {
+pub async fn format(flags: Flags, fmt_flags: FmtFlags) -> Result<(), AnyError> {
+ if fmt_flags.is_stdin() {
+ let cli_options = CliOptions::from_flags(flags)?;
+ let fmt_options = cli_options.resolve_fmt_options(fmt_flags)?;
return format_stdin(
fmt_options,
cli_options
@@ -61,90 +61,93 @@ pub async fn format(
);
}
- let files = fmt_options.files;
- let check = fmt_options.check;
- let fmt_config_options = fmt_options.options;
-
- let resolver = |changed: Option<Vec<PathBuf>>| {
- let files_changed = changed.is_some();
-
- let result = collect_fmt_files(&files).map(|files| {
- let refmt_files = if let Some(paths) = changed {
- if check {
- files
- .iter()
- .any(|path| paths.contains(path))
- .then_some(files)
- .unwrap_or_else(|| [].to_vec())
- } else {
- files
- .into_iter()
- .filter(|path| paths.contains(path))
- .collect::<Vec<_>>()
- }
- } else {
- files
- };
- (refmt_files, fmt_config_options.clone())
- });
-
- let paths_to_watch = files.include.clone();
- async move {
- if files_changed
- && matches!(result, Ok((ref files, _)) if files.is_empty())
- {
- ResolutionResult::Ignore
- } else {
- ResolutionResult::Restart {
- paths_to_watch,
- result,
- }
- }
- }
- };
- let factory = CliFactory::from_cli_options(Arc::new(cli_options));
- let cli_options = factory.cli_options();
- let caches = factory.caches()?;
- let operation = |(paths, fmt_options): (Vec<PathBuf>, FmtOptionsConfig)| async {
- let incremental_cache = Arc::new(IncrementalCache::new(
- caches.fmt_incremental_cache_db(),
- &fmt_options,
- &paths,
- ));
- if check {
- check_source_files(paths, fmt_options, incremental_cache.clone()).await?;
- } else {
- format_source_files(paths, fmt_options, incremental_cache.clone())
- .await?;
- }
- incremental_cache.wait_completion().await;
- Ok(())
- };
-
- if cli_options.watch_paths().is_some() {
+ if flags.watch.is_some() {
+ let clear_screen = !flags.no_clear_screen;
file_watcher::watch_func(
- resolver,
- operation,
+ flags,
file_watcher::PrintConfig {
job_name: "Fmt".to_string(),
- clear_screen: !cli_options.no_clear_screen(),
+ clear_screen,
+ },
+ move |flags, sender, changed_paths| {
+ let fmt_flags = fmt_flags.clone();
+ Ok(async move {
+ let factory = CliFactory::from_flags(flags).await?;
+ let cli_options = factory.cli_options();
+ let fmt_options = cli_options.resolve_fmt_options(fmt_flags)?;
+ let files =
+ collect_fmt_files(&fmt_options.files).and_then(|files| {
+ if files.is_empty() {
+ Err(generic_error("No target files found."))
+ } else {
+ Ok(files)
+ }
+ })?;
+ _ = sender.send(files.clone());
+ let refmt_files = if let Some(paths) = changed_paths {
+ if fmt_options.check {
+ // check all files on any changed (https://github.com/denoland/deno/issues/12446)
+ files
+ .iter()
+ .any(|path| paths.contains(path))
+ .then_some(files)
+ .unwrap_or_else(|| [].to_vec())
+ } else {
+ files
+ .into_iter()
+ .filter(|path| paths.contains(path))
+ .collect::<Vec<_>>()
+ }
+ } else {
+ files
+ };
+ format_files(factory, fmt_options, refmt_files).await?;
+
+ Ok(())
+ })
},
)
.await?;
} else {
- let files = collect_fmt_files(&files).and_then(|files| {
+ let factory = CliFactory::from_flags(flags).await?;
+ let cli_options = factory.cli_options();
+ let fmt_options = cli_options.resolve_fmt_options(fmt_flags)?;
+ let files = collect_fmt_files(&fmt_options.files).and_then(|files| {
if files.is_empty() {
Err(generic_error("No target files found."))
} else {
Ok(files)
}
})?;
- operation((files, fmt_config_options)).await?;
+ format_files(factory, fmt_options, files).await?;
}
Ok(())
}
+async fn format_files(
+ factory: CliFactory,
+ fmt_options: FmtOptions,
+ paths: Vec<PathBuf>,
+) -> Result<(), AnyError> {
+ let caches = factory.caches()?;
+ let check = fmt_options.check;
+ let incremental_cache = Arc::new(IncrementalCache::new(
+ caches.fmt_incremental_cache_db(),
+ &fmt_options.options,
+ &paths,
+ ));
+ if check {
+ check_source_files(paths, fmt_options.options, incremental_cache.clone())
+ .await?;
+ } else {
+ format_source_files(paths, fmt_options.options, incremental_cache.clone())
+ .await?;
+ }
+ incremental_cache.wait_completion().await;
+ Ok(())
+}
+
fn collect_fmt_files(files: &FilesConfig) -> Result<Vec<PathBuf>, AnyError> {
FileCollector::new(is_supported_ext_fmt)
.ignore_git_folder()