rspack_error/displayer/
stdio.rs1use std::io::Write;
2
3use termcolor::{ColorChoice, StandardStream, WriteColor};
4
5use super::{Display, renderer::Renderer};
6use crate::{Result, diagnostic::Diagnostic};
7
8#[derive(Default)]
9pub struct StdioDisplayer;
10
11impl Display for StdioDisplayer {
12 type Output = Result<()>;
13
14 fn emit_batch_diagnostic<'a>(
15 &self,
16 diagnostics: impl Iterator<Item = &'a Diagnostic>,
17 ) -> Self::Output {
18 let writer = StandardStream::stderr(ColorChoice::Always);
19 let mut lock_writer = writer.lock();
20 let renderer = Renderer::new(lock_writer.supports_color());
21 for diagnostic in diagnostics {
22 let buf = renderer.render(diagnostic)?;
23 lock_writer.write_all(buf.as_bytes())?;
24 lock_writer.reset()?;
26 }
27 Ok(())
28 }
29
30 fn emit_diagnostic(&self, diagnostic: &Diagnostic) -> Self::Output {
31 self.emit_batch_diagnostic(vec![diagnostic].into_iter())
32 }
33}