fix(docs-generator): вложенные map-fixed как аргумент '= {' (а не блок), array-map-fixed через jsonencode

This commit is contained in:
Repinoid
2026-09-21 20:19:42 +03:00
parent 54b0baa718
commit af2e10b1d5
@@ -708,11 +708,15 @@ func formatParamOrBlock(p types.ParamSpec, indent string, requiredOnly bool) str
if requiredOnly && !p.Required {
return ""
}
// Для map-fixed генерируем вложенный HCL-блок
// Для map-fixed генерируем HCL-АРГУМЕНТ объекта: `param = { ... }`.
// ВАЖНО: resource-generator объявляет такие поля как schema.SingleNestedAttribute,
// а SingleNestedAttribute в HCL — это аргумент (через `=`), НЕ блок.
// Блочный синтаксис (`param { ... }`) ломает terraform validate:
// "Unsupported block type ... Did you mean to define argument?".
if p.HasSubParams && len(p.SubParams) > 0 && !p.IsJson {
paramCode := ToSnake(p.Code)
var b strings.Builder
b.WriteString(fmt.Sprintf("%s%s {\n", indent, paramCode))
b.WriteString(fmt.Sprintf("%s%s = {\n", indent, paramCode))
for _, sp := range p.SubParams {
spVal := sampleValue(sp)
if isJsonType(sp) {
@@ -732,12 +736,14 @@ func formatParamOrBlock(p types.ParamSpec, indent string, requiredOnly bool) str
b.WriteString(fmt.Sprintf("%s}\n", indent))
return b.String()
}
// Для array-map-fixed генерируем dynamic блок
// array-map-fixed: resource-generator объявляет такие поля как schema.StringAttribute
// (JSON-строка), поэтому в доке это тоже аргумент-строка через jsonencode([...]),
// а НЕ блок и НЕ dynamic-блок.
if p.HasSubParams && len(p.SubParams) > 0 && p.IsJson {
paramCode := ToSnake(p.Code)
var b strings.Builder
b.WriteString(fmt.Sprintf("%s%s {\n", indent, paramCode))
b.WriteString(fmt.Sprintf("%s # Каждый элемент массива — объект с полями:\n", indent))
b.WriteString(fmt.Sprintf("%s%s = jsonencode([\n", indent, paramCode))
b.WriteString(fmt.Sprintf("%s {\n", indent))
for _, sp := range p.SubParams {
spVal := sampleValue(sp)
if isJsonType(sp) {
@@ -749,12 +755,13 @@ func formatParamOrBlock(p types.ParamSpec, indent string, requiredOnly bool) str
spComment = strings.TrimSpace(stripHTML(sp.Man))
}
if spComment != "" {
b.WriteString(fmt.Sprintf("%s %s = %s # %s\n", indent, spCode, spVal, spComment))
b.WriteString(fmt.Sprintf("%s %s = %s # %s\n", indent, spCode, spVal, spComment))
} else {
b.WriteString(fmt.Sprintf("%s %s = %s\n", indent, spCode, spVal))
b.WriteString(fmt.Sprintf("%s %s = %s\n", indent, spCode, spVal))
}
}
b.WriteString(fmt.Sprintf("%s}\n", indent))
b.WriteString(fmt.Sprintf("%s },\n", indent))
b.WriteString(fmt.Sprintf("%s])\n", indent))
return b.String()
}
return formatParamLine(p, indent, requiredOnly)