summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThomas Otto <th1000s@posteo.net>2021-10-16 13:14:22 +0200
committerThomas Otto <th1000s@posteo.net>2021-10-16 14:07:30 +0200
commit464e9cab80dcc3301d1a8c26f8695d312d4642f2 (patch)
treea2aa628262b97944a23000a5be907dfc992a07cc /src
parentf467f4cdd082ae5b2e032f1f573f488c03de6f5c (diff)
Left/Right converted into a simple typedef
Diffstat (limited to 'src')
-rw-r--r--src/features/line_numbers.rs22
-rw-r--r--src/features/side_by_side.rs40
2 files changed, 20 insertions, 42 deletions
diff --git a/src/features/line_numbers.rs b/src/features/line_numbers.rs
index 0d282557..2ac0de01 100644
--- a/src/features/line_numbers.rs
+++ b/src/features/line_numbers.rs
@@ -6,7 +6,7 @@ use regex::Regex;
use crate::config;
use crate::delta::State;
use crate::features::hyperlinks;
-use crate::features::side_by_side::PanelSide;
+use crate::features::side_by_side::{Left, PanelSide, Right};
use crate::features::OptionValueFunction;
use crate::format;
use crate::plusminus::*;
@@ -69,8 +69,8 @@ pub fn format_and_paint_line_numbers<'a>(
side_by_side_panel: Option<PanelSide>,
config: &'a config::Config,
) -> Vec<ansi_term::ANSIGenericString<'a, str>> {
- let nr_left = line_numbers_data.line_number[Minus];
- let nr_right = line_numbers_data.line_number[Plus];
+ let nr_left = line_numbers_data.line_number[Left];
+ let nr_right = line_numbers_data.line_number[Right];
let (minus_style, zero_style, plus_style) = (
config.line_numbers_minus_style,
config.line_numbers_zero_style,
@@ -78,16 +78,16 @@ pub fn format_and_paint_line_numbers<'a>(
);
let ((minus_number, plus_number), (minus_style, plus_style)) = match state {
State::HunkMinus(_) => {
- line_numbers_data.line_number[Minus] += 1;
+ line_numbers_data.line_number[Left] += 1;
((Some(nr_left), None), (minus_style, plus_style))
}
State::HunkZero => {
- line_numbers_data.line_number[Minus] += 1;
- line_numbers_data.line_number[Plus] += 1;
+ line_numbers_data.line_number[Left] += 1;
+ line_numbers_data.line_number[Right] += 1;
((Some(nr_left), Some(nr_right)), (zero_style, zero_style))
}
State::HunkPlus(_) => {
- line_numbers_data.line_number[Plus] += 1;
+ line_numbers_data.line_number[Right] += 1;
((None, Some(nr_right)), (minus_style, plus_style))
}
_ => return Vec::new(),
@@ -97,14 +97,14 @@ pub fn format_and_paint_line_numbers<'a>(
let (emit_left, emit_right) = match (config.side_by_side, side_by_side_panel) {
(false, _) => (true, true),
- (true, Some(PanelSide::Left)) => (true, false),
- (true, Some(PanelSide::Right)) => (false, true),
+ (true, Some(Left)) => (true, false),
+ (true, Some(Right)) => (false, true),
(true, None) => unreachable!(),
};
if emit_left {
formatted_numbers.extend(format_and_paint_line_number_field(
- &line_numbers_data.format_data[PanelSide::Left],
+ &line_numbers_data.format_data[Left],
&config.line_numbers_left_style,
minus_number,
plus_number,
@@ -118,7 +118,7 @@ pub fn format_and_paint_line_numbers<'a>(
if emit_right {
formatted_numbers.extend(format_and_paint_line_number_field(
- &line_numbers_data.format_data[PanelSide::Right],
+ &line_numbers_data.format_data[Right],
&config.line_numbers_right_style,
minus_number,
plus_number,
diff --git a/src/features/side_by_side.rs b/src/features/side_by_side.rs
index 6d85b7af..ca493949 100644
--- a/src/features/side_by_side.rs
+++ b/src/features/side_by_side.rs
@@ -1,5 +1,3 @@
-use std::ops::{Index, IndexMut};
-
use itertools::Itertools;
use syntect::highlighting::Style as SyntectStyle;
@@ -28,41 +26,21 @@ pub fn make_feature() -> Vec<(String, OptionValueFunction)> {
])
}
+// Aliases for Minus/Plus because Left/Right and PanelSide makes
+// more sense in a side-by-side context.
+pub use crate::plusminus::PlusMinusIndex as PanelSide;
+pub use PlusMinusIndex::Minus as Left;
+pub use PlusMinusIndex::Plus as Right;
+
+#[derive(Debug)]
pub struct Panel {
pub width: usize,
pub offset: usize,
}
-// Same as plusminus::PlusMinusIndex but with Left/Right instead
-// of Minus/Plus enum names. Only used in a side-by-side context.
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
-pub enum PanelSide {
- Left,
- Right,
-}
-
-use PanelSide::*;
-
-impl<T> Index<PanelSide> for PlusMinus<T> {
- type Output = T;
- fn index(&self, side: PanelSide) -> &Self::Output {
- match side {
- PanelSide::Left => &self.minus,
- PanelSide::Right => &self.plus,
- }
- }
-}
-
-impl<T> IndexMut<PanelSide> for PlusMinus<T> {
- fn index_mut(&mut self, side: PanelSide) -> &mut Self::Output {
- match side {
- PanelSide::Left => &mut self.minus,
- PanelSide::Right => &mut self.plus,
- }
- }
-}
+type LeftRight<T> = PlusMinus<T>;
-pub type SideBySideData = PlusMinus<Panel>;
+pub type SideBySideData = LeftRight<Panel>;
impl SideBySideData {
pub fn new_sbs(decorations_width: &cli::Width, available_terminal_width: &usize) -> Self {