diff --git a/readsurvey.go b/readsurvey.go index a8e0059..11ae00f 100644 --- a/readsurvey.go +++ b/readsurvey.go @@ -356,5 +356,9 @@ func alternatives(a, b surveyAt) bool { } func overlapError(route surveyRoute, ref string, into pathRead) error { - return fmt.Errorf("%s and %s share one reference draw, one read whole and one by a path; name the fields you want instead, or draw them apart with a drawGroup", route.spelled(ref), into.at.route.spelled(into.a.spelling)) + apart := fmt.Sprintf("move {%s} into a field with a drawGroup", into.a.spelling) + if into.a.spelling != into.at.route.label { + apart = fmt.Sprintf("give %s a drawGroup", into.at.route.spelling) + } + return fmt.Errorf("%s renders its own draw of what %s reads a path through; name the fields you want instead, or %s", route.spelled(ref), into.at.route.spelled(into.a.spelling), apart) } diff --git a/todo.md b/todo.md index 80e5e76..6d460a3 100644 --- a/todo.md +++ b/todo.md @@ -222,6 +222,10 @@ by a `data-import/` script, as README goal 12 asks. - Refuse a struct tag's `datatype` naming the Go type that sets it before proving its values, as the README's Library section promises: `datatype: boolean` over `{int(1,2)}` on an `int` field answers `prints an integer, not a boolean`. +- Name the spelling to use in `checkNameHeld`'s and `checkNoOverlap`'s refusals, as the + README's hold section promises: both answer "name the fields you want instead", and + `{n} reaches "p" by a second route` names neither the read the route ends on, + `{/row.p.last}`, nor the spelling to write, `{p.last}`. - Call `templateError` a compile failure: its doc says render failure, and it wraps what `NewTemplate` and `NewRecordTemplate` refuse. - Name the node a selector follows in `stepInto`'s refusal: `sv_SE.person[1].first`