tree_sitter_cli/
logger.rs1use std::io::Write;
2
3use log::{Level, LevelFilter, Log, Metadata, Record};
4
5use crate::paint::{Paint, RED, YELLOW};
6
7struct Logger;
8
9impl Log for Logger {
10 fn enabled(&self, _: &Metadata) -> bool {
11 true
12 }
13
14 fn log(&self, record: &Record) {
15 match record.level() {
16 Level::Error => eprintln!("{} {}", Paint(RED, "Error:"), record.args()),
17 Level::Warn => eprintln!("{} {}", Paint(YELLOW, "Warning:"), record.args()),
18 Level::Info | Level::Debug => eprintln!("{}", record.args()),
19 Level::Trace => eprintln!(
20 "[{}] {}",
21 record
22 .module_path()
23 .unwrap_or_default()
24 .trim_start_matches("rust_tree_sitter_cli::"),
25 record.args()
26 ),
27 }
28 }
29
30 fn flush(&self) {
31 let mut stderr = std::io::stderr().lock();
32 let _ = stderr.flush();
33 }
34}
35
36pub fn init() {
37 log::set_boxed_logger(Box::new(Logger {})).unwrap();
38 log::set_max_level(LevelFilter::Info);
39}
40
41pub fn enable_debug() {
42 log::set_max_level(LevelFilter::Debug);
43}