Просмотр исходного кода

Minor improvements to error output.

Kestrel 1 неделя назад
Родитель
Сommit
3b70992b62
2 измененных файлов с 16 добавлено и 3 удалено
  1. 5 0
      src/check.rs
  2. 11 3
      src/cmd.rs

+ 5 - 0
src/check.rs

@@ -142,6 +142,10 @@ fn check_balance_group<'a>(
     }
 
     let first = group[0].borrow();
+
+    let unit = first.change_for(account).unwrap().unit.0;
+    let last_bal = running.get(&unit);
+
     let report = ariadne::Report::build(
         ariadne::ReportKind::Error,
         first
@@ -158,6 +162,7 @@ fn check_balance_group<'a>(
             .union(txn.change_for(account).unwrap().source.unwrap());
         ariadne::Label::new(span).with_message("transaction in group")
     }))
+    .with_labels(last_bal.iter().map(|bal| ariadne::Label::new(bal.span()).with_message(format!("last calculated balance was {bal}"))))
     .finish();
 
     Err(DataError::Report(Box::new(report)))

+ 11 - 3
src/cmd.rs

@@ -44,6 +44,8 @@ pub enum Command {
     Summarize,
     Ledger {
         account: String,
+        #[clap(long, short)]
+        raw: bool
     },
     Reformat {
         #[clap(long)]
@@ -116,14 +118,20 @@ impl Command {
                 let data = load_data(&mut fsdata, inv, Default::default())?;
                 summarize(&data);
             }
-            Self::Ledger { account } => {
+            Self::Ledger { account, raw } => {
                 let data = load_data(&mut fsdata, inv, check::CheckLevel::WellFormed)?;
 
                 let aname = data::AccountName::new(account.as_str());
 
-                let tt = show::TransactionTable::default();
                 if let Some(ld) = data.ledger_data_for(aname) {
-                    tt.show_refs(Some(&data), aname, ld.iter());
+                    if *raw {
+                        for txn in ld {
+                            show::show_transaction(Some(&data), &txn.borrow());
+                        }
+                    } else {
+                        let tt = show::TransactionTable::default();
+                        tt.show_refs(Some(&data), aname, ld.iter());
+                    }
                 } else {
                     log::error!("account not found!");
                 }