use lychee_lib::{FileExtensions, Input, Result};
use std::collections::HashSet;
use std::fs;
use std::io::{self, Write};
use std::path::PathBuf;
use tokio_stream::StreamExt;
use crate::ExitCode;
pub(crate) async fn dump_inputs(
inputs: HashSet<Input>,
output: Option<&PathBuf>,
excluded_paths: &[String],
file_extensions: &FileExtensions,
skip_hidden: bool,
skip_ignored: bool,
) -> Result<ExitCode> {
if let Some(out_file) = output {
fs::File::create(out_file)?;
}
let mut writer = super::create_writer(output.cloned())?;
let excluded_path_filter = lychee_lib::filter::PathExcludes::new(excluded_paths)?;
let mut seen_sources = HashSet::new();
for input in inputs {
let sources_stream = input.get_sources(
file_extensions.clone(),
skip_hidden,
skip_ignored,
&excluded_path_filter,
);
tokio::pin!(sources_stream);
while let Some(source_result) = sources_stream.next().await {
let source = source_result?;
if seen_sources.insert(source.clone()) {
write_out(&mut writer, &source)?;
}
}
}
Ok(ExitCode::Success)
}
fn write_out(writer: &mut Box<dyn Write>, out_str: &str) -> io::Result<()> {
writeln!(writer, "{out_str}")
}