mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-04-24 17:12:16 +02:00
This commit does the work to delete the old `grep` crate and effectively rewrite most of ripgrep core to use the new libripgrep crates. The new `grep` crate is now a facade that collects the various crates that make up libripgrep. The most complex part of ripgrep core is now arguably the translation between command line parameters and the library options, which is ultimately where we want to be.
69 lines
2.0 KiB
Rust
69 lines
2.0 KiB
Rust
// This module defines a super simple logger that works with the `log` crate.
|
|
// We don't need anything fancy; just basic log levels and the ability to
|
|
// print to stderr. We therefore avoid bringing in extra dependencies just
|
|
// for this functionality.
|
|
|
|
use log::{self, Log};
|
|
|
|
/// The simplest possible logger that logs to stderr.
|
|
///
|
|
/// This logger does no filtering. Instead, it relies on the `log` crates
|
|
/// filtering via its global max_level setting.
|
|
#[derive(Debug)]
|
|
pub struct Logger(());
|
|
|
|
const LOGGER: &'static Logger = &Logger(());
|
|
|
|
impl Logger {
|
|
/// Create a new logger that logs to stderr and initialize it as the
|
|
/// global logger. If there was a problem setting the logger, then an
|
|
/// error is returned.
|
|
pub fn init() -> Result<(), log::SetLoggerError> {
|
|
log::set_logger(LOGGER)
|
|
}
|
|
}
|
|
|
|
impl Log for Logger {
|
|
fn enabled(&self, _: &log::Metadata) -> bool {
|
|
// We set the log level via log::set_max_level, so we don't need to
|
|
// implement filtering here.
|
|
true
|
|
}
|
|
|
|
fn log(&self, record: &log::Record) {
|
|
match (record.file(), record.line()) {
|
|
(Some(file), Some(line)) => {
|
|
eprintln!(
|
|
"{}|{}|{}:{}: {}",
|
|
record.level(),
|
|
record.target(),
|
|
file,
|
|
line,
|
|
record.args()
|
|
);
|
|
}
|
|
(Some(file), None) => {
|
|
eprintln!(
|
|
"{}|{}|{}: {}",
|
|
record.level(),
|
|
record.target(),
|
|
file,
|
|
record.args()
|
|
);
|
|
}
|
|
_ => {
|
|
eprintln!(
|
|
"{}|{}: {}",
|
|
record.level(),
|
|
record.target(),
|
|
record.args()
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
fn flush(&self) {
|
|
// We use eprintln! which is flushed on every call.
|
|
}
|
|
}
|