chore: clippy clean across the workspace, all targets
Zero warnings from `cargo clippy --workspace --all-targets`, which is now a hard rule rather than "clean except pre-existing": - ChartOfAccounts::add takes the Account it registers instead of eight loose parameters (too_many_arguments); Ledger::add_account builds it. Same validation, same errors. - close_period tool: collapse the nested if-let into a let chain. - iif.rs docs: the IIF layout example shows tabs as `\t` instead of literal tab characters (tabs_in_doc_comments). - Tests: drop an unused binding; assert! instead of assert_eq! against a literal bool. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MtYEaR6M6Ybdhm6X98BWNu
This commit is contained in:
1 parent
03212265ce
commit
42e600bbf2
7 files changed
+37
-56
No files matched your search
@@ -84,40 +84,20 @@ pub struct ChartOfAccounts {
|
||||
impl ChartOfAccounts {
|
||||
/// Register an account. Codes must be unique and non-empty; a parent, if
|
||||
/// given, must already exist.
|
||||
pub fn add(
|
||||
&mut self,
|
||||
id: AccountId,
|
||||
code: &str,
|
||||
name: &str,
|
||||
account_type: AccountType,
|
||||
parent: Option<AccountId>,
|
||||
placeholder: bool,
|
||||
currency: Currency,
|
||||
) -> Result<(), LedgerError> {
|
||||
if code.is_empty() {
|
||||
pub fn add(&mut self, account: Account) -> Result<(), LedgerError> {
|
||||
if account.code.is_empty() {
|
||||
return Err(LedgerError::EmptyAccountCode);
|
||||
}
|
||||
if self.by_code.contains_key(code) {
|
||||
return Err(LedgerError::DuplicateAccountCode(code.to_string()));
|
||||
if self.by_code.contains_key(&account.code) {
|
||||
return Err(LedgerError::DuplicateAccountCode(account.code));
|
||||
}
|
||||
if let Some(p) = parent
|
||||
if let Some(p) = account.parent
|
||||
&& !self.accounts.contains_key(&p)
|
||||
{
|
||||
return Err(LedgerError::UnknownParentAccount(p));
|
||||
}
|
||||
self.by_code.insert(code.to_string(), id);
|
||||
self.accounts.insert(
|
||||
id,
|
||||
Account {
|
||||
id,
|
||||
code: code.to_string(),
|
||||
name: name.to_string(),
|
||||
account_type,
|
||||
parent,
|
||||
placeholder,
|
||||
currency,
|
||||
},
|
||||
);
|
||||
self.by_code.insert(account.code.clone(), account.id);
|
||||
self.accounts.insert(account.id, account);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
//! audit trail and what will make the future oracle harness trustworthy.
|
||||
|
||||
use crate::{
|
||||
AccountId, AccountType, AgingRow, Asset, AssetId, AssetStatus, Bill, BillId, ChartOfAccounts,
|
||||
Class, ClassId, Currency, Customer, CustomerId, DocumentLine, DocumentStatus, EntryId,
|
||||
EntryStatus, Invoice, InvoiceId, JournalEntry, JournalLine, LedgerError, Money, NewAsset,
|
||||
Period, PeriodId, PeriodStatus, Side, Vendor, VendorId, arap, assets,
|
||||
Account, AccountId, AccountType, AgingRow, Asset, AssetId, AssetStatus, Bill, BillId,
|
||||
ChartOfAccounts, Class, ClassId, Currency, Customer, CustomerId, DocumentLine, DocumentStatus,
|
||||
EntryId, EntryStatus, Invoice, InvoiceId, JournalEntry, JournalLine, LedgerError, Money,
|
||||
NewAsset, Period, PeriodId, PeriodStatus, Side, Vendor, VendorId, arap, assets,
|
||||
payroll::{
|
||||
PayrollAccounts, PayrollLine, PayrollRun, PayrollRunId, payroll_entry_plan,
|
||||
payroll_remit_plan, validate_payroll_lines,
|
||||
@@ -220,15 +220,15 @@ impl Ledger {
|
||||
) -> Result<AccountId, LedgerError> {
|
||||
let id = self.next_account_id;
|
||||
self.next_account_id += 1;
|
||||
self.chart.add(
|
||||
self.chart.add(Account {
|
||||
id,
|
||||
code,
|
||||
name,
|
||||
code: code.to_string(),
|
||||
name: name.to_string(),
|
||||
account_type,
|
||||
parent,
|
||||
placeholder,
|
||||
self.base_currency,
|
||||
)?;
|
||||
currency: self.base_currency,
|
||||
})?;
|
||||
Ok(id)
|
||||
}
|
||||
|
||||
|
||||
@@ -550,7 +550,7 @@ fn cash_flow_with_registered_asset_and_disposal() {
|
||||
false,
|
||||
)
|
||||
.unwrap();
|
||||
let revenue = ledger
|
||||
ledger
|
||||
.add_account("4000", "Service Revenue", AccountType::Revenue, None, false)
|
||||
.unwrap();
|
||||
let gain = ledger
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
//! Generate Intuit Interchange Format (IIF) journal entries for QuickBooks
|
||||
//! Desktop, which many CPAs still run.
|
||||
//!
|
||||
//! Layout per entry:
|
||||
//! Layout per entry (fields are tab-separated; `\t` marks each tab):
|
||||
//!
|
||||
//! ```text
|
||||
//! !TRNS TRNSTYPE DATE ACCNT NAME AMOUNT DOCNUM MEMO
|
||||
//! !SPL TRNSTYPE DATE ACCNT AMOUNT DOCNUM MEMO
|
||||
//! !TRNS\tTRNSTYPE\tDATE\tACCNT\tNAME\tAMOUNT\tDOCNUM\tMEMO
|
||||
//! !SPL\tTRNSTYPE\tDATE\tACCNT\tAMOUNT\tDOCNUM\tMEMO
|
||||
//! !ENDTRNS
|
||||
//! TRNS GENERAL JOURNAL 01/15/2026 Cash 1000.00 1 Memo
|
||||
//! SPL GENERAL JOURNAL 01/15/2026 Revenue -1000.00 1 Memo
|
||||
//! TRNS\tGENERAL JOURNAL\t01/15/2026\tCash\t\t1000.00\t1\tMemo
|
||||
//! SPL\tGENERAL JOURNAL\t01/15/2026\tRevenue\t-1000.00\t1\tMemo
|
||||
//! ENDTRNS
|
||||
//! ```
|
||||
//!
|
||||
|
||||
@@ -1893,17 +1893,17 @@ impl BooksServer {
|
||||
let closing = store.close_period(p.period_id).map_err(|e| e.to_string())?;
|
||||
// Build line descriptions from the posted closing entry.
|
||||
let mut lines = Vec::new();
|
||||
if let Some(eid) = closing {
|
||||
if let Some(entry) = store.ledger().get_entry(eid) {
|
||||
for line in entry.lines() {
|
||||
let code = store
|
||||
.ledger()
|
||||
.chart()
|
||||
.get(line.account)
|
||||
.map(|a| a.code.clone())
|
||||
.unwrap_or_default();
|
||||
lines.push(format!("{:?} {} {}", line.side, code, line.amount.amount));
|
||||
}
|
||||
if let Some(eid) = closing
|
||||
&& let Some(entry) = store.ledger().get_entry(eid)
|
||||
{
|
||||
for line in entry.lines() {
|
||||
let code = store
|
||||
.ledger()
|
||||
.chart()
|
||||
.get(line.account)
|
||||
.map(|a| a.code.clone())
|
||||
.unwrap_or_default();
|
||||
lines.push(format!("{:?} {} {}", line.side, code, line.amount.amount));
|
||||
}
|
||||
}
|
||||
Ok(Json(ClosePeriodOut {
|
||||
|
||||
@@ -688,7 +688,7 @@ fn mcp_resources_over_stdio() {
|
||||
);
|
||||
assert_eq!(init["result"]["serverInfo"]["name"], "wanderbooks");
|
||||
// Resources are advertised.
|
||||
assert_eq!(init["result"]["capabilities"]["resources"].is_null(), false);
|
||||
assert!(!init["result"]["capabilities"]["resources"].is_null());
|
||||
mcp.notify("notifications/initialized");
|
||||
|
||||
mcp.call(
|
||||
|
||||
Reference in new issue
Block a user