all repos

clerk @ 2ca3278ede09b510e058a42bcca8f9e4ffcc7bfa

missing tooling for ledger/hledger

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