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

Method parseSwitch

parser/parser.go:350–414  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

348}
349
350func (p *parser) parseSwitch() error {
351 s := p.s
352 t, err := expectTagContents(s)
353 if err != nil {
354 return err
355 }
356 switchStr := "switch " + string(t.Value)
357 if err = validateSwitchStmt(t.Value); err != nil {
358 return fmt.Errorf("invalid statement %q at %s: %s", switchStr, s.Context(), err)
359 }
360 p.Printf("switch %s {", t.Value)
361 switchValue := string(t.Value)
362 caseNum := 0
363 defaultFound := false
364 p.switchDepth++
365 for s.Next() {
366 t := s.Token()
367 switch t.ID {
368 case text:
369 if caseNum == 0 {
370 comment := stripLeadingSpace(t.Value)
371 if len(comment) > 0 {
372 p.emitComment(comment)
373 }
374 } else {
375 p.emitText(t.Value)
376 }
377 case tagName:
378 switch string(t.Value) {
379 case "endswitch":
380 if caseNum == 0 {
381 return fmt.Errorf("empty statement %q found at %s", switchStr, s.Context())
382 }
383 if err = skipTagContents(s); err != nil {
384 return err
385 }
386 p.switchDepth--
387 p.Printf("}")
388 return nil
389 case "case":
390 caseNum++
391 if err = p.parseCase(switchValue); err != nil {
392 return err
393 }
394 case "default":
395 if defaultFound {
396 return fmt.Errorf("duplicate default tag found in %q at %s", switchStr, s.Context())
397 }
398 defaultFound = true
399 caseNum++
400 if err = p.parseDefault(); err != nil {
401 return err
402 }
403 default:
404 return fmt.Errorf("unexpected tag found in %q: %q at %s", switchStr, t.Value, s.Context())
405 }
406 default:
407 return fmt.Errorf("unexpected token found when parsing %q: %s at %s", switchStr, t, s.Context())

Callers 1

tryParseCommonTagsMethod · 0.95

Calls 13

PrintfMethod · 0.95
emitCommentMethod · 0.95
emitTextMethod · 0.95
parseCaseMethod · 0.95
parseDefaultMethod · 0.95
expectTagContentsFunction · 0.85
validateSwitchStmtFunction · 0.85
stripLeadingSpaceFunction · 0.85
skipTagContentsFunction · 0.85
ContextMethod · 0.80
NextMethod · 0.80
TokenMethod · 0.80

Tested by

no test coverage detected