summaryrefslogtreecommitdiffstats
path: root/src/hunk_header.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/hunk_header.rs')
-rw-r--r--src/hunk_header.rs93
1 files changed, 9 insertions, 84 deletions
diff --git a/src/hunk_header.rs b/src/hunk_header.rs
index 2f54dd79..b44a6330 100644
--- a/src/hunk_header.rs
+++ b/src/hunk_header.rs
@@ -1,55 +1,21 @@
use std::borrow::Cow;
use std::fmt::Write as FmtWrite;
-use std::io::Write;
-use crate::cli;
use crate::config::Config;
use crate::delta;
use crate::draw;
use crate::features;
use crate::paint::Painter;
-use crate::parse;
-use crate::style::{self, DecorationStyle};
+use crate::style::DecorationStyle;
-/// Emit the hunk header, with any requested decoration.
-pub fn handle_hunk_header_line(
+pub fn write_hunk_header_raw(
painter: &mut Painter,
line: &str,
raw_line: &str,
- plus_file: &str,
config: &Config,
) -> std::io::Result<()> {
- let (raw_code_fragment, line_numbers) = parse::parse_hunk_header(&line);
- if config.line_numbers {
- painter
- .line_numbers_data
- .initialize_hunk(&line_numbers, plus_file.to_string());
- }
-
- if config.hunk_header_style.is_raw {
- _write_hunk_header_raw(painter, line, raw_line, config)?;
- } else if config.hunk_header_style.is_omitted {
- writeln!(painter.writer)?;
- } else {
- _write_hunk_header(
- &raw_code_fragment,
- &line_numbers,
- painter,
- line,
- plus_file,
- config,
- )?;
- };
- Ok(())
-}
-
-fn _write_hunk_header_raw(
- painter: &mut Painter,
- line: &str,
- raw_line: &str,
- config: &Config,
-) -> std::io::Result<()> {
- let (mut draw_fn, pad, decoration_ansi_term_style) = _get_draw_fn(config);
+ let (mut draw_fn, pad, decoration_ansi_term_style) =
+ draw::get_draw_function(config.hunk_header_style.decoration_style);
if config.hunk_header_style.decoration_style != DecorationStyle::NoDecoration {
writeln!(painter.writer)?;
}
@@ -64,15 +30,16 @@ fn _write_hunk_header_raw(
Ok(())
}
-fn _write_hunk_header(
+pub fn write_hunk_header(
raw_code_fragment: &str,
- line_numbers: &Vec<(usize, usize)>,
+ line_numbers: &[(usize, usize)],
painter: &mut Painter,
line: &str,
plus_file: &str,
config: &Config,
) -> std::io::Result<()> {
- let (mut draw_fn, _, decoration_ansi_term_style) = _get_draw_fn(config);
+ let (mut draw_fn, _, decoration_ansi_term_style) =
+ draw::get_draw_function(config.hunk_header_style.decoration_style);
let line = if config.color_only {
format!(" {}", &line)
} else if !raw_code_fragment.is_empty() {
@@ -149,50 +116,8 @@ fn _write_hunk_header(
Ok(())
}
-fn _get_draw_fn(
- config: &Config,
-) -> (
- Box<
- dyn FnMut(
- &mut dyn Write,
- &str,
- &str,
- &cli::Width,
- style::Style,
- ansi_term::Style,
- ) -> std::io::Result<()>,
- >,
- bool,
- ansi_term::Style,
-) {
- match config.hunk_header_style.decoration_style {
- DecorationStyle::Box(style) => (Box::new(draw::write_boxed), true, style),
- DecorationStyle::BoxWithUnderline(style) => {
- (Box::new(draw::write_boxed_with_underline), true, style)
- }
- DecorationStyle::BoxWithOverline(style) => {
- // TODO: not implemented
- (Box::new(draw::write_boxed), true, style)
- }
- DecorationStyle::BoxWithUnderOverline(style) => {
- // TODO: not implemented
- (Box::new(draw::write_boxed), true, style)
- }
- DecorationStyle::Underline(style) => (Box::new(draw::write_underlined), false, style),
- DecorationStyle::Overline(style) => (Box::new(draw::write_overlined), false, style),
- DecorationStyle::UnderOverline(style) => {
- (Box::new(draw::write_underoverlined), false, style)
- }
- DecorationStyle::NoDecoration => (
- Box::new(draw::write_no_decoration),
- false,
- ansi_term::Style::new(),
- ),
- }
-}
-
fn _write_line_number(
- line_numbers: &Vec<(usize, usize)>,
+ line_numbers: &[(usize, usize)],
painter: &mut Painter,
plus_file: &str,
config: &Config,