mirror of
https://github.com/nushell/nushell.git
synced 2025-08-12 08:50:05 +02:00
Finish the job of moving shapes into the stream
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.
This commit is contained in:
@ -5,7 +5,7 @@ use crate::parser::nom_input;
|
||||
use crate::parser::parse::token_tree::TokenNode;
|
||||
use crate::{Span, Spanned, SpannedItem, Tag, Tagged, Text};
|
||||
use ansi_term::Color;
|
||||
use log::trace;
|
||||
use log::{log_enabled, trace};
|
||||
use rustyline::completion::Completer;
|
||||
use rustyline::error::ReadlineError;
|
||||
use rustyline::highlight::Highlighter;
|
||||
@ -34,23 +34,6 @@ impl Completer for Helper {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
impl Completer for Helper {
|
||||
type Candidate = rustyline::completion::Pair;
|
||||
|
||||
fn complete(
|
||||
&self,
|
||||
line: &str,
|
||||
pos: usize,
|
||||
ctx: &rustyline::Context<'_>,
|
||||
) -> Result<(usize, Vec<rustyline::completion::Pair>), ReadlineError> {
|
||||
let result = self.helper.complete(line, pos, ctx);
|
||||
|
||||
result.map(|(x, y)| (x, y.iter().map(|z| z.into()).collect()))
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
impl Hinter for Helper {
|
||||
fn hint(&self, line: &str, pos: usize, ctx: &rustyline::Context<'_>) -> Option<String> {
|
||||
self.context.shell_manager.hint(line, pos, ctx)
|
||||
@ -103,14 +86,18 @@ impl Highlighter for Helper {
|
||||
let shapes = {
|
||||
// We just constructed a token list that only contains a pipeline, so it can't fail
|
||||
color_fallible_syntax(&PipelineShape, &mut tokens, &expand_context).unwrap();
|
||||
tokens.with_tracer(|_, tracer| tracer.finish());
|
||||
|
||||
tokens.shapes()
|
||||
tokens.state().shapes()
|
||||
};
|
||||
|
||||
trace!(target: "nu::shapes",
|
||||
"SHAPES :: {:?}",
|
||||
shapes.iter().map(|shape| shape.item).collect::<Vec<_>>()
|
||||
);
|
||||
trace!(target: "nu::color_syntax", "{:#?}", tokens.tracer());
|
||||
|
||||
if log_enabled!(target: "nu::color_syntax", log::Level::Trace) {
|
||||
println!("");
|
||||
ptree::print_tree(&tokens.tracer().clone().print(Text::from(line))).unwrap();
|
||||
println!("");
|
||||
}
|
||||
|
||||
for shape in shapes {
|
||||
let styled = paint_flat_shape(&shape, line);
|
||||
@ -118,18 +105,6 @@ impl Highlighter for Helper {
|
||||
}
|
||||
|
||||
Cow::Owned(out)
|
||||
|
||||
// loop {
|
||||
// match iter.next() {
|
||||
// None => {
|
||||
// return Cow::Owned(out);
|
||||
// }
|
||||
// Some(token) => {
|
||||
// let styled = paint_pipeline_element(&token, line);
|
||||
// out.push_str(&styled.to_string());
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user