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

Method parseJSONText

internal/parser/parser.go:159–227  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

157}
158
159func (p *Parser) parseJSONText() *ast.SourceFile {
160 pos := p.nodePos()
161 var statements *ast.NodeList
162 var eof *ast.TokenNode
163
164 if p.token == ast.KindEndOfFile {
165 statements = p.newNodeList(core.NewTextRange(pos, p.nodePos()), nil)
166 eof = p.parseTokenNode()
167 } else {
168 var expressions any // []*ast.Expression | *ast.Expression
169
170 for p.token != ast.KindEndOfFile {
171 var expression *ast.Expression
172 switch p.token {
173 case ast.KindOpenBracketToken:
174 expression = p.parseArrayLiteralExpression()
175 case ast.KindTrueKeyword, ast.KindFalseKeyword, ast.KindNullKeyword:
176 expression = p.parseTokenNode()
177 case ast.KindMinusToken:
178 if p.lookAhead(func(p *Parser) bool {
179 return p.nextToken() == ast.KindNumericLiteral && p.nextToken() != ast.KindColonToken
180 }) {
181 expression = p.parsePrefixUnaryExpression()
182 } else {
183 expression = p.parseObjectLiteralExpression()
184 }
185 case ast.KindNumericLiteral, ast.KindStringLiteral:
186 if p.lookAhead(func(p *Parser) bool { return p.nextToken() != ast.KindColonToken }) {
187 expression = p.parseLiteralExpression(false /*intern*/)
188 break
189 }
190 fallthrough
191 default:
192 expression = p.parseObjectLiteralExpression()
193 }
194
195 // Error recovery: collect multiple top-level expressions
196 if expressions != nil {
197 if es, ok := expressions.([]*ast.Expression); ok {
198 expressions = append(es, expression)
199 } else {
200 expressions = []*ast.Expression{expressions.(*ast.Expression), expression}
201 }
202 } else {
203 expressions = expression
204 if p.token != ast.KindEndOfFile {
205 p.parseErrorAtCurrentToken(diagnostics.Unexpected_token)
206 }
207 }
208 }
209
210 var expression *ast.Expression
211 if es, ok := expressions.([]*ast.Expression); ok {
212 expression = p.finishNode(p.factory.NewArrayLiteralExpression(p.newNodeList(core.NewTextRange(pos, p.nodePos()), es), false), pos)
213 } else {
214 expression = expressions.(*ast.Expression)
215 }
216 statement := p.finishNode(p.factory.NewExpressionStatement(expression), pos)

Callers 1

ParseSourceFileFunction · 0.80

Calls 15

nodePosMethod · 0.95
newNodeListMethod · 0.95
parseTokenNodeMethod · 0.95
lookAheadMethod · 0.95
nextTokenMethod · 0.95
finishNodeMethod · 0.95
parseExpectedTokenMethod · 0.95

Tested by

no test coverage detected