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

Function parseTraversalStep

hclwrite/parser.go:416–476  ·  hclwrite/parser.go::parseTraversalStep
(nativeStep hcl.Traverser, from inputTokens)

Source from the content-addressed store, hash-verified

414}
415
416func parseTraversalStep(nativeStep hcl.Traverser, from inputTokens) (before inputTokens, n *node, after inputTokens) {
417 var children *nodes
418 switch tNativeStep := nativeStep.(type) {
419
420 case hcl.TraverseRoot, hcl.TraverseAttr:
421 step := newTraverseName()
422 children = step.children
423 before, from, after = from.Partition(nativeStep.SourceRange())
424 inBefore, token, inAfter := from.PartitionTypeSingle(hclsyntax.TokenIdent)
425 name := newIdentifier(token)
426 children.AppendUnstructuredTokens(inBefore.Tokens())
427 step.name = children.Append(name)
428 children.AppendUnstructuredTokens(inAfter.Tokens())
429 return before, newNode(step), after
430
431 case hcl.TraverseIndex:
432 step := newTraverseIndex()
433 children = step.children
434 before, from, after = from.Partition(nativeStep.SourceRange())
435
436 if inBefore, dot, from, ok := from.PartitionTypeOk(hclsyntax.TokenDot); ok {
437 children.AppendUnstructuredTokens(inBefore.Tokens())
438 children.AppendUnstructuredTokens(dot.Tokens())
439
440 valBefore, valToken, valAfter := from.PartitionTypeSingle(hclsyntax.TokenNumberLit)
441 children.AppendUnstructuredTokens(valBefore.Tokens())
442 key := newNumber(valToken)
443 step.key = children.Append(key)
444 children.AppendUnstructuredTokens(valAfter.Tokens())
445
446 return before, newNode(step), after
447 }
448
449 var inBefore, oBrack, keyTokens, cBrack inputTokens
450 inBefore, oBrack, from = from.PartitionType(hclsyntax.TokenOBrack)
451 children.AppendUnstructuredTokens(inBefore.Tokens())
452 children.AppendUnstructuredTokens(oBrack.Tokens())
453 keyTokens, cBrack, from = from.PartitionType(hclsyntax.TokenCBrack)
454
455 keyVal := tNativeStep.Key
456 switch keyVal.Type() {
457 case cty.String:
458 key := newQuoted(keyTokens.Tokens())
459 step.key = children.Append(key)
460 case cty.Number:
461 valBefore, valToken, valAfter := keyTokens.PartitionTypeSingle(hclsyntax.TokenNumberLit)
462 children.AppendUnstructuredTokens(valBefore.Tokens())
463 key := newNumber(valToken)
464 step.key = children.Append(key)
465 children.AppendUnstructuredTokens(valAfter.Tokens())
466 }
467
468 children.AppendUnstructuredTokens(cBrack.Tokens())
469 children.AppendUnstructuredTokens(from.Tokens())
470
471 return before, newNode(step), after
472 default:
473 panic(fmt.Sprintf("unsupported traversal step type %T", nativeStep))

Callers 1

parseTraversalFunction · 0.85

Calls 15

PartitionTypeSingleMethod · 0.95
TokensMethod · 0.95
AppendMethod · 0.95
newTraverseNameFunction · 0.85
newIdentifierFunction · 0.85
newNodeFunction · 0.85
newTraverseIndexFunction · 0.85
newNumberFunction · 0.85
newQuotedFunction · 0.85
PartitionMethod · 0.80
PartitionTypeOkMethod · 0.80

Tested by

no test coverage detected