all repos

clerk @ 83b23d21e192297a33f109de92612e0b164e1c64

missing tooling for ledger/hledger

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
perf: lsp: dedupe and group diagnostics without string keys..., 1 month ago
1
package linter
2
3
import (
4
	"olexsmir.xyz/clerk/internal/analyzer"
5
)
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 "undeclared-commodity" }
11
func (UndeclaredCommodity) Severity() Severity { return SeverityWarning }
12
func (u *UndeclaredCommodity) CheckJournal(an *analyzer.Analysis) []Find {
13
	var finds []Find
14
	for name, info := range an.Commodities {
15
		if len(info.Directives) > 0 {
16
			continue
17
		}
18
		for _, usage := range info.Usages {
19
			finds = append(finds, Find{
20
				Code:     u.ID(),
21
				Severity: u.Severity(),
22
				Span:     usage.Amount.Span,
23
				Message:  "undeclared commodity: " + name,
24
			})
25
		}
26
	}
27
	return finds
28
}