summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2020-08-14 01:42:51 -0400
committerDan Davison <dandavison7@gmail.com>2020-08-14 10:14:54 -0400
commitde114e3ea52c82ab92f4cc52aefaf76e027a3f07 (patch)
tree7349f4976b73b854355177da8fc03bd95c0e0344
parent0a9c48c75051fb507ec1a801ca9d0cf96fadbc48 (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.rs4
-rw-r--r--src/draw.rs9
-rw-r--r--src/features/line_numbers.rs2
-rw-r--r--src/features/side_by_side.rs12
-rw-r--r--src/tests/ansi_test_utils.rs8
-rw-r--r--src/tests/integration_test_utils.rs4
-rw-r--r--src/tests/test_example_diffs.rs4
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;