use crate::config::E2eConfig;
use alef_core::backend::GeneratedFile;
use std::collections::HashSet;
use std::path::Path;
use tracing::warn;
pub fn run_formatters(files: &[GeneratedFile], e2e_config: &E2eConfig) {
if e2e_config.format.is_empty() {
return;
}
let output_prefix = Path::new(e2e_config.effective_output());
let languages: HashSet<String> = files
.iter()
.filter_map(|f| {
let remainder = f.path.strip_prefix(output_prefix).ok()?;
let first = remainder.components().next()?;
Some(first.as_os_str().to_string_lossy().into_owned())
})
.collect();
for (lang, cmd_template) in &e2e_config.format {
if !languages.contains(lang.as_str()) {
continue;
}
let dir = format!("{}/{}", e2e_config.effective_output(), lang);
let cmd = cmd_template.replace("{dir}", &dir);
eprintln!(" Formatting {lang}: {cmd}");
let status = std::process::Command::new("sh").args(["-c", &cmd]).status();
match status {
Ok(s) if s.success() => {}
Ok(s) => {
warn!("Formatter for {lang} exited with {s}: {cmd}");
}
Err(e) => {
warn!("Failed to run formatter for {lang}: {e}");
}
}
}
}