summaryrefslogtreecommitdiffstats
path: root/tpl
diff options
context:
space:
mode:
authorAnthony Fok <foka@debian.org>2018-06-13 07:33:59 -0600
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-06-14 08:58:42 +0200
commit9f27091e1067875e2577c331acc60adaef5bb234 (patch)
treeda70dbe6437cd17b2e154c3b7fcc95e4617a5248 /tpl
parent187621ae2427094a48b7ca8c6674cf49fd1b9fd5 (diff)
tpl: Support text/template/parse API change in go1.11
Thanks to @rjoleary for the investigation. Fixes #4784
Diffstat (limited to 'tpl')
-rw-r--r--tpl/tplimpl/template_ast_transformers.go48
-rw-r--r--tpl/tplimpl/template_ast_transformers_go1_10.go68
-rw-r--r--tpl/tplimpl/template_ast_transformers_go1_11.go68
3 files changed, 136 insertions, 48 deletions
diff --git a/tpl/tplimpl/template_ast_transformers.go b/tpl/tplimpl/template_ast_transformers.go
index bbd0f28a4..f0899dcbc 100644
--- a/tpl/tplimpl/template_ast_transformers.go
+++ b/tpl/tplimpl/template_ast_transformers.go
@@ -91,54 +91,6 @@ func applyTemplateTransformers(templ *parse.Tree, lookupFn func(name string) *pa
return nil
}
-// paramsKeysToLower is made purposely non-generic to make it not so tempting
-// to do more of these hard-to-maintain AST transformations.
-func (c *templateContext) paramsKeysToLower(n parse.Node) {
- switch x := n.(type) {
- case *parse.ListNode:
- if x != nil {
- c.paramsKeysToLowerForNodes(x.Nodes...)
- }
- case *parse.ActionNode:
- c.paramsKeysToLowerForNodes(x.Pipe)
- case *parse.IfNode:
- c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList)
- case *parse.WithNode:
- c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList)
- case *parse.RangeNode:
- c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList)
- case *parse.TemplateNode:
- subTempl := c.getIfNotVisited(x.Name)
- if subTempl != nil {
- c.paramsKeysToLowerForNodes(subTempl.Root)
- }
- case *parse.PipeNode:
- for i, elem := range x.Decl {
- if len(x.Cmds) > i {
- // maps $site => .Site etc.
- c.decl[elem.Ident[0]] = x.Cmds[i].String()
- }
- }
-
- for _, cmd := range x.Cmds {
- c.paramsKeysToLower(cmd)
- }
-
- case *parse.CommandNode:
- for _, elem := range x.Args {
- switch an := elem.(type) {
- case *parse.FieldNode:
- c.updateIdentsIfNeeded(an.Ident)
- case *parse.VariableNode:
- c.updateIdentsIfNeeded(an.Ident)
- case *parse.PipeNode:
- c.paramsKeysToLower(an)
- }
-
- }
- }
-}
-
func (c *templateContext) paramsKeysToLowerForNodes(nodes ...parse.Node) {
for _, node := range nodes {
c.paramsKeysToLower(node)
diff --git a/tpl/tplimpl/template_ast_transformers_go1_10.go b/tpl/tplimpl/template_ast_transformers_go1_10.go
new file mode 100644
index 000000000..4e2a34c9e
--- /dev/null
+++ b/tpl/tplimpl/template_ast_transformers_go1_10.go
@@ -0,0 +1,68 @@
+// Copyright 2016 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// +build !go1.11
+
+package tplimpl
+
+import (
+ "text/template/parse"
+)
+
+// paramsKeysToLower is made purposely non-generic to make it not so tempting
+// to do more of these hard-to-maintain AST transformations.
+func (c *templateContext) paramsKeysToLower(n parse.Node) {
+ switch x := n.(type) {
+ case *parse.ListNode:
+ if x != nil {
+ c.paramsKeysToLowerForNodes(x.Nodes...)
+ }
+ case *parse.ActionNode:
+ c.paramsKeysToLowerForNodes(x.Pipe)
+ case *parse.IfNode:
+ c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList)
+ case *parse.WithNode:
+ c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList)
+ case *parse.RangeNode:
+ c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList)
+ case *parse.TemplateNode:
+ subTempl := c.getIfNotVisited(x.Name)
+ if subTempl != nil {
+ c.paramsKeysToLowerForNodes(subTempl.Root)
+ }
+ case *parse.PipeNode:
+ for i, elem := range x.Decl {
+ if len(x.Cmds) > i {
+ // maps $site => .Site etc.
+ c.decl[elem.Ident[0]] = x.Cmds[i].String()
+ }
+ }
+
+ for _, cmd := range x.Cmds {
+ c.paramsKeysToLower(cmd)
+ }
+
+ case *parse.CommandNode:
+ for _, elem := range x.Args {
+ switch an := elem.(type) {
+ case *parse.FieldNode:
+ c.updateIdentsIfNeeded(an.Ident)
+ case *parse.VariableNode:
+ c.updateIdentsIfNeeded(an.Ident)
+ case *parse.PipeNode:
+ c.paramsKeysToLower(an)
+ }
+
+ }
+ }
+}
diff --git a/tpl/tplimpl/template_ast_transformers_go1_11.go b/tpl/tplimpl/template_ast_transformers_go1_11.go
new file mode 100644
index 000000000..d7fdada0d
--- /dev/null
+++ b/tpl/tplimpl/template_ast_transformers_go1_11.go
@@ -0,0 +1,68 @@
+// Copyright 2016 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// +build go1.11
+
+package tplimpl
+
+import (
+ "text/template/parse"
+)
+
+// paramsKeysToLower is made purposely non-generic to make it not so tempting
+// to do more of these hard-to-maintain AST transformations.
+func (c *templateContext) paramsKeysToLower(n parse.Node) {
+ switch x := n.(type) {
+ case *parse.ListNode:
+ if x != nil {
+ c.paramsKeysToLowerForNodes(x.Nodes...)
+ }
+ case *parse.ActionNode:
+ c.paramsKeysToLowerForNodes(x.Pipe)
+ case *parse.IfNode:
+ c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList)
+ case *parse.WithNode:
+ c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList)
+ case *parse.RangeNode:
+ c.paramsKeysToLowerForNodes(x.Pipe, x.List, x.ElseList)
+ case *parse.TemplateNode:
+ subTempl := c.getIfNotVisited(x.Name)
+ if subTempl != nil {
+ c.paramsKeysToLowerForNodes(subTempl.Root)
+ }
+ case *parse.PipeNode:
+ for i, elem := range x.Vars {
+ if len(x.Cmds) > i {
+ // maps $site => .Site etc.
+ c.decl[elem.Ident[0]] = x.Cmds[i].String()
+ }
+ }
+
+ for _, cmd := range x.Cmds {
+ c.paramsKeysToLower(cmd)
+ }
+
+ case *parse.CommandNode:
+ for _, elem := range x.Args {
+ switch an := elem.(type) {
+ case *parse.FieldNode:
+ c.updateIdentsIfNeeded(an.Ident)
+ case *parse.AssignNode:
+ c.updateIdentsIfNeeded(an.Ident)
+ case *parse.PipeNode:
+ c.paramsKeysToLower(an)
+ }
+
+ }
+ }
+}