diff options
author | Dan Davison <dandavison7@gmail.com> | 2020-12-05 16:59:40 +0000 |
---|---|---|
committer | Dan Davison <dandavison7@gmail.com> | 2020-12-05 17:08:33 +0000 |
commit | e455eb9d74fb8381f2dc64588fb63073044f1f05 (patch) | |
tree | 26a8e9ebcb7e2305db239ff9673590e74a48a93b | |
parent | 4b99d7c994343347215a3a7d6e7f95eedbc06603 (diff) |
Pass pre-painted prefix
-rw-r--r-- | src/delta.rs | 2 | ||||
-rw-r--r-- | src/features/side_by_side.rs | 26 | ||||
-rw-r--r-- | src/paint.rs | 55 | ||||
-rw-r--r-- | src/tests/ansi_test_utils.rs | 2 |
4 files changed, 46 insertions, 39 deletions
diff --git a/src/delta.rs b/src/delta.rs index 46eecd6f..ff1edef8 100644 --- a/src/delta.rs +++ b/src/delta.rs @@ -456,7 +456,7 @@ fn handle_hunk_header_line( &mut painter.output_buffer, config, &mut None, - "", + &config.null_style.paint(""), None, Some(false), ); diff --git a/src/features/side_by_side.rs b/src/features/side_by_side.rs index 805a61ac..ea8aabef 100644 --- a/src/features/side_by_side.rs +++ b/src/features/side_by_side.rs @@ -83,11 +83,11 @@ pub fn paint_minus_and_plus_lines_side_by_side<'a>( None => &State::HunkMinus(None), }, line_numbers_data, - if config.keep_plus_minus_markers { + &config.minus_style.paint(if config.keep_plus_minus_markers { "-" } else { "" - }, + }), background_color_extends_to_terminal_width, config, )); @@ -100,11 +100,11 @@ pub fn paint_minus_and_plus_lines_side_by_side<'a>( None => &State::HunkPlus(None), }, line_numbers_data, - if config.keep_plus_minus_markers { + &config.plus_style.paint(if config.keep_plus_minus_markers { "+" } else { "" - }, + }), background_color_extends_to_terminal_width, config, )); @@ -120,7 +120,7 @@ pub fn paint_zero_lines_side_by_side( output_buffer: &mut String, config: &Config, line_numbers_data: &mut Option<&mut line_numbers::LineNumbersData>, - prefix: &str, + painted_prefix: &ansi_term::ANSIString, background_color_extends_to_terminal_width: Option<bool>, ) { for (line_index, (syntax_sections, diff_sections)) in syntax_style_sections @@ -134,7 +134,7 @@ pub fn paint_zero_lines_side_by_side( state, line_numbers_data, Some(PanelSide::Left), - prefix, + painted_prefix, config, ); // TODO: Avoid doing the superimpose_style_sections work twice. @@ -160,7 +160,7 @@ pub fn paint_zero_lines_side_by_side( state, line_numbers_data, Some(PanelSide::Right), - prefix, + painted_prefix, config, ); right_fill_right_panel_line( @@ -184,7 +184,7 @@ fn paint_left_panel_minus_line<'a>( diff_style_sections: &[Vec<(Style, &str)>], state: &'a State, line_numbers_data: &mut Option<&mut line_numbers::LineNumbersData>, - prefix: &str, + painted_prefix: &ansi_term::ANSIString, background_color_extends_to_terminal_width: Option<bool>, config: &Config, ) -> String { @@ -195,7 +195,7 @@ fn paint_left_panel_minus_line<'a>( state, line_numbers_data, PanelSide::Left, - prefix, + painted_prefix, config, ); right_pad_left_panel_line( @@ -218,7 +218,7 @@ fn paint_right_panel_plus_line<'a>( diff_style_sections: &[Vec<(Style, &str)>], state: &'a State, line_numbers_data: &mut Option<&mut line_numbers::LineNumbersData>, - prefix: &str, + painted_prefix: &ansi_term::ANSIString, background_color_extends_to_terminal_width: Option<bool>, config: &Config, ) -> String { @@ -229,7 +229,7 @@ fn paint_right_panel_plus_line<'a>( state, line_numbers_data, PanelSide::Right, - prefix, + painted_prefix, config, ); right_fill_right_panel_line( @@ -301,7 +301,7 @@ fn paint_minus_or_plus_panel_line( state: &State, line_numbers_data: &mut Option<&mut line_numbers::LineNumbersData>, panel_side: PanelSide, - prefix: &str, + painted_prefix: &ansi_term::ANSIString, config: &Config, ) -> (String, bool) { let (empty_line_syntax_sections, empty_line_diff_sections) = (Vec::new(), Vec::new()); @@ -332,7 +332,7 @@ fn paint_minus_or_plus_panel_line( &state_for_line_numbers_field, line_numbers_data, Some(panel_side), - prefix, + painted_prefix, config, ); diff --git a/src/paint.rs b/src/paint.rs index 27582194..438f671b 100644 --- a/src/paint.rs +++ b/src/paint.rs @@ -163,11 +163,14 @@ impl<'a> Painter<'a> { &mut self.output_buffer, self.config, &mut Some(&mut self.line_numbers_data), - if self.config.keep_plus_minus_markers { - "-" - } else { - "" - }, + &self + .config + .minus_style + .paint(if self.config.keep_plus_minus_markers { + "-" + } else { + "" + }), Some(self.config.minus_empty_line_marker_style), None, ); @@ -180,11 +183,14 @@ impl<'a> Painter<'a> { &mut self.output_buffer, self.config, &mut Some(&mut self.line_numbers_data), - if self.config.keep_plus_minus_markers { - "+" - } else { - "" - }, + &self + .config + .plus_style + .paint(if self.config.keep_plus_minus_markers { + "+" + } else { + "" + }), Some(self.config.plus_empty_line_marker_style), None, ); @@ -196,11 +202,13 @@ impl<'a> Painter<'a> { pub fn paint_zero_line(&mut self, line: &str) { let state = State::HunkZero; - let prefix = if self.config.keep_plus_minus_markers && !line.is_empty() { - &line[..1] - } else { - "" - }; + let painted_prefix = &self.config.zero_style.paint( + if self.config.keep_plus_minus_markers && !line.is_empty() { + &line[..1] + } else { + "" + }, + ); let lines = vec![(self.prepare(line, true), state.clone())]; let syntax_style_sections = Painter::get_syntax_style_sections_for_lines( &lines, @@ -218,7 +226,7 @@ impl<'a> Painter<'a> { &mut self.output_buffer, self.config, &mut Some(&mut self.line_numbers_data), - prefix, + painted_prefix, None, ); } else { @@ -229,7 +237,7 @@ impl<'a> Painter<'a> { &mut self.output_buffer, self.config, &mut Some(&mut self.line_numbers_data), - prefix, + painted_prefix, None, None, ); @@ -246,14 +254,13 @@ impl<'a> Painter<'a> { output_buffer: &mut String, config: &config::Config, line_numbers_data: &mut Option<&mut line_numbers::LineNumbersData>, - prefix: &str, + painted_prefix: &ansi_term::ANSIString, empty_line_style: Option<Style>, // a style with background color to highlight an empty line background_color_extends_to_terminal_width: Option<bool>, ) { // There's some unfortunate hackery going on here for two reasons: // - // 1. The prefix needs to be injected into the output stream. We paint - // this with whatever style the line starts with. + // 1. The prefix needs to be injected into the output stream. // // 2. We must ensure that we fill rightwards with the appropriate // non-emph background color. In that case we don't use the last @@ -269,7 +276,7 @@ impl<'a> Painter<'a> { state, line_numbers_data, None, - prefix, + painted_prefix, config, ); let (should_right_fill_background_color, fill_style) = @@ -380,7 +387,7 @@ impl<'a> Painter<'a> { state: &State, line_numbers_data: &mut Option<&mut line_numbers::LineNumbersData>, side_by_side_panel: Option<side_by_side::PanelSide>, - prefix: &str, + painted_prefix: &ansi_term::ANSIString, config: &config::Config, ) -> (String, bool) { let output_line_numbers = config.line_numbers && line_numbers_data.is_some(); @@ -417,8 +424,8 @@ impl<'a> Painter<'a> { config.null_syntect_style, ) { if !handled_prefix { - if prefix != "" { - ansi_strings.push(section_style.paint(prefix)); + if &**painted_prefix != "" { + ansi_strings.push(painted_prefix.clone()); } if !text.is_empty() { text.remove(0); diff --git a/src/tests/ansi_test_utils.rs b/src/tests/ansi_test_utils.rs index 1d5c8f26..e7b25e47 100644 --- a/src/tests/ansi_test_utils.rs +++ b/src/tests/ansi_test_utils.rs @@ -145,7 +145,7 @@ pub mod ansi_test_utils { &mut output_buffer, config, &mut None, - prefix, + &config.null_style.paint(prefix), None, None, ); |