diff options
author | Ethan P. <eth-p+git@hidden.email> | 2024-02-11 22:27:35 -0800 |
---|---|---|
committer | Ethan P. <eth-p+git@hidden.email> | 2024-02-11 22:27:35 -0800 |
commit | c94cf4e14e672a5bb169d9747c744a9b992c53b8 (patch) | |
tree | 2c82402a4ac9b03ae0590f50a1b7476b20759730 /src | |
parent | 5a2a20af42e7a426943122524287844acc5ee975 (diff) |
Split syntax highlighting from print_line into fn
This simplifies the `print_line` function a little bit while also
providing a way for syntax highlighting to be skipped when it's
not being used (i.e. `--color=never`).
Diffstat (limited to 'src')
-rw-r--r-- | src/printer.rs | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/src/printer.rs b/src/printer.rs index f413fdc3..3ac850fa 100644 --- a/src/printer.rs +++ b/src/printer.rs @@ -346,6 +346,31 @@ impl<'a> InteractivePrinter<'a> { self.print_header_component_with_indent(handle, content) } + fn highlight_regions_for_line<'b>( + &mut self, + line: &'b str, + ) -> Result<Vec<(syntect::highlighting::Style, &'b str)>> { + let highlighter_from_set = match self.highlighter_from_set { + Some(ref mut highlighter_from_set) => highlighter_from_set, + _ => return Ok(vec![(EMPTY_SYNTECT_STYLE, line)]), + }; + + // skip syntax highlighting on long lines + let too_long = line.len() > 1024 * 16; + + let for_highlighting: &str = if too_long { "\n" } else { &line }; + + let mut highlighted_line = highlighter_from_set + .highlighter + .highlight_line(for_highlighting, highlighter_from_set.syntax_set)?; + + if too_long { + highlighted_line[0].1 = &line; + } + + Ok(highlighted_line) + } + fn preprocess(&self, text: &str, cursor: &mut usize) -> String { if self.config.tab_width > 0 { return expand_tabs(text, self.config.tab_width, cursor); @@ -528,30 +553,7 @@ impl<'a> Printer for InteractivePrinter<'a> { } }; - let regions = { - let highlighter_from_set = match self.highlighter_from_set { - Some(ref mut highlighter_from_set) => highlighter_from_set, - _ => { - return Ok(()); - } - }; - - // skip syntax highlighting on long lines - let too_long = line.len() > 1024 * 16; - - let for_highlighting: &str = if too_long { "\n" } else { &line }; - - let mut highlighted_line = highlighter_from_set - .highlighter - .highlight_line(for_highlighting, highlighter_from_set.syntax_set)?; - - if too_long { - highlighted_line[0].1 = &line; - } - - highlighted_line - }; - + let regions = self.highlight_regions_for_line(&line)?; if out_of_range { return Ok(()); } |