tinymist_world/system/
diag.rs

1use std::io::IsTerminal;
2
3use codespan_reporting::term::termcolor::{ColorChoice, StandardStream, WriteColor};
4
5use ecow::EcoString;
6use tinymist_std::Result;
7use typst::diag::{SourceDiagnostic, StrResult};
8
9use crate::{DiagnosticFormat, SourceWorld};
10
11/// Prints diagnostic messages to the terminal.
12#[deprecated(note = "Use `diag` mod instead")]
13pub fn print_diagnostics_to<'d, 'files>(
14    world: &'files dyn SourceWorld,
15    errors: impl Iterator<Item = &'d SourceDiagnostic>,
16    w: &mut impl WriteColor,
17    diagnostic_format: DiagnosticFormat,
18) -> Result<(), codespan_reporting::files::Error> {
19    crate::diag::print_diagnostics_to(world, errors, w, diagnostic_format)
20}
21
22/// Prints diagnostic messages to the terminal.
23#[deprecated(note = "Use `diag` mod instead")]
24pub fn print_diagnostics_to_string<'d, 'files>(
25    world: &'files dyn SourceWorld,
26    errors: impl Iterator<Item = &'d SourceDiagnostic>,
27    diagnostic_format: DiagnosticFormat,
28) -> StrResult<EcoString> {
29    crate::diag::print_diagnostics_to_string(world, errors, diagnostic_format)
30}
31
32/// Gets stderr with color support if desirable.
33fn color_stream() -> StandardStream {
34    StandardStream::stderr(if std::io::stderr().is_terminal() {
35        ColorChoice::Auto
36    } else {
37        ColorChoice::Never
38    })
39}
40
41/// Prints diagnostic messages to the terminal.
42pub fn print_diagnostics<'d, 'files>(
43    world: &'files dyn SourceWorld,
44    errors: impl Iterator<Item = &'d SourceDiagnostic>,
45    diagnostic_format: DiagnosticFormat,
46) -> Result<(), codespan_reporting::files::Error> {
47    let mut w = match diagnostic_format {
48        DiagnosticFormat::Human => color_stream(),
49        DiagnosticFormat::Short => StandardStream::stderr(ColorChoice::Never),
50    };
51
52    crate::diag::print_diagnostics_to(world, errors, &mut w, diagnostic_format)
53}