Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 27 additions & 30 deletions src/cargo_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ fn filter_cargo_install(output: &str) -> String {
// Already installed / up to date
if already_installed {
let info = ignored_line.split('`').nth(1).unwrap_or(&ignored_line);
return format!("βœ“ cargo install: {} already installed", info);
return format!("cargo install: {} already installed", info);
}

// Errors
Expand Down Expand Up @@ -313,10 +313,7 @@ fn filter_cargo_install(output: &str) -> String {
// Success
let crate_info = format_crate_info(&installed_crate, &installed_version, "package");

let mut result = format!(
"βœ“ cargo install ({}, {} deps compiled)",
crate_info, compiled
);
let mut result = format!("cargo install ({}, {} deps compiled)", crate_info, compiled);

for line in &replaced_lines {
result.push_str(&format!("\n {}", line));
Expand Down Expand Up @@ -502,7 +499,7 @@ fn filter_cargo_nextest(output: &str) -> String {
} else {
format!("{}, {}s", binary_text, duration)
};
return format!("βœ“ cargo nextest: {} ({})", parts.join(", "), meta);
return format!("cargo nextest: {} ({})", parts.join(", "), meta);
}

// With failures - show failure details then summary
Expand Down Expand Up @@ -625,7 +622,7 @@ fn filter_cargo_build(output: &str) -> String {
}

if error_count == 0 && warnings == 0 {
return format!("βœ“ cargo build ({} crates compiled)", compiled);
return format!("cargo build ({} crates compiled)", compiled);
}

let mut result = String::new();
Expand Down Expand Up @@ -739,11 +736,11 @@ impl AggregatedTestResult {

if self.has_duration {
format!(
"βœ“ cargo test: {} ({}, {:.2}s)",
"cargo test: {} ({}, {:.2}s)",
counts, suite_text, self.duration_secs
)
} else {
format!("βœ“ cargo test: {} ({})", counts, suite_text)
format!("cargo test: {} ({})", counts, suite_text)
}
}
}
Expand Down Expand Up @@ -831,7 +828,7 @@ fn filter_cargo_test(output: &str) -> String {

// Fallback: use original behavior if regex failed
for line in &summary_lines {
result.push_str(&format!("βœ“ {}\n", line));
result.push_str(&format!("{}\n", line));
}
return result.trim().to_string();
}
Expand Down Expand Up @@ -931,7 +928,7 @@ fn filter_cargo_clippy(output: &str) -> String {
}

if error_count == 0 && warning_count == 0 {
return "βœ“ cargo clippy: No issues found".to_string();
return "cargo clippy: No issues found".to_string();
}

let mut result = String::new();
Expand Down Expand Up @@ -1103,7 +1100,7 @@ mod tests {
Finished dev [unoptimized + debuginfo] target(s) in 15.23s
"#;
let result = filter_cargo_build(output);
assert!(result.contains("βœ“ cargo build"));
assert!(result.contains("cargo build"));
assert!(result.contains("3 crates compiled"));
}

Expand Down Expand Up @@ -1139,7 +1136,7 @@ test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; fin
"#;
let result = filter_cargo_test(output);
assert!(
result.contains("βœ“ cargo test: 15 passed (1 suite, 0.01s)"),
result.contains("cargo test: 15 passed (1 suite, 0.01s)"),
"Expected compact format, got: {}",
result
);
Expand Down Expand Up @@ -1196,7 +1193,7 @@ test result: ok. 32 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; fin
"#;
let result = filter_cargo_test(output);
assert!(
result.contains("βœ“ cargo test: 137 passed (4 suites, 1.45s)"),
result.contains("cargo test: 137 passed (4 suites, 1.45s)"),
"Expected aggregated format, got: {}",
result
);
Expand Down Expand Up @@ -1260,7 +1257,7 @@ test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; fini
"#;
let result = filter_cargo_test(output);
assert!(
result.contains("βœ“ cargo test: 0 passed (3 suites, 0.00s)"),
result.contains("cargo test: 0 passed (3 suites, 0.00s)"),
"Expected compact format for zero tests, got: {}",
result
);
Expand All @@ -1280,7 +1277,7 @@ test result: ok. 18 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; fin
"#;
let result = filter_cargo_test(output);
assert!(
result.contains("βœ“ cargo test: 63 passed, 5 ignored, 2 filtered out (2 suites, 0.70s)"),
result.contains("cargo test: 63 passed, 5 ignored, 2 filtered out (2 suites, 0.70s)"),
"Expected compact format with ignored and filtered, got: {}",
result
);
Expand All @@ -1295,7 +1292,7 @@ test result: ok. 15 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; fin
"#;
let result = filter_cargo_test(output);
assert!(
result.contains("βœ“ cargo test: 15 passed (1 suite, 0.01s)"),
result.contains("cargo test: 15 passed (1 suite, 0.01s)"),
"Expected singular 'suite', got: {}",
result
);
Expand All @@ -1309,9 +1306,9 @@ running 15 tests
test result: MALFORMED LINE WITHOUT PROPER FORMAT
"#;
let result = filter_cargo_test(output);
// Should fallback to original behavior (show line with checkmark)
// Should fallback to original behavior (show line without checkmark)
assert!(
result.contains("βœ“ test result: MALFORMED"),
result.contains("test result: MALFORMED"),
"Expected fallback format, got: {}",
result
);
Expand All @@ -1323,7 +1320,7 @@ test result: MALFORMED LINE WITHOUT PROPER FORMAT
Finished dev [unoptimized + debuginfo] target(s) in 1.53s
"#;
let result = filter_cargo_clippy(output);
assert!(result.contains("βœ“ cargo clippy: No issues found"));
assert!(result.contains("cargo clippy: No issues found"));
}

#[test]
Expand Down Expand Up @@ -1366,7 +1363,7 @@ warning: `rtk` (bin) generated 2 warnings
Replaced package `rtk v0.9.4` with `rtk v0.11.0` (/Users/user/.cargo/bin/rtk)
"#;
let result = filter_cargo_install(output);
assert!(result.contains("βœ“ cargo install"), "got: {}", result);
assert!(result.contains("cargo install"), "got: {}", result);
assert!(result.contains("rtk v0.11.0"), "got: {}", result);
assert!(result.contains("5 deps compiled"), "got: {}", result);
assert!(result.contains("Replaced"), "got: {}", result);
Expand All @@ -1383,7 +1380,7 @@ warning: `rtk` (bin) generated 2 warnings
Replaced package `rtk v0.9.4` with `rtk v0.11.0` (/Users/user/.cargo/bin/rtk)
"#;
let result = filter_cargo_install(output);
assert!(result.contains("βœ“ cargo install"), "got: {}", result);
assert!(result.contains("cargo install"), "got: {}", result);
assert!(result.contains("Replacing"), "got: {}", result);
assert!(result.contains("Replaced"), "got: {}", result);
}
Expand Down Expand Up @@ -1428,7 +1425,7 @@ error: aborting due to 1 previous error
#[test]
fn test_filter_cargo_install_empty_output() {
let result = filter_cargo_install("");
assert!(result.contains("βœ“ cargo install"), "got: {}", result);
assert!(result.contains("cargo install"), "got: {}", result);
assert!(result.contains("0 deps compiled"), "got: {}", result);
}

Expand All @@ -1442,7 +1439,7 @@ error: aborting due to 1 previous error
warning: be sure to add `/Users/user/.cargo/bin` to your PATH
"#;
let result = filter_cargo_install(output);
assert!(result.contains("βœ“ cargo install"), "got: {}", result);
assert!(result.contains("cargo install"), "got: {}", result);
assert!(
result.contains("be sure to add"),
"PATH warning should be kept: {}",
Expand Down Expand Up @@ -1492,7 +1489,7 @@ error: aborting due to 2 previous errors
Installing rtk v0.11.0
"#;
let result = filter_cargo_install(output);
assert!(result.contains("βœ“ cargo install"), "got: {}", result);
assert!(result.contains("cargo install"), "got: {}", result);
assert!(!result.contains("Locking"), "got: {}", result);
assert!(!result.contains("Blocking"), "got: {}", result);
assert!(!result.contains("Downloading"), "got: {}", result);
Expand All @@ -1506,7 +1503,7 @@ error: aborting due to 2 previous errors
"#;
let result = filter_cargo_install(output);
// Path-based install: crate info not extracted from path
assert!(result.contains("βœ“ cargo install"), "got: {}", result);
assert!(result.contains("cargo install"), "got: {}", result);
assert!(result.contains("1 deps compiled"), "got: {}", result);
}

Expand All @@ -1532,7 +1529,7 @@ error: aborting due to 2 previous errors
"#;
let result = filter_cargo_nextest(output);
assert_eq!(
result, "βœ“ cargo nextest: 301 passed (1 binary, 0.192s)",
result, "cargo nextest: 301 passed (1 binary, 0.192s)",
"got: {}",
result
);
Expand Down Expand Up @@ -1617,7 +1614,7 @@ error: test run failed
"#;
let result = filter_cargo_nextest(output);
assert_eq!(
result, "βœ“ cargo nextest: 50 passed, 3 skipped (2 binaries, 0.500s)",
result, "cargo nextest: 50 passed, 3 skipped (2 binaries, 0.500s)",
"got: {}",
result
);
Expand Down Expand Up @@ -1668,7 +1665,7 @@ error: test run failed
"#;
let result = filter_cargo_nextest(output);
assert_eq!(
result, "βœ“ cargo nextest: 100 passed (5 binaries, 1.234s)",
result, "cargo nextest: 100 passed (5 binaries, 1.234s)",
"got: {}",
result
);
Expand Down Expand Up @@ -1703,7 +1700,7 @@ error: test run failed
result
);
assert!(
result.contains("βœ“ cargo nextest: 10 passed"),
result.contains("cargo nextest: 10 passed"),
"got: {}",
result
);
Expand Down
10 changes: 5 additions & 5 deletions src/cc_economics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ fn merge_weekly(cc: Option<Vec<CcusagePeriod>>, rtk: Vec<WeekStats>) -> Vec<Peri
let monday_key = match convert_saturday_to_monday(&entry.week_start) {
Some(m) => m,
None => {
eprintln!("⚠️ Invalid week_start format: {}", entry.week_start);
eprintln!("[warn] Invalid week_start format: {}", entry.week_start);
continue;
}
};
Expand Down Expand Up @@ -442,7 +442,7 @@ fn display_summary(tracker: &Tracker, verbose: u8) -> Result<()> {

let totals = compute_totals(&periods);

println!("πŸ’° Claude Code Economics");
println!("[cost] Claude Code Economics");
println!("════════════════════════════════════════════════════");
println!();

Expand Down Expand Up @@ -550,7 +550,7 @@ fn display_daily(tracker: &Tracker, verbose: u8) -> Result<()> {
.context("Failed to load daily token savings from database")?;
let periods = merge_daily(cc_daily, rtk_daily);

println!("πŸ“… Daily Economics");
println!("Daily Economics");
println!("════════════════════════════════════════════════════");
print_period_table(&periods, verbose);
Ok(())
Expand All @@ -564,7 +564,7 @@ fn display_weekly(tracker: &Tracker, verbose: u8) -> Result<()> {
.context("Failed to load weekly token savings from database")?;
let periods = merge_weekly(cc_weekly, rtk_weekly);

println!("πŸ“… Weekly Economics");
println!("Weekly Economics");
println!("════════════════════════════════════════════════════");
print_period_table(&periods, verbose);
Ok(())
Expand All @@ -578,7 +578,7 @@ fn display_monthly(tracker: &Tracker, verbose: u8) -> Result<()> {
.context("Failed to load monthly token savings from database")?;
let periods = merge_monthly(cc_monthly, rtk_monthly);

println!("πŸ“… Monthly Economics");
println!("Monthly Economics");
println!("════════════════════════════════════════════════════");
print_period_table(&periods, verbose);
Ok(())
Expand Down
6 changes: 3 additions & 3 deletions src/ccusage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ pub fn fetch(granularity: Granularity) -> Result<Option<Vec<CcusagePeriod>>> {
let mut cmd = match build_command() {
Some(cmd) => cmd,
None => {
eprintln!("⚠️ ccusage not found. Install: npm i -g ccusage (or use npx ccusage)");
eprintln!("[warn] ccusage not found. Install: npm i -g ccusage (or use npx ccusage)");
return Ok(None);
}
};
Expand All @@ -146,7 +146,7 @@ pub fn fetch(granularity: Granularity) -> Result<Option<Vec<CcusagePeriod>>> {

let output = match output {
Err(e) => {
eprintln!("⚠️ ccusage execution failed: {}", e);
eprintln!("[warn] ccusage execution failed: {}", e);
return Ok(None);
}
Ok(o) => o,
Expand All @@ -155,7 +155,7 @@ pub fn fetch(granularity: Granularity) -> Result<Option<Vec<CcusagePeriod>>> {
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
eprintln!(
"⚠️ ccusage exited with {}: {}",
"[warn] ccusage exited with {}: {}",
output.status,
stderr.trim()
);
Expand Down
Loading
Loading