summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2021-12-06 22:34:53 -0500
committerDan Davison <dandavison7@gmail.com>2021-12-09 20:46:28 -0500
commitda083bba2a093ea2ff4558e59c48bd6672b75480 (patch)
tree4786e27be11b088059cebf842661b8e478a4fd47
parent9554f47ce9e79051ad7a3a9dfbdab7579003469d (diff)
Store raw_line in HunkZero, as HunkMinus and HunkPlus
ref #829
-rw-r--r--src/delta.rs4
-rw-r--r--src/features/line_numbers.rs2
-rw-r--r--src/features/side_by_side.rs4
-rw-r--r--src/handlers/hunk.rs19
-rw-r--r--src/handlers/hunk_header.rs2
-rw-r--r--src/handlers/merge_conflict.rs6
-rw-r--r--src/paint.rs16
-rw-r--r--src/subcommands/show_colors.rs4
-rw-r--r--src/tests/test_example_diffs.rs2
9 files changed, 32 insertions, 27 deletions
diff --git a/src/delta.rs b/src/delta.rs
index 8ad33b1b..7fbcdf48 100644
--- a/src/delta.rs
+++ b/src/delta.rs
@@ -19,9 +19,9 @@ pub enum State {
CommitMeta, // In commit metadata section
DiffHeader(DiffType), // In diff metadata section, between (possible) commit metadata and first hunk
HunkHeader(DiffType, ParsedHunkHeader, String, String), // In hunk metadata line (diff_type, parsed, line, raw_line)
- HunkZero(DiffType), // In hunk; unchanged line (prefix)
+ HunkZero(DiffType, Option<String>), // In hunk; unchanged line (prefix, raw_line)
HunkMinus(DiffType, Option<String>), // In hunk; removed line (diff_type, raw_line)
- HunkPlus(DiffType, Option<String>), // In hunk; added line (diff_type, raw_line)
+ HunkPlus(DiffType, Option<String>), // In hunk; added line (diff_type, raw_line)
MergeConflict(MergeParents, merge_conflict::MergeConflictCommit),
SubmoduleLog, // In a submodule section, with gitconfig diff.submodule = log
SubmoduleShort(String), // In a submodule section, with gitconfig diff.submodule = short
diff --git a/src/features/line_numbers.rs b/src/features/line_numbers.rs
index 35674f99..fd2232f4 100644
--- a/src/features/line_numbers.rs
+++ b/src/features/line_numbers.rs
@@ -81,7 +81,7 @@ pub fn linenumbers_and_styles<'a>(
((Some(nr_left), None), (minus_style, plus_style))
}
State::HunkMinusWrapped => ((None, None), (minus_style, plus_style)),
- State::HunkZero(_) => {
+ State::HunkZero(_, _) => {
line_numbers_data.line_number[Left] += increment as usize;
line_numbers_data.line_number[Right] += increment as usize;
((Some(nr_left), Some(nr_right)), (zero_style, zero_style))
diff --git a/src/features/side_by_side.rs b/src/features/side_by_side.rs
index e92be3b8..44f17a67 100644
--- a/src/features/side_by_side.rs
+++ b/src/features/side_by_side.rs
@@ -234,7 +234,7 @@ pub fn paint_zero_lines_side_by_side<'a>(
painted_prefix: Option<ansi_term::ANSIString>,
background_color_extends_to_terminal_width: BgShouldFill,
) {
- let states = vec![State::HunkZero(DiffType::Unified)];
+ let states = vec![State::HunkZero(DiffType::Unified, None)];
let (states, syntax_style_sections, diff_style_sections) = wrap_zero_block(
config,
@@ -496,7 +496,7 @@ fn pad_panel_line_to_width<'a>(
panel_line,
Some(" "),
),
- State::HunkZero(_) => {}
+ State::HunkZero(_, _) => {}
_ => unreachable!(),
};
};
diff --git a/src/handlers/hunk.rs b/src/handlers/hunk.rs
index 9f9097da..bd6f6366 100644
--- a/src/handlers/hunk.rs
+++ b/src/handlers/hunk.rs
@@ -30,7 +30,7 @@ impl<'a> StateMachine<'a> {
matches!(
self.state,
State::HunkHeader(_, _, _, _)
- | State::HunkZero(_)
+ | State::HunkZero(_, _)
| State::HunkMinus(_, _)
| State::HunkPlus(_, _)
) && !&*IS_WORD_DIFF
@@ -90,14 +90,15 @@ impl<'a> StateMachine<'a> {
self.painter.plus_lines.push((line, state.clone()));
state
}
- Some(HunkZero(diff_type)) => {
+ Some(HunkZero(diff_type, _)) => {
// We are in a zero (unchanged) line, therefore we have just exited a subhunk (a
// sequence of consecutive minus (removed) and/or plus (added) lines). Process that
// subhunk and flush the line buffers.
self.painter.paint_buffered_minus_and_plus_lines();
let n_parents = diff_type.n_parents();
let line = self.painter.prepare(&self.line, n_parents);
- let state = State::HunkZero(diff_type);
+ let raw_line = self.maybe_raw_line(n_parents, &[]);
+ let state = State::HunkZero(diff_type, raw_line);
self.painter.paint_zero_line(&line, state.clone());
state
}
@@ -110,7 +111,7 @@ impl<'a> StateMachine<'a> {
.output_buffer
.push_str(&self.painter.expand_tabs(self.raw_line.graphemes(true)));
self.painter.output_buffer.push('\n');
- State::HunkZero(Unified)
+ State::HunkZero(Unified, None)
}
};
self.painter.emit()?;
@@ -137,7 +138,7 @@ fn new_line_state(new_line: &str, prev_state: &State) -> Option<State> {
let diff_type = match prev_state {
HunkMinus(Unified, _)
- | HunkZero(Unified)
+ | HunkZero(Unified, _)
| HunkPlus(Unified, _)
| HunkHeader(Unified, _, _, _) => Unified,
HunkHeader(Combined(Number(n), InMergeConflict::No), _, _, _) => {
@@ -149,12 +150,12 @@ fn new_line_state(new_line: &str, prev_state: &State) -> Option<State> {
Combined(Number(prefix.len()), InMergeConflict::No)
}
HunkMinus(Combined(Prefix(prefix), in_merge_conflict), _)
- | HunkZero(Combined(Prefix(prefix), in_merge_conflict))
+ | HunkZero(Combined(Prefix(prefix), in_merge_conflict), _)
| HunkPlus(Combined(Prefix(prefix), in_merge_conflict), _) => {
Combined(Number(prefix.len()), in_merge_conflict.clone())
}
HunkMinus(Combined(Number(n), in_merge_conflict), _)
- | HunkZero(Combined(Number(n), in_merge_conflict))
+ | HunkZero(Combined(Number(n), in_merge_conflict), _)
| HunkPlus(Combined(Number(n), in_merge_conflict), _) => {
Combined(Number(*n), in_merge_conflict.clone())
}
@@ -186,13 +187,13 @@ fn new_line_state(new_line: &str, prev_state: &State) -> Option<State> {
match (prefix_char, prefix, in_merge_conflict) {
(Some('-'), None, None) => Some(HunkMinus(Unified, None)),
- (Some(' '), None, None) => Some(HunkZero(Unified)),
+ (Some(' '), None, None) => Some(HunkZero(Unified, None)),
(Some('+'), None, None) => Some(HunkPlus(Unified, None)),
(Some('-'), Some(prefix), Some(in_merge_conflict)) => {
Some(HunkMinus(Combined(Prefix(prefix), in_merge_conflict), None))
}
(Some(' '), Some(prefix), Some(in_merge_conflict)) => {
- Some(HunkZero(Combined(Prefix(prefix), in_merge_conflict)))
+ Some(HunkZero(Combined(Prefix(prefix), in_merge_conflict), None))
}
(Some('+'), Some(prefix), Some(in_merge_conflict)) => {
Some(HunkPlus(Combined(Prefix(prefix), in_merge_conflict), None))
diff --git a/src/handlers/hunk_header.rs b/src/handlers/hunk_header.rs
index ee109f68..833bfc81 100644
--- a/src/handlers/hunk_header.rs
+++ b/src/handlers/hunk_header.rs
@@ -61,7 +61,7 @@ impl<'a> StateMachine<'a> {
}
DiffHeader(diff_type)
| HunkMinus(diff_type, _)
- | HunkZero(diff_type)
+ | HunkZero(diff_type, _)
| HunkPlus(diff_type, _) => diff_type.clone(),
_ => Unified,
};
diff --git a/src/handlers/merge_conflict.rs b/src/handlers/merge_conflict.rs
index 1ff06fc3..d73060c9 100644
--- a/src/handlers/merge_conflict.rs
+++ b/src/handlers/merge_conflict.rs
@@ -42,7 +42,7 @@ impl<'a> StateMachine<'a> {
match self.state.clone() {
HunkHeader(Combined(merge_parents, InMergeConflict::No), _, _, _)
| HunkMinus(Combined(merge_parents, InMergeConflict::No), _)
- | HunkZero(Combined(merge_parents, InMergeConflict::No))
+ | HunkZero(Combined(merge_parents, InMergeConflict::No), _)
| HunkPlus(Combined(merge_parents, InMergeConflict::No), _) => {
handled_line = self.enter_merge_conflict(&merge_parents)
}
@@ -120,7 +120,7 @@ impl<'a> StateMachine<'a> {
fn store_line(&mut self, commit: MergeConflictCommit, state: State) -> bool {
use State::*;
- if let HunkMinus(diff_type, _) | HunkZero(diff_type) | HunkPlus(diff_type, _) = &state {
+ if let HunkMinus(diff_type, _) | HunkZero(diff_type, _) | HunkPlus(diff_type, _) = &state {
let line = self.painter.prepare(&self.line, diff_type.n_parents());
self.painter.merge_conflict_lines[commit].push((line, state));
true
@@ -172,7 +172,7 @@ impl<'a> StateMachine<'a> {
self.config,
)?;
self.painter.merge_conflict_lines.clear();
- self.state = HunkZero(Combined(merge_parents.clone(), InMergeConflict::No));
+ self.state = HunkZero(Combined(merge_parents.clone(), InMergeConflict::No), None);
Ok(())
}
}
diff --git a/src/paint.rs b/src/paint.rs
index 3a904206..59dd38a9 100644
--- a/src/paint.rs
+++ b/src/paint.rs
@@ -326,7 +326,7 @@ impl<'p> Painter<'p> {
config.minus_style
}
}
- State::HunkZero(_) | State::HunkZeroWrapped => config.zero_style,
+ State::HunkZero(_, None) | State::HunkZeroWrapped => config.zero_style,
State::HunkPlus(_, None) | State::HunkPlusWrapped => {
if let Some(true) = line_has_homolog {
config.plus_non_emph_style
@@ -334,7 +334,9 @@ impl<'p> Painter<'p> {
config.plus_style
}
}
- State::HunkMinus(_, Some(_)) | State::HunkPlus(_, Some(_)) => {
+ State::HunkMinus(_, Some(_))
+ | State::HunkZero(_, Some(_))
+ | State::HunkPlus(_, Some(_)) => {
// Consider the following raw line, from git colorMoved:
// ␛[1;36m+␛[m␛[1;36mclass·X:·pass␛[m␊ The last style section returned by
// parse_style_sections will be a default style associated with the terminal newline
@@ -470,14 +472,16 @@ impl<'p> Painter<'p> {
|| config.minus_emph_style.is_syntax_highlighted
|| config.minus_non_emph_style.is_syntax_highlighted
}
- State::HunkZero(_) => config.zero_style.is_syntax_highlighted,
+ State::HunkZero(_, None) => config.zero_style.is_syntax_highlighted,
State::HunkPlus(_, None) => {
config.plus_style.is_syntax_highlighted
|| config.plus_emph_style.is_syntax_highlighted
|| config.plus_non_emph_style.is_syntax_highlighted
}
State::HunkHeader(_, _, _, _) => true,
- State::HunkMinus(_, Some(_raw_line)) | State::HunkPlus(_, Some(_raw_line)) => {
+ State::HunkMinus(_, Some(_raw_line))
+ | State::HunkZero(_, Some(_raw_line))
+ | State::HunkPlus(_, Some(_raw_line)) => {
// It is possible that the captured raw line contains an ANSI
// style that has been mapped (via map-styles) to a delta Style
// with syntax-highlighting.
@@ -728,7 +732,7 @@ fn painted_prefix(state: State, config: &config::Config) -> Option<ANSIString> {
(HunkMinus(Combined(MergeParents::Prefix(prefix), InMergeConflict::No), _), _) => {
Some(config.minus_style.paint(prefix))
}
- (HunkZero(Combined(MergeParents::Prefix(prefix), InMergeConflict::No)), _) => {
+ (HunkZero(Combined(MergeParents::Prefix(prefix), InMergeConflict::No), _), _) => {
Some(config.zero_style.paint(prefix))
}
(HunkPlus(Combined(MergeParents::Prefix(prefix), InMergeConflict::No), _), _) => {
@@ -736,7 +740,7 @@ fn painted_prefix(state: State, config: &config::Config) -> Option<ANSIString> {
}
// But otherwise we honor keep_plus_minus_markers
(HunkMinus(_, _), true) => Some(config.minus_style.paint("-".to_string())),
- (HunkZero(_), true) => Some(config.zero_style.paint(" ".to_string())),
+ (HunkZero(_, _), true) => Some(config.zero_style.paint(" ".to_string())),
(HunkPlus(_, _), true) => Some(config.plus_style.paint("+".to_string())),
_ => None,
}
diff --git a/src/subcommands/show_colors.rs b/src/subcommands/show_colors.rs
index b51dd8a0..1c939700 100644
--- a/src/subcommands/show_colors.rs
+++ b/src/subcommands/show_colors.rs
@@ -45,7 +45,7 @@ pub fn show_colors() -> std::io::Result<()> {
painter.syntax_highlight_and_paint_line(
line,
paint::StyleSectionSpecifier::Style(style),
- delta::State::HunkZero(DiffType::Unified),
+ delta::State::HunkZero(DiffType::Unified, None),
BgShouldFill::default(),
)
}
@@ -64,7 +64,7 @@ pub fn show_colors() -> std::io::Result<()> {
painter.syntax_highlight_and_paint_line(
line,
paint::StyleSectionSpecifier::Style(style),
- delta::State::HunkZero(DiffType::Unified),
+ delta::State::HunkZero(DiffType::Unified, None),
BgShouldFill::default(),
)
}
diff --git a/src/tests/test_example_diffs.rs b/src/tests/test_example_diffs.rs
index 0244ef80..ce917c36 100644
--- a/src/tests/test_example_diffs.rs
+++ b/src/tests/test_example_diffs.rs
@@ -1543,7 +1543,7 @@ src/align.rs:71: impl<'a> Alignment<'a> { │
1,
" for (i, x_i) in self.x.iter().enumerate() {",
"rs",
- State::HunkZero(DiffType::Unified),
+ State::HunkZero(DiffType::Unified, None),
&config,
);
}