]> Cypherpunks repositories - gostls13.git/commitdiff
template: better error message for empty templates
authorRob Pike <r@golang.org>
Tue, 20 Dec 2011 20:58:23 +0000 (12:58 -0800)
committerRob Pike <r@golang.org>
Tue, 20 Dec 2011 20:58:23 +0000 (12:58 -0800)
New("x").ParseFiles("y") can result in an empty "x" template.
Make the message clearer that this is the problem. The error
returns from both template packages in this case were
confusing.

I considered making the method use "x" instead of "y" in
this case, but that just made other situations confusing
and harder to explain.

Fixes #2594.

R=golang-dev, rsc, r
CC=golang-dev
https://golang.org/cl/5498048

src/pkg/html/template/escape.go
src/pkg/html/template/escape_test.go
src/pkg/text/template/exec.go

index 2f6be3b6c21feee57319a5d3a7436635fdc4c7b6..c6f723ae4a47baff517340b075fca9286d090005 100644 (file)
@@ -486,9 +486,17 @@ func (e *escaper) escapeTree(c context, name string, line int) (context, string)
        }
        t := e.template(name)
        if t == nil {
+               // Two cases: The template exists but is empty, or has never been mentioned at
+               // all. Distinguish the cases in the error messages.
+               if e.tmpl.set[name] != nil {
+                       return context{
+                               state: stateError,
+                               err:   errorf(ErrNoSuchTemplate, line, "%q is an incomplete or empty template", name),
+                       }, dname
+               }
                return context{
                        state: stateError,
-                       err:   errorf(ErrNoSuchTemplate, line, "no such template %s", name),
+                       err:   errorf(ErrNoSuchTemplate, line, "no such template %q", name),
                }, dname
        }
        if dname != name {
index 7702300ffda4d09f9b335ce9d7d341f907986ba6..a57f9826b5b5a4e75a5214cc1bf039ed04228082 100644 (file)
@@ -928,7 +928,7 @@ func TestErrors(t *testing.T) {
                },
                {
                        `{{template "foo"}}`,
-                       "z:1: no such template foo",
+                       "z:1: no such template \"foo\"",
                },
                {
                        `<div{{template "y"}}>` +
index ba20fff89dfbdf4dbe39381c7697dba924f662bb..acb88afee3684afa1e1bfb4222277ac7664d2285 100644 (file)
@@ -107,7 +107,7 @@ func (t *Template) Execute(wr io.Writer, data interface{}) (err error) {
                vars: []variable{{"$", value}},
        }
        if t.Tree == nil || t.Root == nil {
-               state.errorf("must be parsed before execution")
+               state.errorf("%q is an incomplete or empty template", t.name)
        }
        state.walk(value, t.Root)
        return