MCPcopy Create free account
hub / github.com/microsoft/typescript-go / parseUnionOrIntersectionType

Method parseUnionOrIntersectionType

internal/parser/parser.go:2644–2664  ·  view source on GitHub ↗
(operator ast.Kind, parseConstituentType func(p *Parser) *ast.TypeNode)

Source from the content-addressed store, hash-verified

2642}
2643
2644func (p *Parser) parseUnionOrIntersectionType(operator ast.Kind, parseConstituentType func(p *Parser) *ast.TypeNode) *ast.TypeNode {
2645 pos := p.nodePos()
2646 isUnionType := operator == ast.KindBarToken
2647 hasLeadingOperator := p.parseOptional(operator)
2648 var typeNode *ast.TypeNode
2649 if hasLeadingOperator {
2650 typeNode = p.parseFunctionOrConstructorTypeToError(isUnionType, parseConstituentType)
2651 } else {
2652 typeNode = parseConstituentType(p)
2653 }
2654 if p.token == operator || hasLeadingOperator {
2655 types := make([]*ast.Node, 1, 8)
2656 types[0] = typeNode
2657 for p.parseOptional(operator) {
2658 types = append(types, p.parseFunctionOrConstructorTypeToError(isUnionType, parseConstituentType))
2659 }
2660 typeNode = p.createUnionOrIntersectionTypeNode(operator, p.newNodeList(core.NewTextRange(pos, p.nodePos()), p.nodeSliceArena.Clone(types)))
2661 p.finishNode(typeNode, pos)
2662 }
2663 return typeNode
2664}
2665
2666func (p *Parser) createUnionOrIntersectionTypeNode(operator ast.Kind, types *ast.NodeList) *ast.Node {
2667 switch operator {

Callers 2

Calls 10

nodePosMethod · 0.95
parseOptionalMethod · 0.95
newNodeListMethod · 0.95
finishNodeMethod · 0.95
NewTextRangeFunction · 0.92
CloneMethod · 0.65
makeFunction · 0.50
appendFunction · 0.50

Tested by

no test coverage detected