MCPcopy
hub / github.com/hashicorp/hcl / finishParsingBodyBlock

Method finishParsingBodyBlock

hclsyntax/parser.go:297–476  ·  hclsyntax/parser.go::parser.finishParsingBodyBlock
(ident Token)

Source from the content-addressed store, hash-verified

295}
296
297func (p *parser) finishParsingBodyBlock(ident Token) (Node, hcl.Diagnostics) {
298 var blockType = string(ident.Bytes)
299 var diags hcl.Diagnostics
300 var labels []string
301 var labelRanges []hcl.Range
302
303 var oBrace Token
304
305Token:
306 for {
307 tok := p.Peek()
308
309 switch tok.Type {
310
311 case TokenOBrace:
312 oBrace = p.Read()
313 break Token
314
315 case TokenOQuote:
316 label, labelRange, labelDiags := p.parseQuotedStringLiteral()
317 diags = append(diags, labelDiags...)
318 labels = append(labels, label)
319 labelRanges = append(labelRanges, labelRange)
320 // parseQuoteStringLiteral recovers up to the closing quote
321 // if it encounters problems, so we can continue looking for
322 // more labels and eventually the block body even.
323
324 case TokenIdent:
325 tok = p.Read() // eat token
326 label, labelRange := string(tok.Bytes), tok.Range
327 labels = append(labels, label)
328 labelRanges = append(labelRanges, labelRange)
329
330 default:
331 switch tok.Type {
332 case TokenEqual:
333 diags = append(diags, &hcl.Diagnostic{
334 Severity: hcl.DiagError,
335 Summary: "Invalid block definition",
336 Detail: "The equals sign \"=\" indicates an argument definition, and must not be used when defining a block.",
337 Subject: &tok.Range,
338 Context: hcl.RangeBetween(ident.Range, tok.Range).Ptr(),
339 })
340 case TokenNewline:
341 diags = append(diags, &hcl.Diagnostic{
342 Severity: hcl.DiagError,
343 Summary: "Invalid block definition",
344 Detail: "A block definition must have block content delimited by \"{\" and \"}\", starting on the same line as the block header.",
345 Subject: &tok.Range,
346 Context: hcl.RangeBetween(ident.Range, tok.Range).Ptr(),
347 })
348 default:
349 if !p.recovery {
350 diags = append(diags, &hcl.Diagnostic{
351 Severity: hcl.DiagError,
352 Summary: "Invalid block definition",
353 Detail: "Either a quoted string block label or an opening brace (\"{\") is expected here.",
354 Subject: &tok.Range,

Callers 1

ParseBodyItemMethod · 0.95

Calls 10

recoverAfterBodyItemMethod · 0.95
ParseBodyMethod · 0.95
parseSingleAttrBodyMethod · 0.95
recoverMethod · 0.95
HasErrorsMethod · 0.95
PtrMethod · 0.80
PrevRangeMethod · 0.80
PeekMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected