fix(docs-generator): array-map-fixed = jsonencode([...]) (StringAttribute, не объект); классификация по data_type, а не is_json
This commit is contained in:
@@ -376,7 +376,7 @@ func buildCreateParamsPage(spec types.ServiceSpec, nav string, version string) s
|
|||||||
// Якорь-ссылка для map-fixed/array-map-fixed с вложенными параметрами
|
// Якорь-ссылка для map-fixed/array-map-fixed с вложенными параметрами
|
||||||
if p.HasSubParams && len(p.SubParams) > 0 && desc == "" {
|
if p.HasSubParams && len(p.SubParams) > 0 && desc == "" {
|
||||||
anchor := strings.ToLower(p.Code)
|
anchor := strings.ToLower(p.Code)
|
||||||
if p.IsJson {
|
if isNestedListParam(p) {
|
||||||
desc = fmt.Sprintf("[Развернуть ↓](#%s-array-map-fixed)", anchor)
|
desc = fmt.Sprintf("[Развернуть ↓](#%s-array-map-fixed)", anchor)
|
||||||
} else {
|
} else {
|
||||||
desc = fmt.Sprintf("[Развернуть ↓](#%s-map-fixed)", anchor)
|
desc = fmt.Sprintf("[Развернуть ↓](#%s-map-fixed)", anchor)
|
||||||
@@ -713,7 +713,7 @@ func formatParamOrBlock(p types.ParamSpec, indent string, requiredOnly bool) str
|
|||||||
// а SingleNestedAttribute в HCL — это аргумент (через `=`), НЕ блок.
|
// а SingleNestedAttribute в HCL — это аргумент (через `=`), НЕ блок.
|
||||||
// Блочный синтаксис (`param { ... }`) ломает terraform validate:
|
// Блочный синтаксис (`param { ... }`) ломает terraform validate:
|
||||||
// "Unsupported block type ... Did you mean to define argument?".
|
// "Unsupported block type ... Did you mean to define argument?".
|
||||||
if p.HasSubParams && len(p.SubParams) > 0 && !p.IsJson {
|
if p.HasSubParams && len(p.SubParams) > 0 && !isNestedListParam(p) {
|
||||||
paramCode := ToSnake(p.Code)
|
paramCode := ToSnake(p.Code)
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
b.WriteString(fmt.Sprintf("%s%s = {\n", indent, paramCode))
|
b.WriteString(fmt.Sprintf("%s%s = {\n", indent, paramCode))
|
||||||
@@ -739,7 +739,7 @@ func formatParamOrBlock(p types.ParamSpec, indent string, requiredOnly bool) str
|
|||||||
// array-map-fixed: resource-generator объявляет такие поля как schema.StringAttribute
|
// array-map-fixed: resource-generator объявляет такие поля как schema.StringAttribute
|
||||||
// (JSON-строка), поэтому в доке это тоже аргумент-строка через jsonencode([...]),
|
// (JSON-строка), поэтому в доке это тоже аргумент-строка через jsonencode([...]),
|
||||||
// а НЕ блок и НЕ dynamic-блок.
|
// а НЕ блок и НЕ dynamic-блок.
|
||||||
if p.HasSubParams && len(p.SubParams) > 0 && p.IsJson {
|
if p.HasSubParams && len(p.SubParams) > 0 && isNestedListParam(p) {
|
||||||
paramCode := ToSnake(p.Code)
|
paramCode := ToSnake(p.Code)
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
b.WriteString(fmt.Sprintf("%s%s = jsonencode([\n", indent, paramCode))
|
b.WriteString(fmt.Sprintf("%s%s = jsonencode([\n", indent, paramCode))
|
||||||
@@ -867,6 +867,22 @@ func isJsonType(p types.ParamSpec) bool {
|
|||||||
return strings.Contains(strings.ToLower(firstType(p)), "json")
|
return strings.Contains(strings.ToLower(firstType(p)), "json")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// isNestedListParam — аналог resource-generator helpers.IsNestedList.
|
||||||
|
//
|
||||||
|
// Параметр с подполями и типом-массивом (data_type: array-map-fixed).
|
||||||
|
// resource-generator объявляет такие поля как schema.StringAttribute (JSON-строка),
|
||||||
|
// а НЕ как SingleNestedAttribute, поэтому и в доке это строка:
|
||||||
|
//
|
||||||
|
// storage_config = jsonencode([{ ... }])
|
||||||
|
//
|
||||||
|
// Историческая ошибка: условие проверяло p.IsJson, но array-map-fixed приходит
|
||||||
|
// с data_type=array-map-fixed (is_json не выставлен), поэтому поле попадало
|
||||||
|
// в ветку map-fixed и рендерилось объектом — несовместимо со схемой.
|
||||||
|
func isNestedListParam(p types.ParamSpec) bool {
|
||||||
|
dtype := strings.ToLower(strings.TrimSpace(p.DataType) + " " + strings.TrimSpace(p.Type))
|
||||||
|
return strings.Contains(dtype, "array")
|
||||||
|
}
|
||||||
|
|
||||||
func defaultCell(value interface{}) string {
|
func defaultCell(value interface{}) string {
|
||||||
if !hasDefault(value) {
|
if !hasDefault(value) {
|
||||||
return ""
|
return ""
|
||||||
@@ -1095,7 +1111,7 @@ func renderNestedParams(p types.ParamSpec) string {
|
|||||||
}
|
}
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
label := p.Code
|
label := p.Code
|
||||||
if p.IsJson {
|
if isNestedListParam(p) {
|
||||||
label += " (array-map-fixed) — элемент"
|
label += " (array-map-fixed) — элемент"
|
||||||
} else {
|
} else {
|
||||||
label += " (map-fixed)"
|
label += " (map-fixed)"
|
||||||
|
|||||||
Reference in New Issue
Block a user