MCPcopy
hub / github.com/valyala/quicktemplate / parseTemplate

Method parseTemplate

parser/parser.go:51–109  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

49}
50
51func (p *parser) parseTemplate() error {
52 s := p.s
53 fmt.Fprintf(p.w, `// Code generated by qtc from %q. DO NOT EDIT.
54// See https://github.com/valyala/quicktemplate for details.
55
56`,
57 filepath.Base(s.filePath))
58 for s.Next() {
59 t := s.Token()
60 switch t.ID {
61 case text:
62 p.emitComment(t.Value)
63 case tagName:
64 switch string(t.Value) {
65 case "package":
66 if p.packageNameEmitted {
67 return fmt.Errorf("package name must be at the top of the template. Found at %s", s.Context())
68 }
69 if err := p.parsePackageName(); err != nil {
70 return err
71 }
72 case "import":
73 p.emitPackageName()
74 if p.importsUseEmitted {
75 return fmt.Errorf("imports must be at the top of the template. Found at %s", s.Context())
76 }
77 if err := p.parseImport(); err != nil {
78 return err
79 }
80 default:
81 p.emitPackageName()
82 p.emitImportsUse()
83 switch string(t.Value) {
84 case "interface", "iface":
85 if err := p.parseInterface(); err != nil {
86 return err
87 }
88 case "code":
89 if err := p.parseTemplateCode(); err != nil {
90 return err
91 }
92 case "func":
93 if err := p.parseFunc(); err != nil {
94 return err
95 }
96 default:
97 return fmt.Errorf("unexpected tag found outside func: %q at %s", t.Value, s.Context())
98 }
99 }
100 default:
101 return fmt.Errorf("unexpected token found %s outside func at %s", t, s.Context())
102 }
103 }
104 p.emitImportsUse()
105 if err := s.LastError(); err != nil {
106 return fmt.Errorf("cannot parse template: %s", err)
107 }
108 return nil

Callers 1

parseFunction · 0.95

Calls 12

emitCommentMethod · 0.95
parsePackageNameMethod · 0.95
emitPackageNameMethod · 0.95
parseImportMethod · 0.95
emitImportsUseMethod · 0.95
parseInterfaceMethod · 0.95
parseTemplateCodeMethod · 0.95
parseFuncMethod · 0.95
NextMethod · 0.80
TokenMethod · 0.80
ContextMethod · 0.80
LastErrorMethod · 0.80

Tested by

no test coverage detected