tree_sitter_cli/
logger.rs1use std::io::Write;
2
3use anstyle::{AnsiColor, Color, Style};
4use log::{Level, LevelFilter, Log, Metadata, Record};
5
6pub fn paint(color: Option<impl Into<Color>>, text: &str) -> String {
7 let style = Style::new().fg_color(color.map(Into::into));
8 format!("{style}{text}{style:#}")
9}
10
11struct Logger;
12
13impl Log for Logger {
14 fn enabled(&self, _: &Metadata) -> bool {
15 true
16 }
17
18 fn log(&self, record: &Record) {
19 match record.level() {
20 Level::Error => eprintln!(
21 "{} {}",
22 paint(Some(AnsiColor::Red), "Error:"),
23 record.args()
24 ),
25 Level::Warn => eprintln!(
26 "{} {}",
27 paint(Some(AnsiColor::Yellow), "Warning:"),
28 record.args()
29 ),
30 Level::Info | Level::Debug => eprintln!("{}", record.args()),
31 Level::Trace => eprintln!(
32 "[{}] {}",
33 record
34 .module_path()
35 .unwrap_or_default()
36 .trim_start_matches("rust_tree_sitter_cli::"),
37 record.args()
38 ),
39 }
40 }
41
42 fn flush(&self) {
43 let mut stderr = std::io::stderr().lock();
44 let _ = stderr.flush();
45 }
46}
47
48pub fn init() {
49 log::set_boxed_logger(Box::new(Logger {})).unwrap();
50 log::set_max_level(LevelFilter::Info);
51}
52
53pub fn enable_debug() {
54 log::set_max_level(LevelFilter::Debug);
55}