Skip to content

Commit f0fb5d3

Browse files
committed
refactor(test): Switch termcolor to anstream
1 parent c0fd362 commit f0fb5d3

File tree

4 files changed

+28
-34
lines changed

4 files changed

+28
-34
lines changed

Cargo.lock

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ edition = "2021"
1616
license = "MIT OR Apache-2.0"
1717

1818
[workspace.dependencies]
19-
anstream = { version = "0.6.3", default-features = false }
20-
anstyle = "1.0.3"
19+
anstream = "0.6.3"
20+
anstyle = "1.0.4"
2121
anstyle-termcolor = "1.1.0"
2222
anyhow = "1.0.75"
2323
base64 = "0.21.3"

crates/cargo-test-support/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ publish = false
1010
doctest = false
1111

1212
[dependencies]
13+
anstream.workspace = true
14+
anstyle.workspace = true
1315
anyhow.workspace = true
1416
cargo-test-macro.workspace = true
1517
cargo-util.workspace = true
@@ -24,7 +26,6 @@ serde = { workspace = true, features = ["derive"] }
2426
serde_json.workspace = true
2527
snapbox.workspace = true
2628
tar.workspace = true
27-
termcolor.workspace = true
2829
time.workspace = true
2930
toml.workspace = true
3031
url.workspace = true

crates/cargo-test-support/src/diff.rs

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
88
use std::fmt;
99
use std::io::Write;
10-
use termcolor::{Ansi, Color, ColorSpec, NoColor, WriteColor};
1110

1211
/// A single line change to be applied to the original.
1312
#[derive(Debug, Eq, PartialEq)]
@@ -111,42 +110,35 @@ where
111110
}
112111

113112
pub fn render_colored_changes<T: fmt::Display>(changes: &[Change<T>]) -> String {
114-
// termcolor is not very ergonomic, but I don't want to bring in another dependency.
115-
let mut red = ColorSpec::new();
116-
red.set_fg(Some(Color::Red));
117-
let mut green = ColorSpec::new();
118-
green.set_fg(Some(Color::Green));
119-
let mut dim = ColorSpec::new();
120-
dim.set_dimmed(true);
121-
let mut v = Vec::new();
122-
let mut result: Box<dyn WriteColor> = if crate::is_ci() {
113+
// anstyle is not very ergonomic, but I don't want to bring in another dependency.
114+
let red = anstyle::AnsiColor::Red.on_default().render();
115+
let green = anstyle::AnsiColor::Green.on_default().render();
116+
let dim = (anstyle::Style::new() | anstyle::Effects::DIMMED).render();
117+
let bold = (anstyle::Style::new() | anstyle::Effects::BOLD).render();
118+
let reset = anstyle::Reset.render();
119+
120+
let choice = if crate::is_ci() {
123121
// Don't use color on CI. Even though GitHub can display colors, it
124122
// makes reading the raw logs more difficult.
125-
Box::new(NoColor::new(&mut v))
123+
anstream::ColorChoice::Never
126124
} else {
127-
Box::new(Ansi::new(&mut v))
125+
anstream::AutoStream::choice(&std::io::stdout())
128126
};
127+
let mut buffer = anstream::AutoStream::new(anstream::Buffer::new(), choice);
129128

130129
for change in changes {
131130
let (nums, sign, color, text) = match change {
132-
Change::Add(i, s) => (format!(" {:<4} ", i), '+', &green, s),
133-
Change::Remove(i, s) => (format!("{:<4} ", i), '-', &red, s),
134-
Change::Keep(x, y, s) => (format!("{:<4}{:<4} ", x, y), ' ', &dim, s),
131+
Change::Add(i, s) => (format!(" {:<4} ", i), '+', green, s),
132+
Change::Remove(i, s) => (format!("{:<4} ", i), '-', red, s),
133+
Change::Keep(x, y, s) => (format!("{:<4}{:<4} ", x, y), ' ', dim, s),
135134
};
136-
result.set_color(&dim).unwrap();
137-
write!(result, "{}", nums).unwrap();
138-
let mut bold = color.clone();
139-
bold.set_bold(true);
140-
result.set_color(&bold).unwrap();
141-
write!(result, "{}", sign).unwrap();
142-
result.reset().unwrap();
143-
result.set_color(&color).unwrap();
144-
write!(result, "{}", text).unwrap();
145-
result.reset().unwrap();
146-
writeln!(result).unwrap();
135+
write!(
136+
buffer,
137+
"{dim}{nums}{reset}{bold}{sign}{reset}{color}{text}{reset}"
138+
)
139+
.unwrap();
147140
}
148-
drop(result);
149-
String::from_utf8(v).unwrap()
141+
String::from_utf8(buffer.into_inner().as_bytes().to_owned()).unwrap()
150142
}
151143

152144
#[cfg(test)]

0 commit comments

Comments
 (0)