()
| 166 | } |
| 167 | |
| 168 | func (p *parser) parseFunc() error { |
| 169 | s := p.s |
| 170 | t, err := expectTagContents(s) |
| 171 | if err != nil { |
| 172 | return err |
| 173 | } |
| 174 | funcStr := "func " + string(t.Value) |
| 175 | f, err := parseFuncDef(t.Value) |
| 176 | if err != nil { |
| 177 | return fmt.Errorf("error in %q at %s: %s", funcStr, s.Context(), err) |
| 178 | } |
| 179 | p.emitFuncStart(f) |
| 180 | for s.Next() { |
| 181 | t := s.Token() |
| 182 | switch t.ID { |
| 183 | case text: |
| 184 | p.emitText(t.Value) |
| 185 | case tagName: |
| 186 | ok, err := p.tryParseCommonTags(t.Value) |
| 187 | if err != nil { |
| 188 | return fmt.Errorf("error in %q: %s", funcStr, err) |
| 189 | } |
| 190 | if ok { |
| 191 | continue |
| 192 | } |
| 193 | switch string(t.Value) { |
| 194 | case "endfunc": |
| 195 | if err = skipTagContents(s); err != nil { |
| 196 | return err |
| 197 | } |
| 198 | p.emitFuncEnd(f) |
| 199 | return nil |
| 200 | default: |
| 201 | return fmt.Errorf("unexpected tag found in %q: %q at %s", funcStr, t.Value, s.Context()) |
| 202 | } |
| 203 | default: |
| 204 | return fmt.Errorf("unexpected token found when parsing %q: %s at %s", funcStr, t, s.Context()) |
| 205 | } |
| 206 | } |
| 207 | if err := s.LastError(); err != nil { |
| 208 | return fmt.Errorf("cannot parse %q: %s", funcStr, err) |
| 209 | } |
| 210 | return fmt.Errorf("cannot find endfunc tag for %q at %s", funcStr, s.Context()) |
| 211 | } |
| 212 | |
| 213 | func (p *parser) parseFor() error { |
| 214 | s := p.s |
no test coverage detected