@@ -44,10 +44,14 @@ type TemplateName struct {
44
44
fun * ast.Ident
45
45
call * ast.CallExpr
46
46
47
+ fileSet * token.FileSet
48
+
47
49
pathValueNames []string
48
50
}
49
51
50
- func NewTemplateName (in string ) (TemplateName , error , bool ) {
52
+ func NewTemplateName (in string ) (TemplateName , error , bool ) { return newTemplate (in , "" ) }
53
+
54
+ func newTemplate (in , fileName string ) (TemplateName , error , bool ) {
51
55
if ! templateNameMux .MatchString (in ) {
52
56
return TemplateName {}, nil , false
53
57
}
@@ -59,6 +63,7 @@ func NewTemplateName(in string) (TemplateName, error, bool) {
59
63
path : matches [templateNameMux .SubexpIndex ("path" )],
60
64
handler : strings .TrimSpace (matches [templateNameMux .SubexpIndex ("handler" )]),
61
65
endpoint : matches [templateNameMux .SubexpIndex ("endpoint" )],
66
+ fileSet : token .NewFileSet (),
62
67
}
63
68
64
69
switch p .method {
@@ -76,7 +81,7 @@ func NewTemplateName(in string) (TemplateName, error, bool) {
76
81
return TemplateName {}, err , true
77
82
}
78
83
79
- return p , parseHandler (& p ), true
84
+ return p , parseHandler (p . fileSet , fileName , & p ), true
80
85
}
81
86
82
87
var (
@@ -127,11 +132,11 @@ func (def TemplateName) byPathThenMethod(d TemplateName) int {
127
132
return cmp .Compare (def .handler , d .handler )
128
133
}
129
134
130
- func parseHandler (def * TemplateName ) error {
135
+ func parseHandler (fileSet * token. FileSet , fileName string , def * TemplateName ) error {
131
136
if def .handler == "" {
132
137
return nil
133
138
}
134
- e , err := parser .ParseExpr ( def .handler )
139
+ e , err := parser .ParseExprFrom ( fileSet , fileName , [] byte ( def .handler ), 0 )
135
140
if err != nil {
136
141
return fmt .Errorf ("failed to parse handler expression: %v" , err )
137
142
}
0 commit comments