code: func FixUpBlockAttrs(body hcl.Body, schema *configschema.Block) hcl.Body {
  	// The schema should never be nil, but in practice it seems to be sometimes
  	// in the presence of poorly-configured test mocks, so we'll be robust
  	// by synthesizing an empty one.
  	if schema == nil {
  		schema = &configschema.Block{}
  	}
  
  	return &fixupBody{
  		original: body,
  		schema:   schema,
  		names:    ambiguousNames(schema),
  	}
  }
docs: // FixUpBlockAttrs takes a raw HCL body and adds some additional normalization
  // functionality to allow attributes that are specified as having list or set
  // type in the schema to be written with HCL block syntax as multiple nested
  // blocks with the attribute name as the block type.
  //
  // This partially restores some of the block/attribute confusion from HCL 1
  // so that existing patterns that depended on that confusion can continue to
  // be used in the short term while we settle on a longer-term strategy.
  //
  // Most of the fixup work is actually done when the returned body is
  // subsequently decoded, so while FixUpBlockAttrs always succeeds, the eventual
  // decode of the body might not, if the content of the body is so ambiguous
  // that there's no safe way to map it to the schema.