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:
@@ -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).
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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::*;
|
||||||
|
|
||||||
|
|||||||
@@ -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]);
|
||||||
|
|||||||
Reference in New Issue
Block a user