all repos

clerk @ a925423

missing tooling for ledger/hledger

clerk/internal/linter/rule_undeclared_payee.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
// UndeclaredPayee flags transactions that reference a payee not declared via `payee` directive.
8
type UndeclaredPayee struct{}
9
10
func (UndeclaredPayee) ID() RuleID         { return "undeclared-payee" }
11
func (UndeclaredPayee) Severity() Severity { return SeverityWarning }
12
func (u *UndeclaredPayee) CheckJournal(an *analyzer.Analysis) []Find {
13
	var finds []Find
14
	for name, info := range an.Payees {
15
		if name == "" {
16
			continue
17
		}
18
		if len(info.Directives) > 0 {
19
			continue
20
		}
21
		for _, usage := range info.Usage {
22
			finds = append(finds, Find{
23
				Code:     u.ID(),
24
				Severity: u.Severity(),
25
				Span:     usage.Payee.Span,
26
				Message:  "undeclared payee: " + name,
27
			})
28
		}
29
	}
30
	return finds
31
}