MCPcopy
hub / github.com/google/go-jsonnet / parseObjectRemainder

Method parseObjectRemainder

internal/parser/parser.go:608–675  ·  view source on GitHub ↗

Parse object or object comprehension without leading brace

(tok *token)

Source from the content-addressed store, hash-verified

606
607// Parse object or object comprehension without leading brace
608func (p *parser) parseObjectRemainder(tok *token) (ast.Node, *token, errors.StaticError) {
609 var fields ast.ObjectFields
610 literalFields := make(literalFieldSet)
611 binds := make(ast.IdentifierSet)
612
613 gotComma := false
614 first := true
615
616 next := p.pop()
617
618 for {
619
620 if next.kind == tokenBraceR {
621 return &ast.Object{
622 NodeBase: ast.NewNodeBaseLoc(locFromTokens(tok, next), tok.fodder),
623 Fields: fields,
624 TrailingComma: gotComma,
625 CloseFodder: next.fodder,
626 }, next, nil
627 }
628
629 if next.kind == tokenFor {
630 // It's a comprehension
631 return p.parseObjectRemainderComp(fields, gotComma, tok, next)
632 }
633
634 if !gotComma && !first {
635 return nil, nil, errors.MakeStaticError("Expected a comma before next field", next.loc)
636 }
637
638 var field *ast.ObjectField
639 var err errors.StaticError
640 switch next.kind {
641 case tokenBracketL, tokenIdentifier, tokenStringDouble, tokenStringSingle,
642 tokenStringBlock, tokenVerbatimStringDouble, tokenVerbatimStringSingle:
643 field, err = p.parseObjectRemainderField(&literalFields, tok, next)
644 if err != nil {
645 return nil, nil, err
646 }
647
648 case tokenLocal:
649 field, err = p.parseObjectRemainderLocal(&binds, tok, next)
650 if err != nil {
651 return nil, nil, err
652 }
653
654 case tokenAssert:
655 field, err = p.parseObjectRemainderAssert(tok, next)
656 if err != nil {
657 return nil, nil, err
658 }
659
660 default:
661 return nil, nil, makeUnexpectedError(next, "parsing field definition")
662 }
663 fields = append(fields, *field)
664
665 next = p.pop()

Callers 2

parseTerminalMethod · 0.95
parseMethod · 0.95

Calls 8

popMethod · 0.95
MakeStaticErrorFunction · 0.92
locFromTokensFunction · 0.85
makeUnexpectedErrorFunction · 0.85

Tested by

no test coverage detected