fix(markdown): restore ratatui bold assertions

Acceptance-Criteria:
- cargo test -p owlen-markdown completes without Style::contains usage
- Workspace lint hook passes under cargo clippy --all-features -D warnings
- Markdown heading and inline code tests still confirm bold styling

Test-Notes:
- cargo test -p owlen-markdown
- cargo clippy -p owlen-markdown --tests -- -D warnings
- cargo clippy --all-features -- -D warnings
This commit is contained in:
2025-10-25 01:10:17 +02:00
parent 8f9d601fdc
commit 02df6d893c
6 changed files with 20 additions and 29 deletions

View File

@@ -912,30 +912,24 @@ impl SessionController {
let guard = self.config.lock().await; let guard = self.config.lock().await;
guard guard
.providers .providers
.iter() .keys()
.map(|(name, _)| (name.clone(), Self::quota_from_config(&guard, name))) .map(|name| (name.clone(), Self::quota_from_config(&guard, name)))
.collect::<HashMap<_, _>>() .collect::<HashMap<_, _>>()
}; };
let now = SystemTime::now(); let now = SystemTime::now();
let mut provider_names: HashSet<String> = quota_map.keys().cloned().collect(); let mut provider_names: HashSet<String> = quota_map.keys().cloned().collect();
let snapshots = { let ledger = self.usage_ledger.lock().await;
let ledger = self.usage_ledger.lock().await; provider_names.extend(ledger.provider_keys().cloned());
for key in ledger.provider_keys() {
provider_names.insert(key.clone());
}
provider_names provider_names
.into_iter() .into_iter()
.map(|provider| { .map(|provider| {
let quota = quota_map.get(&provider).cloned().unwrap_or_default(); let quota = quota_map.get(&provider).cloned().unwrap_or_default();
ledger.snapshot(&provider, quota, now) ledger.snapshot(&provider, quota, now)
}) })
.collect::<Vec<_>>() .collect()
};
snapshots
} }
// Asynchronous access to the configuration (used internally). // Asynchronous access to the configuration (used internally).

View File

@@ -167,10 +167,7 @@ impl UsageLedger {
Err(_) => 0, Err(_) => 0,
}; };
let entry = self let entry = self.providers.entry(provider.to_string()).or_default();
.providers
.entry(provider.to_string())
.or_insert_with(VecDeque::new);
entry.push_back(UsageRecord { entry.push_back(UsageRecord {
timestamp: ts, timestamp: ts,

View File

@@ -251,7 +251,7 @@ mod tests {
assert!( assert!(
line.spans line.spans
.iter() .iter()
.any(|span| span.style.contains(Modifier::BOLD)) .any(|span| span.style.add_modifier.contains(Modifier::BOLD))
); );
} }
@@ -265,6 +265,6 @@ mod tests {
.find(|span| span.content.as_ref() == "code") .find(|span| span.content.as_ref() == "code")
.cloned() .cloned()
.unwrap(); .unwrap();
assert!(styled.style.contains(Modifier::BOLD)); assert!(styled.style.add_modifier.contains(Modifier::BOLD));
} }
} }

View File

@@ -7471,7 +7471,7 @@ impl ChatApp {
} }
"web" => { "web" => {
let action = let action =
args.get(0).map(|value| value.to_ascii_lowercase()); args.first().map(|value| value.to_ascii_lowercase());
match action.as_deref() { match action.as_deref() {
Some("on") | Some("enable") => { Some("on") | Some("enable") => {
match self.set_web_tool_enabled(true).await { match self.set_web_tool_enabled(true).await {
@@ -8627,9 +8627,7 @@ impl ChatApp {
} }
fn format_percent_value(percent: f64) -> String { fn format_percent_value(percent: f64) -> String {
if percent >= 100.0 || percent == 0.0 { if percent >= 10.0 || percent == 0.0 {
format!("{percent:.0}")
} else if percent >= 10.0 {
format!("{percent:.0}") format!("{percent:.0}")
} else { } else {
format!("{percent:.1}") format!("{percent:.1}")
@@ -12690,6 +12688,7 @@ fn normalize_cloud_endpoint(endpoint: &str) -> String {
} }
#[cfg(test)] #[cfg(test)]
#[allow(clippy::items_after_test_module)]
mod tests { mod tests {
use super::{ChatApp, ModelAvailabilityState, ModelScope, render_markdown_lines, wrap_unicode}; use super::{ChatApp, ModelAvailabilityState, ModelScope, render_markdown_lines, wrap_unicode};
use crate::app::UiRuntime; use crate::app::UiRuntime;

View File

@@ -325,6 +325,7 @@ pub fn match_score(candidate: &str, query: &str) -> Option<(usize, usize)> {
} }
#[cfg(test)] #[cfg(test)]
#[allow(clippy::items_after_test_module)]
mod tests { mod tests {
use super::*; use super::*;

View File

@@ -139,7 +139,7 @@ fn usage_gauge_descriptor(
} }
Some(GaugeDescriptor { Some(GaugeDescriptor {
title: format!("{title}"), title: title.to_string(),
detail: format!("{detail} · {shorthand}"), detail: format!("{detail} · {shorthand}"),
percent_label, percent_label,
ratio, ratio,
@@ -4796,7 +4796,7 @@ fn render_theme_browser(frame: &mut Frame<'_>, app: &ChatApp) {
]) ])
}; };
if left_sections.len() >= 1 { if !left_sections.is_empty() {
let search_paragraph = Paragraph::new(vec![search_line, instruction_line]) let search_paragraph = Paragraph::new(vec![search_line, instruction_line])
.style(Style::default().bg(palette.highlight).fg(palette.label)); .style(Style::default().bg(palette.highlight).fg(palette.label));
frame.render_widget(search_paragraph, left_sections[0]); frame.render_widget(search_paragraph, left_sections[0]);