{{- if .Tools }}
{{- end }}
{{ if .Tools }}
{{ end }}
import (
"text/template"
"text/template/parse"
)
t, err := template.New("dummy").Parse(string(templateText))
for _, tt := range t.Templates() {
for _, n := range tt.Root.Nodes {
switch n := n.(type) {
case *parse.IfNode:
fmt.Println(n.String())
}
}
}
这对于两个 if 条件打印相同
{{if .Tools}}
{{end}}
是否可以找出第一个
if
及其 end
有连字符/破折号?
修剪发生在词法分析期间,解析器甚至看不到它。根据文档:
修剪空间。 如果操作以“{{-”而不是“{{”开始,则所有空格/制表符/换行符 动作之前被修剪;相反,如果它以“-}}”结尾 前导空格被修剪。这完全是在词法分析器中完成的;这 解析器永远不会看到它发生。
所以答案是否定的,你无法通过查看解析树来检测输入是否是修剪。
您可以查看
Node.Pos
,查看输入文本中的原始位置并尝试自己解析它。