in rules/nested_block.go [178:217]
func (b *NestedBlock) buildNestedBlock(nestedBlock *hclsyntax.Block) {
var nestedBlockName, sortField string
switch nestedBlock.Type {
case "dynamic":
nestedBlockName = nestedBlock.Labels[0]
sortField = strings.Join(nestedBlock.Labels, "")
default:
nestedBlockName = nestedBlock.Type
sortField = nestedBlock.Type
}
var parentBlockNames []string
if nestedBlockName == "content" && b.Block.Type == "dynamic" {
parentBlockNames = b.ParentBlockNames
} else {
parentBlockNames = append(b.ParentBlockNames, nestedBlockName)
}
nb := &NestedBlock{
Name: nestedBlockName,
SortField: sortField,
Range: nestedBlock.Range(),
Block: nestedBlock,
ParentBlockNames: parentBlockNames,
File: b.File,
emit: b.emit,
}
nb.buildAttributes(nestedBlock.Body.Attributes)
nb.buildNestedBlocks(nestedBlock.Body.Blocks)
blockSchema := queryBlockSchema(b.ParentBlockNames)
if metaArgOrUnknownBlock(blockSchema) {
b.addOptionalNestedBlock(nb)
return
}
nbSchema, ok := blockSchema.NestedBlocks[nb.Name]
if ok && nbSchema.MinItems > 0 {
b.addRequiredNestedBlock(nb)
} else {
b.addOptionalNestedBlock(nb)
}
}