diff options
Diffstat (limited to 'cli/tools/fmt.rs')
-rw-r--r-- | cli/tools/fmt.rs | 60 |
1 files changed, 37 insertions, 23 deletions
diff --git a/cli/tools/fmt.rs b/cli/tools/fmt.rs index 9ac9557cd..2cc276c5b 100644 --- a/cli/tools/fmt.rs +++ b/cli/tools/fmt.rs @@ -81,25 +81,36 @@ pub async fn format( let resolver = |changed: Option<Vec<PathBuf>>| { let files_changed = changed.is_some(); - let result = - collect_files(&include_files, &exclude_files, is_supported_ext_fmt).map( - |files| { - let collected_files = if let Some(paths) = changed { - files - .into_iter() - .filter(|path| paths.contains(path)) - .collect::<Vec<_>>() + + let collect_files = + collect_files(&include_files, &exclude_files, is_supported_ext_fmt); + + let (result, should_refmt) = match collect_files { + Ok(value) => { + if let Some(paths) = changed { + let refmt_files = value + .clone() + .into_iter() + .filter(|path| paths.contains(path)) + .collect::<Vec<_>>(); + + let should_refmt = !refmt_files.is_empty(); + + if check { + (Ok((value, fmt_options.clone())), Some(should_refmt)) } else { - files - }; - (collected_files, fmt_options.clone()) - }, - ); + (Ok((refmt_files, fmt_options.clone())), Some(should_refmt)) + } + } else { + (Ok((value, fmt_options.clone())), None) + } + } + Err(e) => (Err(e), None), + }; + let paths_to_watch = include_files.clone(); async move { - if (files_changed || !watch) - && matches!(result, Ok((ref files, _)) if files.is_empty()) - { + if files_changed && matches!(should_refmt, Some(false)) { ResolutionResult::Ignore } else { ResolutionResult::Restart { @@ -121,13 +132,16 @@ pub async fn format( if watch { file_watcher::watch_func(resolver, operation, "Fmt").await?; } else { - let (files, fmt_options) = - if let ResolutionResult::Restart { result, .. } = resolver(None).await { - result? - } else { - return Err(generic_error("No target files found.")); - }; - operation((files, fmt_options)).await?; + let files = + collect_files(&include_files, &exclude_files, is_supported_ext_fmt) + .and_then(|files| { + if files.is_empty() { + Err(generic_error("No target files found.")) + } else { + Ok(files) + } + })?; + operation((files, fmt_options.clone())).await?; } Ok(()) |