MCPcopy Index your code
hub / github.com/microsoft/typescript-go / parsePostfixTypeOrHigher

Method parsePostfixTypeOrHigher

internal/parser/parser.go:2719–2749  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

2717}
2718
2719func (p *Parser) parsePostfixTypeOrHigher() *ast.Node {
2720 pos := p.nodePos()
2721 typeNode := p.parseNonArrayType()
2722 for !p.hasPrecedingLineBreak() {
2723 switch p.token {
2724 case ast.KindExclamationToken:
2725 p.nextToken()
2726 typeNode = p.finishNode(p.factory.NewJSDocNonNullableType(typeNode), pos)
2727 case ast.KindQuestionToken:
2728 // If next token is start of a type we have a conditional type
2729 if p.lookAhead((*Parser).nextIsStartOfType) {
2730 return typeNode
2731 }
2732 p.nextToken()
2733 typeNode = p.finishNode(p.factory.NewJSDocNullableType(typeNode), pos)
2734 case ast.KindOpenBracketToken:
2735 p.parseExpected(ast.KindOpenBracketToken)
2736 if p.isStartOfType(false /*isStartOfParameter*/) {
2737 indexType := p.parseType()
2738 p.parseExpected(ast.KindCloseBracketToken)
2739 typeNode = p.finishNode(p.factory.NewIndexedAccessTypeNode(typeNode, indexType), pos)
2740 } else {
2741 p.parseExpected(ast.KindCloseBracketToken)
2742 typeNode = p.finishNode(p.factory.NewArrayTypeNode(typeNode), pos)
2743 }
2744 default:
2745 return typeNode
2746 }
2747 }
2748 return typeNode
2749}
2750
2751func (p *Parser) nextIsStartOfType() bool {
2752 p.nextToken()

Callers

nothing calls this directly

Calls 13

nodePosMethod · 0.95
parseNonArrayTypeMethod · 0.95
hasPrecedingLineBreakMethod · 0.95
nextTokenMethod · 0.95
finishNodeMethod · 0.95
lookAheadMethod · 0.95
parseExpectedMethod · 0.95
isStartOfTypeMethod · 0.95
parseTypeMethod · 0.95
NewJSDocNullableTypeMethod · 0.80

Tested by

no test coverage detected