6 files changed,
52 insertions(+),
0 deletions(-)
Author:
Oleksandr Smirnov
olexsmir@gmail.com
Committed at:
2026-06-27 12:41:04 +0300
Authored at:
2026-06-26 16:06:43 +0300
Change ID:
qunpkuystwsvknmvzkzttwoxnvkntlox
Parent:
fd46af1
A
internal/linter/rule_undeclared_account.go
··· 1 +package linter 2 + 3 +import "olexsmir.xyz/clerk/journal/ast" 4 + 5 +// UndeclaredAccount flags postings that reference an account not declared via `account` directive. 6 +type UndeclaredAccount struct{} 7 + 8 +func (UndeclaredAccount) ID() RuleID { return "undeclared-account" } 9 +func (UndeclaredAccount) Severity() Severity { return SeverityWarning } 10 +func (r *UndeclaredAccount) CheckJournal(j *ast.Journal) []Find { 11 + declared := make(map[string]bool) 12 + 13 + var finds []Find 14 + for _, entry := range j.Entries { 15 + switch e := entry.(type) { 16 + case *ast.AccountDirective: 17 + declared[e.Account.String()] = true 18 + case *ast.Transaction: 19 + for _, p := range e.Postings { 20 + name := p.Account.String() 21 + if !declared[name] { 22 + finds = append(finds, Find{ 23 + Code: r.ID(), 24 + Severity: r.Severity(), 25 + Message: "undeclared account: " + name, 26 + Span: p.Account.Span, 27 + }) 28 + } 29 + } 30 + } 31 + } 32 + 33 + return finds 34 +}
A
internal/linter/testdata/undeclared-account.golden
··· 1 +undeclared-account.journal:5:3: undeclared-account: undeclared account: Assets:Cash 2 +undeclared-account.journal:9:3: undeclared-account: undeclared account: Assets:Cash