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

Method finishParsingBodyAttribute

hclsyntax/parser.go:240–295  ·  view source on GitHub ↗
(ident Token, singleLine bool)

Source from the content-addressed store, hash-verified

238}
239
240func (p *parser) finishParsingBodyAttribute(ident Token, singleLine bool) (Node, hcl.Diagnostics) {
241 eqTok := p.Read() // eat equals token
242 if eqTok.Type != TokenEqual {
243 // should never happen if caller behaves
244 panic("finishParsingBodyAttribute called with next not equals")
245 }
246
247 var endRange hcl.Range
248
249 expr, diags := p.ParseExpression()
250 if p.recovery && diags.HasErrors() {
251 // recovery within expressions tends to be tricky, so we've probably
252 // landed somewhere weird. We'll try to reset to the start of a body
253 // item so parsing can continue.
254 endRange = p.PrevRange()
255 p.recoverAfterBodyItem()
256 } else {
257 endRange = p.PrevRange()
258 if !singleLine {
259 end := p.Peek()
260 if end.Type != TokenNewline && end.Type != TokenEOF {
261 if !p.recovery {
262 summary := "Missing newline after argument"
263 detail := "An argument definition must end with a newline."
264
265 if end.Type == TokenComma {
266 summary = "Unexpected comma after argument"
267 detail = "Argument definitions must be separated by newlines, not commas. " + detail
268 }
269
270 diags = append(diags, &hcl.Diagnostic{
271 Severity: hcl.DiagError,
272 Summary: summary,
273 Detail: detail,
274 Subject: &end.Range,
275 Context: hcl.RangeBetween(ident.Range, end.Range).Ptr(),
276 })
277 }
278 endRange = p.PrevRange()
279 p.recoverAfterBodyItem()
280 } else {
281 endRange = p.PrevRange()
282 p.Read() // eat newline
283 }
284 }
285 }
286
287 return &Attribute{
288 Name: string(ident.Bytes),
289 Expr: expr,
290
291 SrcRange: hcl.RangeBetween(ident.Range, endRange),
292 NameRange: ident.Range,
293 EqualsRange: eqTok.Range,
294 }, diags
295}
296
297func (p *parser) finishParsingBodyBlock(ident Token) (Node, hcl.Diagnostics) {

Callers 2

ParseBodyItemMethod · 0.95
parseSingleAttrBodyMethod · 0.95

Calls 7

ParseExpressionMethod · 0.95
recoverAfterBodyItemMethod · 0.95
HasErrorsMethod · 0.80
PrevRangeMethod · 0.80
PtrMethod · 0.80
ReadMethod · 0.45
PeekMethod · 0.45

Tested by

no test coverage detected