diff options
author | Zheyu Zhang <zheyuzhang03@gmail.com> | 2021-10-30 15:59:53 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-30 09:59:53 +0200 |
commit | 85a2943435d645c0b45e27e4f0312b5434e1fb65 (patch) | |
tree | e395e0ee42f1e8ce9a2fe0ab7b3727798c33bbdf /cli/tools/fmt.rs | |
parent | d44011a69e0674acfa9c59bd7ad7f0523eb61d42 (diff) |
fix(cli): lint/format all discoverd files on each change (#12518)
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(()) |