diff options
author | Thomas Otto <th1000s@posteo.net> | 2021-10-18 22:52:43 +0200 |
---|---|---|
committer | Dan Davison <dandavison7@gmail.com> | 2021-10-25 18:29:43 -0400 |
commit | d64532dc7318fad111abfe3b0d1ff727a1d6be0a (patch) | |
tree | 301dd659573f1a8432ffd06e6cb0300ae955fd33 | |
parent | 4f5e3ebbd1106c5f8e418b5743e2166576c9f0a8 (diff) |
Wrap linenumber configs in MinusPlus or LeftRight
-rw-r--r-- | src/config.rs | 30 | ||||
-rw-r--r-- | src/features/line_numbers.rs | 33 | ||||
-rw-r--r-- | src/features/side_by_side.rs | 2 | ||||
-rw-r--r-- | src/paint.rs | 5 | ||||
-rw-r--r-- | src/subcommands/show_config.rs | 16 |
5 files changed, 49 insertions, 37 deletions
diff --git a/src/config.rs b/src/config.rs index 15860a80..296c505b 100644 --- a/src/config.rs +++ b/src/config.rs @@ -16,8 +16,9 @@ use crate::delta::State; use crate::env; use crate::fatal; use crate::features::navigate; -use crate::features::side_by_side; +use crate::features::side_by_side::{self, LeftRight}; use crate::git_config::{GitConfig, GitConfigEntry}; +use crate::minusplus::MinusPlus; use crate::paint::BgFillMethod; use crate::style::{self, Style}; use crate::syntect_utils::FromDeltaStyle; @@ -88,12 +89,9 @@ pub struct Config { pub keep_plus_minus_markers: bool, pub line_fill_method: BgFillMethod, pub line_numbers: bool, - pub line_numbers_left_format: String, - pub line_numbers_left_style: Style, - pub line_numbers_minus_style: Style, - pub line_numbers_plus_style: Style, - pub line_numbers_right_format: String, - pub line_numbers_right_style: Style, + pub line_numbers_format: LeftRight<String>, + pub line_numbers_style_leftright: LeftRight<Style>, + pub line_numbers_style_minusplus: MinusPlus<Style>, pub line_numbers_zero_style: Style, pub line_buffer_size: usize, pub max_line_distance: f64, @@ -307,12 +305,18 @@ impl From<cli::Opt> for Config { line_fill_method }, line_numbers: opt.line_numbers, - line_numbers_left_format: opt.line_numbers_left_format, - line_numbers_left_style, - line_numbers_minus_style, - line_numbers_plus_style, - line_numbers_right_format: opt.line_numbers_right_format, - line_numbers_right_style, + line_numbers_format: LeftRight::new( + opt.line_numbers_left_format, + opt.line_numbers_right_format, + ), + line_numbers_style_leftright: LeftRight::new( + line_numbers_left_style, + line_numbers_right_style, + ), + line_numbers_style_minusplus: MinusPlus::new( + line_numbers_minus_style, + line_numbers_plus_style, + ), line_numbers_zero_style, line_buffer_size: opt.line_buffer_size, max_line_distance: opt.max_line_distance, diff --git a/src/features/line_numbers.rs b/src/features/line_numbers.rs index 8aeb9918..a8491f39 100644 --- a/src/features/line_numbers.rs +++ b/src/features/line_numbers.rs @@ -69,9 +69,9 @@ pub fn linenumbers_and_styles<'a>( 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_style_minusplus[Minus], config.line_numbers_zero_style, - config.line_numbers_plus_style, + config.line_numbers_style_minusplus[Plus], ); let ((minus_number, plus_number), (minus_style, plus_style)) = match state { State::HunkMinus(_) => { @@ -120,7 +120,6 @@ pub fn format_and_paint_line_numbers<'a>( formatted_numbers.extend(format_and_paint_line_number_field( line_numbers_data, Minus, - &config.line_numbers_left_style, &styles, &line_numbers, config, @@ -131,7 +130,6 @@ pub fn format_and_paint_line_numbers<'a>( formatted_numbers.extend(format_and_paint_line_number_field( line_numbers_data, Plus, - &config.line_numbers_right_style, &styles, &line_numbers, config, @@ -157,11 +155,11 @@ pub type SideBySideLineWidth = MinusPlus<usize>; // Although it's probably unusual, a single format string can contain multiple placeholders. E.g. // line-numbers-right-format = "{nm} {np}|" impl<'a> LineNumbersData<'a> { - pub fn from_format_strings(left_format: &'a str, right_format: &'a str) -> LineNumbersData<'a> { + pub fn from_format_strings(format: &'a MinusPlus<String>) -> LineNumbersData<'a> { Self { format_data: MinusPlus::new( - format::parse_line_number_format(left_format, &*LINE_NUMBERS_PLACEHOLDER_REGEX), - format::parse_line_number_format(right_format, &*LINE_NUMBERS_PLACEHOLDER_REGEX), + format::parse_line_number_format(&format[Left], &*LINE_NUMBERS_PLACEHOLDER_REGEX), + format::parse_line_number_format(&format[Right], &*LINE_NUMBERS_PLACEHOLDER_REGEX), ), line_number: MinusPlus::new(0, 0), hunk_max_line_number_width: 0, @@ -212,7 +210,6 @@ impl<'a> LineNumbersData<'a> { fn format_and_paint_line_number_field<'a>( line_numbers_data: &'a LineNumbersData, side: MinusPlusIndex, - style: &Style, styles: &MinusPlus<Style>, line_numbers: &MinusPlus<Option<usize>>, config: &config::Config, @@ -221,6 +218,7 @@ fn format_and_paint_line_number_field<'a>( let format_data = &line_numbers_data.format_data[side]; let plus_file = &line_numbers_data.plus_file; + let style = &config.line_numbers_style_leftright[side]; let mut ansi_strings = Vec::new(); let mut suffix = ""; @@ -479,23 +477,32 @@ pub mod tests { #[test] fn test_line_numbers_data() { - let mut data = LineNumbersData::from_format_strings("", ""); + let format = MinusPlus::new("".into(), "".into()); + let mut data = LineNumbersData::from_format_strings(&format); data.initialize_hunk(&[(10, 11), (10000, 100001)], "a".into()); assert_eq!(data.formatted_width(), MinusPlus::new(0, 0)); - let mut data = LineNumbersData::from_format_strings("│", "│+│"); + let format = MinusPlus::new("│".into(), "│+│".into()); + let mut data = LineNumbersData::from_format_strings(&format); + data.initialize_hunk(&[(10, 11), (10000, 100001)], "a".into()); assert_eq!(data.formatted_width(), MinusPlus::new(1, 3)); - let mut data = LineNumbersData::from_format_strings("│{nm:^3}│", "│{np:^3}│"); + let format = MinusPlus::new("│{nm:^3}│".into(), "│{np:^3}│".into()); + let mut data = LineNumbersData::from_format_strings(&format); + data.initialize_hunk(&[(10, 11), (10000, 100001)], "a".into()); assert_eq!(data.formatted_width(), MinusPlus::new(8, 8)); - let mut data = LineNumbersData::from_format_strings("│{nm:^3}│ │{np:<12}│ │{nm}│", ""); + let format = MinusPlus::new("│{nm:^3}│ │{np:<12}│ │{nm}│".into(), "".into()); + let mut data = LineNumbersData::from_format_strings(&format); + data.initialize_hunk(&[(10, 11), (10000, 100001)], "a".into()); assert_eq!(data.formatted_width(), MinusPlus::new(32, 0)); - let mut data = LineNumbersData::from_format_strings("│{np:^3}│ │{nm:<12}│ │{np}│", ""); + let format = MinusPlus::new("│{np:^3}│ │{nm:<12}│ │{np}│".into(), "".into()); + let mut data = LineNumbersData::from_format_strings(&format); + data.initialize_hunk(&[(10, 11), (10000, 100001)], "a".into()); assert_eq!(data.formatted_width(), MinusPlus::new(32, 0)); } diff --git a/src/features/side_by_side.rs b/src/features/side_by_side.rs index b87207d8..ecd0f3d4 100644 --- a/src/features/side_by_side.rs +++ b/src/features/side_by_side.rs @@ -42,7 +42,7 @@ pub struct Panel { pub offset: usize, } -type LeftRight<T> = MinusPlus<T>; +pub type LeftRight<T> = MinusPlus<T>; pub type SideBySideData = LeftRight<Panel>; diff --git a/src/paint.rs b/src/paint.rs index 3ad88628..16abef83 100644 --- a/src/paint.rs +++ b/src/paint.rs @@ -55,10 +55,7 @@ impl<'a> Painter<'a> { let default_syntax = Self::get_syntax(&config.syntax_set, None); let line_numbers_data = if config.line_numbers { - line_numbers::LineNumbersData::from_format_strings( - &config.line_numbers_left_format, - &config.line_numbers_right_format, - ) + line_numbers::LineNumbersData::from_format_strings(&config.line_numbers_format) } else { line_numbers::LineNumbersData::default() }; diff --git a/src/subcommands/show_config.rs b/src/subcommands/show_config.rs index 5442ae1f..e6e6f246 100644 --- a/src/subcommands/show_config.rs +++ b/src/subcommands/show_config.rs @@ -3,6 +3,8 @@ use std::io::Write; use crate::bat_utils::output::PagingMode; use crate::cli; use crate::config; +use crate::features::side_by_side::{Left, Right}; +use crate::minusplus::*; use crate::paint::BgFillMethod; pub fn show_config(config: &config::Config, writer: &mut dyn Write) -> std::io::Result<()> { @@ -87,13 +89,15 @@ pub fn show_config(config: &config::Config, writer: &mut dyn Write) -> std::io:: line-numbers-right-style = {line_numbers_right_style} line-numbers-left-format = {line_numbers_left_format} line-numbers-right-format = {line_numbers_right_format}", - line_numbers_minus_style = config.line_numbers_minus_style.to_painted_string(), + line_numbers_minus_style = + config.line_numbers_style_minusplus[Minus].to_painted_string(), line_numbers_zero_style = config.line_numbers_zero_style.to_painted_string(), - line_numbers_plus_style = config.line_numbers_plus_style.to_painted_string(), - line_numbers_left_style = config.line_numbers_left_style.to_painted_string(), - line_numbers_right_style = config.line_numbers_right_style.to_painted_string(), - line_numbers_left_format = format_option_value(&config.line_numbers_left_format), - line_numbers_right_format = format_option_value(&config.line_numbers_right_format), + line_numbers_plus_style = config.line_numbers_style_minusplus[Plus].to_painted_string(), + line_numbers_left_style = config.line_numbers_style_leftright[Left].to_painted_string(), + line_numbers_right_style = + config.line_numbers_style_leftright[Right].to_painted_string(), + line_numbers_left_format = format_option_value(&config.line_numbers_format[Left]), + line_numbers_right_format = format_option_value(&config.line_numbers_format[Right]), )? } writeln!( |