all repos

clerk @ 5e60b81

missing tooling for ledger/hledger

clerk/internal/linter/rule_undeclared_commodity.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 UndeclaredCommodityID RuleID = "undeclared-commodity"
6
7
// UndeclaredCommodity flags amounts that reference a commodity not declared via `commodity` directive.
8
type UndeclaredCommodity struct{}
9
10
func (UndeclaredCommodity) ID() RuleID { return UndeclaredCommodityID }
11
func (u *UndeclaredCommodity) CheckJournal(an *analyzer.Analysis) []Find {
12
	var finds []Find
13
	for name, info := range an.Commodities {
14
		if len(info.Directives) > 0 {
15
			continue
16
		}
17
		for _, usage := range info.Usages {
18
			finds = append(finds, Find{
19
				Code:    u.ID(),
20
				Span:    usage.Amount.Span,
21
				Message: "undeclared commodity: " + name,
22
			})
23
		}
24
	}
25
	return finds
26
}