feat(calc): strip underscore digit separators

This commit is contained in:
2026-03-15 19:21:43 +01:00
parent bf065ffdf0
commit be7c2b6b59

View File

@@ -15,6 +15,10 @@ impl Default for CalcPlugin {
}
}
fn preprocess(expr: &str) -> String {
expr.replace('_', "")
}
fn should_eval(query: &str) -> bool {
query
.chars()
@@ -34,7 +38,9 @@ impl Plugin for CalcPlugin {
if !should_eval(query) {
return vec![];
}
let expr = query.strip_prefix('=').unwrap_or(query);
let raw = query.strip_prefix('=').unwrap_or(query);
let expr_owned = preprocess(raw);
let expr = expr_owned.as_str();
match evalexpr::eval_number(expr) {
Ok(n) if n.is_finite() => {
let value_str = if n.fract() == 0.0 {
@@ -43,7 +49,6 @@ impl Plugin for CalcPlugin {
format!("{n}")
};
let display = format!("= {value_str}");
let expr_owned = expr.to_string();
vec![SearchResult {
id: ResultId::new("calc-result"),
title: ResultTitle::new(display),
@@ -81,4 +86,11 @@ mod tests {
let p = CalcPlugin::new();
assert!(p.search("1/0").await.is_empty());
}
#[tokio::test]
async fn calc_underscore_separator() {
let p = CalcPlugin::new();
let results = p.search("1_000 * 2").await;
assert_eq!(results[0].title.as_str(), "= 2000");
}
}