Skip to main content

tree_sitter_cli/
logger.rs

1use 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}