all repos

clerk @ cf9c1d930d43e1c0015820114a18abaf71ae60f3

missing tooling for ledger/hledger

clerk/internal/linter/rule_undeclared_account.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
feat: config (#6), 1 month ago
1
package linter
2
3
import "olexsmir.xyz/clerk/internal/analyzer"
4
5
const UndeclaredAccountID RuleID = "undeclared-account"
6
7
// UndeclaredAccount flags postings that reference an account not declared via `account` directive.
8
type UndeclaredAccount struct{}
9
10
func (UndeclaredAccount) ID() RuleID { return UndeclaredAccountID }
11
func (u *UndeclaredAccount) CheckJournal(an *analyzer.Analysis) []Find {
12
	var finds []Find
13
	for name, info := range an.Accounts {
14
		if len(info.Directives) > 0 {
15
			continue
16
		}
17
		if _, aliased := an.AccountAliases[name]; aliased {
18
			continue
19
		}
20
		for _, usage := range info.Usages {
21
			finds = append(finds, Find{
22
				Code:    u.ID(),
23
				Span:    usage.Posting.Account.Span,
24
				Message: "undeclared account: " + name,
25
			})
26
		}
27
	}
28
	return finds
29
}