From 8d53a4c499e1430e2b64ea468cfc99be57fbf5fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Mon, 10 Aug 2026 12:43:10 +0400 Subject: [PATCH] fix: restore inline navigation in docs-generator writers.go --- .../internal/writers/writers.go | 63 +++++++++++-------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/TOOLS/docs-generator/internal/writers/writers.go b/TOOLS/docs-generator/internal/writers/writers.go index 2d0ec7c..f1cde9a 100644 --- a/TOOLS/docs-generator/internal/writers/writers.go +++ b/TOOLS/docs-generator/internal/writers/writers.go @@ -22,18 +22,27 @@ var CloudOutputByServiceID = map[int]types.CloudOutputSnapshot{} func ResourceDocs(docsDir string, spec types.ServiceSpec, version string, apiEndpoint string, providerSource string) { base := spec.Name - WriteFile(filepath.Join(docsDir, base+".md"), buildManualPage(spec)) - WriteFile(filepath.Join(docsDir, base+"_example.md"), buildExamplePage(spec, version, apiEndpoint, providerSource)) - WriteFile(filepath.Join(docsDir, base+"_params_create.md"), buildCreateParamsPage(spec)) - WriteFile(filepath.Join(docsDir, base+"_params_modify.md"), buildModifyParamsPage(spec)) - WriteFile(filepath.Join(docsDir, base+"_outputs.md"), buildOutputsPage(spec)) - WriteFile(filepath.Join(docsDir, base+"_ops.md"), buildOpsPage(spec, docsDir)) - WriteFile(filepath.Join(docsDir, base+"_params.md"), buildParamsLandingPage(spec)) + navManual := fmt.Sprintf("**Manual** · [Create params](%s_params_create.md) · [Modify params](%s_params_modify.md) · [Output params](%s_outputs.md) · [Operations](%s_ops.md) · [Example](%s_example.md)", base, base, base, base, base) + navCreate := fmt.Sprintf("[Manual](%s.md) · **Create params** · [Modify params](%s_params_modify.md) · [Output params](%s_outputs.md) · [Operations](%s_ops.md) · [Example](%s_example.md)", base, base, base, base, base) + navModify := fmt.Sprintf("[Manual](%s.md) · [Create params](%s_params_create.md) · **Modify params** · [Output params](%s_outputs.md) · [Operations](%s_ops.md) · [Example](%s_example.md)", base, base, base, base, base) + navOutputs := fmt.Sprintf("[Manual](%s.md) · [Create params](%s_params_create.md) · [Modify params](%s_params_modify.md) · **Output params** · [Operations](%s_ops.md) · [Example](%s_example.md)", base, base, base, base, base) + navOps := fmt.Sprintf("[Manual](%s.md) · [Create params](%s_params_create.md) · [Modify params](%s_params_modify.md) · [Output params](%s_outputs.md) · **Operations** · [Example](%s_example.md)", base, base, base, base, base) + navExample := fmt.Sprintf("[Manual](%s.md) · [Create params](%s_params_create.md) · [Modify params](%s_params_modify.md) · [Output params](%s_outputs.md) · [Operations](%s_ops.md) · **Example**", base, base, base, base, base) + + WriteFile(filepath.Join(docsDir, base+".md"), buildManualPage(spec, navManual)) + WriteFile(filepath.Join(docsDir, base+"_example.md"), buildExamplePage(spec, navExample, version, apiEndpoint, providerSource)) + WriteFile(filepath.Join(docsDir, base+"_params_create.md"), buildCreateParamsPage(spec, navCreate)) + WriteFile(filepath.Join(docsDir, base+"_params_modify.md"), buildModifyParamsPage(spec, navModify)) + WriteFile(filepath.Join(docsDir, base+"_outputs.md"), buildOutputsPage(spec, navOutputs)) + WriteFile(filepath.Join(docsDir, base+"_ops.md"), buildOpsPage(spec, navOps, docsDir)) + WriteFile(filepath.Join(docsDir, base+"_params.md"), buildParamsLandingPage(spec, navManual)) for _, srName := range CollectSubresources(spec) { srBase := fmt.Sprintf("%s_%s", base, Slug(srName)) - WriteFile(filepath.Join(docsDir, srBase+".md"), buildSubresourcePage(spec, srName)) - WriteFile(filepath.Join(docsDir, srBase+"_example.md"), buildSubresourceExamplePage(spec, srName, version, apiEndpoint, providerSource)) + srNav := fmt.Sprintf("[%s (основной)](%s.md) | [Operations](%s_ops.md) | [%s](%s.md) | [Example](%s_example.md)", + spec.ServiceDisplayName, base, base, Capitalize(srName), srBase, srBase) + WriteFile(filepath.Join(docsDir, srBase+".md"), buildSubresourcePage(spec, srName, srNav)) + WriteFile(filepath.Join(docsDir, srBase+"_example.md"), buildSubresourceExamplePage(spec, srName, srNav, version, apiEndpoint, providerSource)) } } @@ -114,17 +123,17 @@ func FindSubresourceParams(ops []types.OperationSpec, srName, action string) []t // ===== internal helpers ===== -func buildHeader(spec types.ServiceSpec) string { +func buildHeader(spec types.ServiceSpec, nav string) string { name := spec.ServiceDisplayName if name == "" { name = spec.Name } - return fmt.Sprintf("# Resource nubes_%s · Service ID: %d · Service Name: %s\n\n", spec.Name, spec.ServiceID, name) + return fmt.Sprintf("# Resource nubes_%s · Service ID: %d · Service Name: %s\n\n%s\n\n", spec.Name, spec.ServiceID, name, nav) } -func buildManualPage(spec types.ServiceSpec) string { +func buildManualPage(spec types.ServiceSpec, nav string) string { var b strings.Builder - b.WriteString(buildHeader(spec)) + b.WriteString(buildHeader(spec, nav)) b.WriteString("## MAN\n\n") man := strings.TrimSpace(spec.ServiceMan) if man == "" { @@ -175,9 +184,9 @@ func htmlToMarkdown(s string) string { return strings.TrimSpace(s) } -func buildExamplePage(spec types.ServiceSpec, version string, apiEndpoint string, providerSource string) string { +func buildExamplePage(spec types.ServiceSpec, nav string, version string, apiEndpoint string, providerSource string) string { var b strings.Builder - b.WriteString(buildHeader(spec)) + b.WriteString(buildHeader(spec, nav)) b.WriteString(fmt.Sprintf("## Minimal example — only required parameters\n\n")) b.WriteString("```hcl\n") b.WriteString(minimalExampleBlock(spec, version, apiEndpoint, providerSource)) @@ -272,9 +281,9 @@ func minimalExampleBlock(spec types.ServiceSpec, version string, apiEndpoint str return b.String() } -func buildCreateParamsPage(spec types.ServiceSpec) string { +func buildCreateParamsPage(spec types.ServiceSpec, nav string) string { var b strings.Builder - b.WriteString(buildHeader(spec)) + b.WriteString(buildHeader(spec, nav)) b.WriteString("## Create params\n\n") createParams := FindParams(spec.Operations, "create") requiredParams, defaultParams := SplitParams(createParams) @@ -313,18 +322,18 @@ func buildCreateParamsPage(spec types.ServiceSpec) string { return b.String() } -func buildModifyParamsPage(spec types.ServiceSpec) string { +func buildModifyParamsPage(spec types.ServiceSpec, nav string) string { var b strings.Builder - b.WriteString(buildHeader(spec)) + b.WriteString(buildHeader(spec, nav)) b.WriteString("## Modify params\n\n") modifyParams := FindParams(spec.Operations, "modify") b.WriteString(renderModifyTable(modifyParams)) return b.String() } -func buildOutputsPage(spec types.ServiceSpec) string { +func buildOutputsPage(spec types.ServiceSpec, nav string) string { var b strings.Builder - b.WriteString(buildHeader(spec)) + b.WriteString(buildHeader(spec, nav)) b.WriteString("## Output params\n\n") if len(spec.Outputs.Params) == 0 { b.WriteString("None.\n") @@ -397,9 +406,9 @@ func containsString(values []string, target string) bool { return false } -func buildOpsPage(spec types.ServiceSpec, docsDir string) string { +func buildOpsPage(spec types.ServiceSpec, nav string, docsDir string) string { var b strings.Builder - b.WriteString(buildHeader(spec)) + b.WriteString(buildHeader(spec, nav)) b.WriteString("## Operations\n\n") for _, op := range spec.Operations { name := op.Name @@ -445,16 +454,16 @@ func buildOpsPage(spec types.ServiceSpec, docsDir string) string { return b.String() } -func buildParamsLandingPage(spec types.ServiceSpec) string { +func buildParamsLandingPage(spec types.ServiceSpec, nav string) string { var b strings.Builder - b.WriteString(buildHeader(spec)) + b.WriteString(buildHeader(spec, nav)) b.WriteString("## Parameters\n\n") b.WriteString(fmt.Sprintf("- [Create params](%s_params_create.md)\n", spec.Name)) b.WriteString(fmt.Sprintf("- [Modify params](%s_params_modify.md)\n", spec.Name)) return b.String() } -func buildSubresourcePage(spec types.ServiceSpec, srName string) string { +func buildSubresourcePage(spec types.ServiceSpec, srName string, nav string) string { var b strings.Builder srResourceName := fmt.Sprintf("nubes_%s_%s", spec.Name, Slug(srName)) b.WriteString(fmt.Sprintf("# Resource %s\n\n", srResourceName)) @@ -491,7 +500,7 @@ func buildSubresourcePage(spec types.ServiceSpec, srName string) string { return b.String() } -func buildSubresourceExamplePage(spec types.ServiceSpec, srName string, version string, apiEndpoint string, providerSource string) string { +func buildSubresourceExamplePage(spec types.ServiceSpec, srName string, nav string, version string, apiEndpoint string, providerSource string) string { var b strings.Builder srResourceName := fmt.Sprintf("nubes_%s_%s", spec.Name, Slug(srName)) b.WriteString(fmt.Sprintf("# Resource %s — Example\n\n", srResourceName))