From 88cbe4e623eab9adb608566ac636d36eed72e551 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Tue, 15 Sep 2026 22:12:31 +0200 Subject: check refuses placeholders that could never expand --- internal/plan/index.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'internal/plan') diff --git a/internal/plan/index.go b/internal/plan/index.go index abe073f..0409295 100644 --- a/internal/plan/index.go +++ b/internal/plan/index.go @@ -6,8 +6,22 @@ import ( "fmt" "strconv" "strings" + "time" ) +// CheckTemplate reports the first reason s's placeholders could never +// expand - an unknown placeholder, {mtime} or {now} without a format, an +// unknown format code, {0}, {10} and up, an unclosed "{" - or nil. Capture +// counts are not checked here; that needs the rule's name tests. +func CheckTemplate(s string) error { + if _, err := MaxIndex(s); err != nil { + return err + } + facts := Facts{Name: "a.b", Captures: make([]string, 10), ModTime: time.Unix(0, 0), Now: time.Unix(0, 0)} + _, err := Expand(s, facts) + return err +} + // MaxIndex returns the highest {N} used in s, 0 when none. It reports the // same errors Expand does for a malformed placeholder: an unclosed // placeholder, or {0} (capture groups are numbered from 1). It shares -- cgit v1.3