mirror of
https://github.com/nushell/nushell.git
synced 2024-10-17 07:42:53 +02:00
6a7c00eaef
This commit should finish the `coloring_in_tokens` feature, which moves the shape accumulator into the token stream. This allows rollbacks of the token stream to also roll back any shapes that were added. This commit also adds a much nicer syntax highlighter trace, which shows all of the paths the highlighter took to arrive at a particular coloring output. This change is fairly substantial, but really improves the understandability of the flow. I intend to update the normal parser with a similar tracing view. In general, this change also fleshes out the concept of "atomic" token stream operations. A good next step would be to try to make the parser more error-correcting, using the coloring infrastructure. A follow-up step would involve merging the parser and highlighter shapes themselves.
56 lines
1.5 KiB
Rust
56 lines
1.5 KiB
Rust
use clap::{App, Arg};
|
|
use log::LevelFilter;
|
|
use std::error::Error;
|
|
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
|
let matches = App::new("nushell")
|
|
.version(clap::crate_version!())
|
|
.arg(
|
|
Arg::with_name("loglevel")
|
|
.short("l")
|
|
.long("loglevel")
|
|
.value_name("LEVEL")
|
|
.possible_values(&["error", "warn", "info", "debug", "trace"])
|
|
.takes_value(true),
|
|
)
|
|
.arg(
|
|
Arg::with_name("develop")
|
|
.long("develop")
|
|
.multiple(true)
|
|
.takes_value(true),
|
|
)
|
|
.get_matches();
|
|
|
|
let loglevel = match matches.value_of("loglevel") {
|
|
None => LevelFilter::Warn,
|
|
Some("error") => LevelFilter::Error,
|
|
Some("warn") => LevelFilter::Warn,
|
|
Some("info") => LevelFilter::Info,
|
|
Some("debug") => LevelFilter::Debug,
|
|
Some("trace") => LevelFilter::Trace,
|
|
_ => unreachable!(),
|
|
};
|
|
|
|
let mut builder = pretty_env_logger::formatted_builder();
|
|
|
|
if let Ok(s) = std::env::var("RUST_LOG") {
|
|
builder.parse_filters(&s);
|
|
}
|
|
|
|
builder.filter_module("nu", loglevel);
|
|
|
|
match matches.values_of("develop") {
|
|
None => {}
|
|
Some(values) => {
|
|
for item in values {
|
|
builder.filter_module(&format!("nu::{}", item), LevelFilter::Trace);
|
|
}
|
|
}
|
|
}
|
|
|
|
builder.try_init()?;
|
|
|
|
futures::executor::block_on(nu::cli())?;
|
|
Ok(())
|
|
}
|