Name formatOps' held entry firstReach, and checkNameHeld's path spelling path

This commit is contained in:
2026-09-29 11:22:29 +02:00
committed by Lillem4n
parent bb70688f1d
commit bad15a5bdb
2 changed files with 9 additions and 9 deletions
+6 -6
View File
@@ -382,26 +382,26 @@ type op struct {
type formatOps struct {
ops []op
grow int
held map[string]heldName
held map[string]firstReach
heldLocal bool // some held name is not a reference path, so expand makes a hold
}
// heldName is how a format first reaches a held name: the reader holding it, for
// firstReach is how a format first reaches a held name: the reader holding it, for
// error messages, and the first path starting from it, "" where none does.
type heldName struct {
type firstReach struct {
holder string
path string
}
func (c *formatOps) holdName(a arm, label string) {
if c.held == nil {
c.held = map[string]heldName{}
c.held = map[string]firstReach{}
}
if !isRef(a.head) || len(a.tail) == 0 {
c.heldLocal = true
}
h, named := c.held[a.head]
if !named {
h, seen := c.held[a.head]
if !seen {
h.holder = label
}
if len(a.tail) > 0 && h.path == "" {
+3 -3
View File
@@ -71,14 +71,14 @@ func checkNameHeld(t *template, name string, readers []reader) error {
if len(held) == 0 {
return nil // a fixed head holds nothing to reach
}
reader := t.compiled.held[name].path
path := t.compiled.held[name].path
seen := map[node]bool{}
for _, e := range renderEdges(t) {
if e.read.head == name || !renders(e.to, held, seen) {
continue
}
if reader != "" {
return fmt.Errorf("%s renders %q, which {%s} reads a path into; name the fields you want instead", e.reached(), name, reader)
if path != "" {
return fmt.Errorf("%s renders %q, which {%s} reads a path into; name the fields you want instead", e.reached(), name, path)
}
return fmt.Errorf("%s renders %q, which a {%s()} also reads; reach it one way so it is drawn once", e.reached(), name, operandReader(t, name))
}