fix: include underline color in anstyle conversion (#2004)

Underline color wasn't included in the style conversion logic.
This commit is contained in:
Austin Schey 2025-07-20 17:07:29 -07:00 committed by GitHub
parent 72334ed61c
commit 1fe64de09a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -190,6 +190,8 @@ impl From<anstyle::Style> for Style {
Self { Self {
fg: style.get_fg_color().map(Color::from), fg: style.get_fg_color().map(Color::from),
bg: style.get_bg_color().map(Color::from), bg: style.get_bg_color().map(Color::from),
#[cfg(feature = "underline-color")]
underline_color: style.get_underline_color().map(Color::from),
add_modifier: style.get_effects().into(), add_modifier: style.get_effects().into(),
..Default::default() ..Default::default()
} }
@ -207,6 +209,11 @@ impl From<Style> for anstyle::Style {
let bg = anstyle::Color::from(bg); let bg = anstyle::Color::from(bg);
anstyle_style = anstyle_style.bg_color(Some(bg)); anstyle_style = anstyle_style.bg_color(Some(bg));
} }
#[cfg(feature = "underline-color")]
if let Some(underline) = style.underline_color {
let underline = anstyle::Color::from(underline);
anstyle_style = anstyle_style.underline_color(Some(underline));
}
anstyle_style = anstyle_style.effects(style.add_modifier.into()); anstyle_style = anstyle_style.effects(style.add_modifier.into());
anstyle_style anstyle_style
} }
@ -300,10 +307,13 @@ mod tests {
let anstyle_style = anstyle::Style::new() let anstyle_style = anstyle::Style::new()
.fg_color(Some(anstyle::Color::Ansi(AnsiColor::Red))) .fg_color(Some(anstyle::Color::Ansi(AnsiColor::Red)))
.bg_color(Some(anstyle::Color::Ansi(AnsiColor::Blue))) .bg_color(Some(anstyle::Color::Ansi(AnsiColor::Blue)))
.underline_color(Some(anstyle::Color::Ansi(AnsiColor::Green)))
.effects(Effects::BOLD | Effects::ITALIC); .effects(Effects::BOLD | Effects::ITALIC);
let style = Style::from(anstyle_style); let style = Style::from(anstyle_style);
assert_eq!(style.fg, Some(Color::Red)); assert_eq!(style.fg, Some(Color::Red));
assert_eq!(style.bg, Some(Color::Blue)); assert_eq!(style.bg, Some(Color::Blue));
#[cfg(feature = "underline-color")]
assert_eq!(style.underline_color, Some(Color::Green));
assert!(style.add_modifier.contains(Modifier::BOLD)); assert!(style.add_modifier.contains(Modifier::BOLD));
assert!(style.add_modifier.contains(Modifier::ITALIC)); assert!(style.add_modifier.contains(Modifier::ITALIC));
} }
@ -313,6 +323,8 @@ mod tests {
let style = Style { let style = Style {
fg: Some(Color::Red), fg: Some(Color::Red),
bg: Some(Color::Blue), bg: Some(Color::Blue),
#[cfg(feature = "underline-color")]
underline_color: Some(Color::Green),
add_modifier: Modifier::BOLD | Modifier::ITALIC, add_modifier: Modifier::BOLD | Modifier::ITALIC,
..Default::default() ..Default::default()
}; };
@ -325,6 +337,11 @@ mod tests {
anstyle_style.get_bg_color(), anstyle_style.get_bg_color(),
Some(anstyle::Color::Ansi(AnsiColor::Blue)) Some(anstyle::Color::Ansi(AnsiColor::Blue))
); );
#[cfg(feature = "underline-color")]
assert_eq!(
anstyle_style.get_underline_color(),
Some(anstyle::Color::Ansi(AnsiColor::Green))
);
assert!(anstyle_style.get_effects().contains(Effects::BOLD)); assert!(anstyle_style.get_effects().contains(Effects::BOLD));
assert!(anstyle_style.get_effects().contains(Effects::ITALIC)); assert!(anstyle_style.get_effects().contains(Effects::ITALIC));
} }