diff options
author | Dan Davison <dandavison7@gmail.com> | 2020-08-14 01:42:51 -0400 |
---|---|---|
committer | Dan Davison <dandavison7@gmail.com> | 2020-08-14 10:14:54 -0400 |
commit | de114e3ea52c82ab92f4cc52aefaf76e027a3f07 (patch) | |
tree | 7349f4976b73b854355177da8fc03bd95c0e0344 | |
parent | 0a9c48c75051fb507ec1a801ca9d0cf96fadbc48 (diff) |
Use native ansi-parsing utilities instead of console crate
Fixes #262
console was great but it didn't support ANSI OSC sequences.
-rw-r--r-- | src/delta.rs | 4 | ||||
-rw-r--r-- | src/draw.rs | 9 | ||||
-rw-r--r-- | src/features/line_numbers.rs | 2 | ||||
-rw-r--r-- | src/features/side_by_side.rs | 12 | ||||
-rw-r--r-- | src/tests/ansi_test_utils.rs | 8 | ||||
-rw-r--r-- | src/tests/integration_test_utils.rs | 4 | ||||
-rw-r--r-- | src/tests/test_example_diffs.rs | 4 |
7 files changed, 19 insertions, 24 deletions
diff --git a/src/delta.rs b/src/delta.rs index db3c752c..dee3afef 100644 --- a/src/delta.rs +++ b/src/delta.rs @@ -3,9 +3,9 @@ use std::io::BufRead; use std::io::Write; use bytelines::ByteLines; -use console::strip_ansi_codes; use unicode_segmentation::UnicodeSegmentation; +use crate::ansi; use crate::cli; use crate::config::Config; use crate::draw; @@ -78,7 +78,7 @@ where while let Some(Ok(raw_line_bytes)) = lines.next() { let raw_line = String::from_utf8_lossy(&raw_line_bytes); - let line = strip_ansi_codes(&raw_line).to_string(); + let line = ansi::strip_ansi_codes(&raw_line).to_string(); if source == Source::Unknown { source = detect_source(&line); } diff --git a/src/draw.rs b/src/draw.rs index 9def6db8..a01e6a96 100644 --- a/src/draw.rs +++ b/src/draw.rs @@ -3,9 +3,8 @@ use std::io::Write; use ansi_term; use box_drawing; -use console::strip_ansi_codes; -use unicode_width::UnicodeWidthStr; +use crate::ansi; use crate::cli::Width; use crate::style::Style; @@ -40,7 +39,7 @@ pub fn write_boxed( } else { box_drawing::light::UP_LEFT }; - let box_width = UnicodeWidthStr::width(strip_ansi_codes(text).as_ref()); + let box_width = ansi::measure_text_width(text); write_boxed_partial( writer, text, @@ -63,7 +62,7 @@ pub fn write_boxed_with_underline( text_style: Style, decoration_style: ansi_term::Style, ) -> std::io::Result<()> { - let box_width = UnicodeWidthStr::width(strip_ansi_codes(text).as_ref()); + let box_width = ansi::measure_text_width(text); write_boxed_with_horizontal_whisker( writer, text, @@ -162,7 +161,7 @@ fn _write_under_or_over_lined( text_style: Style, decoration_style: ansi_term::Style, ) -> std::io::Result<()> { - let text_width = UnicodeWidthStr::width(strip_ansi_codes(text).as_ref()); + let text_width = ansi::measure_text_width(text); let line_width = match *line_width { Width::Fixed(n) => max(n, text_width), Width::Variable => text_width, diff --git a/src/features/line_numbers.rs b/src/features/line_numbers.rs index ca024ca2..0ad5057d 100644 --- a/src/features/line_numbers.rs +++ b/src/features/line_numbers.rs @@ -309,9 +309,9 @@ fn format_line_number( #[cfg(test)] pub mod tests { - use console::strip_ansi_codes; use regex::Captures; + use crate::ansi::strip_ansi_codes; use crate::tests::integration_test_utils::integration_test_utils::{ make_config_from_args, run_delta, }; diff --git a/src/features/side_by_side.rs b/src/features/side_by_side.rs index 5226c97a..e3837455 100644 --- a/src/features/side_by_side.rs +++ b/src/features/side_by_side.rs @@ -1,8 +1,7 @@ -use console; - use itertools::Itertools; use syntect::highlighting::Style as SyntectStyle; +use crate::ansi; use crate::cli; use crate::config::Config; use crate::delta::State; @@ -379,7 +378,7 @@ fn right_pad_left_panel_line( }; }; // Pad with (maybe painted) spaces to the panel width. - let text_width = console::measure_text_width(&panel_line); + let text_width = ansi::measure_text_width(&panel_line); let panel_width = config.side_by_side_data.left_panel.width; if text_width < panel_width { let fill_style = get_right_fill_style_for_left_panel( @@ -397,7 +396,7 @@ fn right_pad_left_panel_line( ); } else if text_width > panel_width { *panel_line = - console::truncate_str(panel_line, panel_width, &config.truncation_symbol).to_string(); + ansi::truncate_str(panel_line, panel_width, &config.truncation_symbol).to_string(); }; } @@ -414,7 +413,7 @@ fn right_fill_right_panel_line( background_color_extends_to_terminal_width: Option<bool>, config: &Config, ) { - *panel_line = console::truncate_str( + *panel_line = ansi::truncate_str( &panel_line, config.side_by_side_data.right_panel.width, &config.truncation_symbol, @@ -453,8 +452,7 @@ fn right_fill_right_panel_line( #[cfg(test)] pub mod tests { - use console::strip_ansi_codes; - + use crate::ansi::strip_ansi_codes; use crate::features::line_numbers::tests::*; use crate::tests::integration_test_utils::integration_test_utils::{ make_config_from_args, run_delta, diff --git a/src/tests/ansi_test_utils.rs b/src/tests/ansi_test_utils.rs index 34abe8e4..1d5c8f26 100644 --- a/src/tests/ansi_test_utils.rs +++ b/src/tests/ansi_test_utils.rs @@ -1,8 +1,8 @@ #[cfg(test)] pub mod ansi_test_utils { use ansi_term; - use console::strip_ansi_codes; + use crate::ansi; use crate::config::Config; use crate::delta::State; use crate::paint; @@ -61,7 +61,7 @@ pub mod ansi_test_utils { pub fn assert_line_has_no_color(output: &str, line_number: usize, expected_prefix: &str) { let line = output.lines().nth(line_number).unwrap(); - let stripped_line = strip_ansi_codes(line); + let stripped_line = ansi::strip_ansi_codes(line); assert!(stripped_line.starts_with(expected_prefix)); assert_eq!(line, stripped_line); } @@ -98,7 +98,7 @@ pub mod ansi_test_utils { } pub fn get_color_variants(string: &str, config: &Config) -> (String, String) { - let string_without_any_color = strip_ansi_codes(string).to_string(); + let string_without_any_color = ansi::strip_ansi_codes(string).to_string(); let string_with_plus_color_only = config .plus_style .ansi_term_style @@ -161,7 +161,7 @@ pub mod ansi_test_utils { _4_bit_color: bool, ) -> bool { let line = output.lines().nth(line_number).unwrap(); - assert!(strip_ansi_codes(line).starts_with(expected_prefix)); + assert!(ansi::strip_ansi_codes(line).starts_with(expected_prefix)); let mut style = Style::from_str(expected_style, None, None, config.true_color, false); if _4_bit_color { style.ansi_term_style.foreground = style diff --git a/src/tests/integration_test_utils.rs b/src/tests/integration_test_utils.rs index 22a28ca8..37ae0575 100644 --- a/src/tests/integration_test_utils.rs +++ b/src/tests/integration_test_utils.rs @@ -5,9 +5,9 @@ pub mod integration_test_utils { use std::path::Path; use bytelines::ByteLines; - use console::strip_ansi_codes; use itertools; + use crate::ansi; use crate::cli; use crate::config; use crate::delta::delta; @@ -67,7 +67,7 @@ pub mod integration_test_utils { ) -> String { let output = run_delta(&input, config); let line_of_code = output.lines().nth(line_number).unwrap(); - assert!(strip_ansi_codes(line_of_code) == expected_text); + assert!(ansi::strip_ansi_codes(line_of_code) == expected_text); line_of_code.to_string() } diff --git a/src/tests/test_example_diffs.rs b/src/tests/test_example_diffs.rs index a2684eac..ba847c25 100644 --- a/src/tests/test_example_diffs.rs +++ b/src/tests/test_example_diffs.rs @@ -1,8 +1,6 @@ #[cfg(test)] mod tests { - use console::strip_ansi_codes; - - use crate::ansi; + use crate::ansi::{self, strip_ansi_codes}; use crate::delta::State; use crate::style; use crate::tests::ansi_test_utils::ansi_test_utils; |