feat(core): Add a has_modifier() method to Style (#2267)

Resolves https://github.com/ratatui/ratatui/issues/2264
This commit is contained in:
三咲雅 misaki masa
2025-12-14 06:07:45 +08:00
committed by GitHub
parent 3bdb9fe982
commit bf84c6229b

View File

@@ -433,6 +433,22 @@ impl Style {
self
}
/// Returns `true` if the style has the given modifier set.
///
/// ## Examples
///
/// ```rust
/// use ratatui_core::style::{Modifier, Style};
///
/// let style = Style::default().add_modifier(Modifier::BOLD | Modifier::ITALIC);
/// assert!(style.has_modifier(Modifier::BOLD));
/// assert!(style.has_modifier(Modifier::ITALIC));
/// assert!(!style.has_modifier(Modifier::UNDERLINED));
/// ```
pub const fn has_modifier(self, modifier: Modifier) -> bool {
self.add_modifier.contains(modifier) && !self.sub_modifier.contains(modifier)
}
/// Results in a combined style that is equivalent to applying the two individual styles to
/// a style one after the other.
///
@@ -812,6 +828,28 @@ mod tests {
assert_eq!(ALL, ALL_SHORT);
}
#[test]
fn has_modifier_checks() {
// basic presence
let style = Style::new().add_modifier(Modifier::BOLD | Modifier::ITALIC);
assert!(style.has_modifier(Modifier::BOLD));
assert!(style.has_modifier(Modifier::ITALIC));
assert!(!style.has_modifier(Modifier::UNDERLINED));
// removal prevents the modifier from being reported as present
let style = Style::new()
.add_modifier(Modifier::BOLD | Modifier::ITALIC)
.remove_modifier(Modifier::ITALIC);
assert!(style.has_modifier(Modifier::BOLD));
assert!(!style.has_modifier(Modifier::ITALIC));
// patching with a style that removes a modifier clears it
let style = Style::new().add_modifier(Modifier::BOLD | Modifier::ITALIC);
let patched = style.patch(Style::new().remove_modifier(Modifier::ITALIC));
assert!(patched.has_modifier(Modifier::BOLD));
assert!(!patched.has_modifier(Modifier::ITALIC));
}
#[rstest]
#[case(Style::new().black(), Color::Black)]
#[case(Style::new().red(), Color::Red)]