fix(cli): lint/format all discoverd files on each change (#12518)

This commit is contained in:
Zheyu Zhang 2021-10-30 15:59:53 +08:00 committed by GitHub
parent d44011a69e
commit 85a2943435
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 154 additions and 43 deletions

View file

@ -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(())