Help us shape the future of Go! Take the 2026 Go Developer Survey

docs

package
v1.21.77 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 12, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Overview

Package docs provides a reusable cobra command group that generates a markdown CLI reference and a clicky-ui surface catalog from a CLI's command tree, as one markdown file per high-level command controller.

It mirrors the rpc.NewOpenAPICommand / mcp.NewCommand factory pattern and is wired into a host CLI via extensions.CobraExtensions(root).DocsCommand().

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewCommand

func NewCommand() *cobra.Command

NewCommand creates the docs command group with default configuration.

func NewCommandWithConfig

func NewCommandWithConfig(cfg *DocsConfig) *cobra.Command

NewCommandWithConfig creates the docs command group. cfg supplies optional host defaults (title, intro, excluded commands, controller depth).

func RenderCLIReference

func RenderCLIReference(m *Model) string

RenderCLIReference produces the markdown CLI reference body (no frontmatter). It documents every controller in order, each as a section.

func RenderController

func RenderController(ctrl ControllerDoc) string

RenderController produces the markdown body for a single controller's page (no frontmatter): the controller summary followed by each of its commands.

func RenderSingleFile

func RenderSingleFile(m *Model, format string) (string, error)

RenderSingleFile renders the whole model to one document in the requested format. "markdown" (default) concatenates the CLI reference and UI catalog; "json"/"yaml" emit the structured Model via clicky's FormatManager. Other formats fail loudly — prose markdown is not converted to html/pdf here.

func RenderUISurfaces

func RenderUISurfaces(m *Model) string

RenderUISurfaces produces the markdown clicky-ui surface catalog body (no frontmatter). It documents, per operation: the surface entity + verb, the HTTP endpoint + CLI command the UI invokes, lookup support, and each parameter's UI-widget role.

Types

type CommandDoc

type CommandDoc struct {
	Path    string    `json:"path" yaml:"path"`       // e.g. "stack create"
	Use     string    `json:"use" yaml:"use"`         // raw cobra Use string
	Short   string    `json:"short" yaml:"short"`     // one-line summary
	Long    string    `json:"long" yaml:"long"`       // full description
	Example string    `json:"example" yaml:"example"` // example block
	Aliases []string  `json:"aliases" yaml:"aliases"` // command aliases
	Flags   []FlagDoc `json:"flags" yaml:"flags"`
}

CommandDoc documents a single runnable command for the CLI reference.

type ControllerDoc

type ControllerDoc struct {
	Name     string       `json:"name" yaml:"name"`         // controller name, e.g. "stack"
	Short    string       `json:"short" yaml:"short"`       // controller one-line summary
	Long     string       `json:"long" yaml:"long"`         // controller full description
	Commands []CommandDoc `json:"commands" yaml:"commands"` // commands within the depth limit
}

ControllerDoc groups the commands of one high-level command controller — a direct child of the root — into a single documentation unit (one page). A top-level leaf command (no subcommands) is its own controller.

type DocsConfig

type DocsConfig struct {
	// Title is the docs-site title. Defaults to the root command's name.
	Title string
	// Description is the intro/landing-page blurb. Defaults to the root
	// command's Long (or Short) text.
	Description string
	// Exclude lists command paths (space-delimited, e.g. "admin secret") that
	// should be omitted from the generated CLI reference and UI catalog.
	Exclude []string
	// Depth limits how many command levels below each high-level controller
	// (direct child of root) are included in that controller's page. Depth 1
	// (the default) includes the controller and its direct subcommands; depth 2
	// descends one level further. Depth 0 uses the default; negative values mean
	// unlimited (the whole subtree).
	Depth int
}

DocsConfig configures the docs command group. All fields are optional; unset values fall back to metadata derived from the root cobra command.

type FlagDoc

type FlagDoc struct {
	Name      string      `json:"name" yaml:"name"`
	Shorthand string      `json:"shorthand" yaml:"shorthand"`
	Type      string      `json:"type" yaml:"type"`
	Default   interface{} `json:"default,omitempty" yaml:"default,omitempty"`
	Required  bool        `json:"required" yaml:"required"`
	Usage     string      `json:"usage" yaml:"usage"`
}

FlagDoc documents a single flag.

type Model

type Model struct {
	Title       string          `json:"title" yaml:"title"`
	Description string          `json:"description" yaml:"description"`
	Version     string          `json:"version" yaml:"version"`
	Controllers []ControllerDoc `json:"controllers" yaml:"controllers"`
	Commands    []CommandDoc    `json:"commands" yaml:"commands"`
	Surfaces    []SurfaceDoc    `json:"surfaces" yaml:"surfaces"`
}

Model is the structured docs model assembled from a CLI's command tree. It is the single source for every output: CLI reference, UI catalog, and the json/yaml structured dumps.

func BuildModel

func BuildModel(root *cobra.Command, cfg *DocsConfig) (*Model, error)

BuildModel converts the root cobra command into a Model using rpc.Converter for operation metadata (paths, verbs, parameter roles) and walking the command tree directly for the CLI reference.

type Page

type Page struct {
	Key         string // logical key + filename stem: "index", "stack", "ui-surfaces", ...
	Title       string
	Description string
	Body        string // markdown body
	Generated   bool   // regenerated every run (true) vs write-once starter (false)
}

Page is a logical docs page produced by the generator. Each page is written as a plain markdown file (<Key>.md) directly under the output directory.

type ParameterDoc

type ParameterDoc struct {
	Name     string      `json:"name" yaml:"name"`
	Type     string      `json:"type" yaml:"type"`
	Role     string      `json:"role,omitempty" yaml:"role,omitempty"` // filter/limit/offset/time-from/time-to
	Required bool        `json:"required" yaml:"required"`
	Default  interface{} `json:"default,omitempty" yaml:"default,omitempty"`
	In       string      `json:"in" yaml:"in"` // query/path/body
}

ParameterDoc documents a single UI parameter and its widget role.

type ScaffoldResult

type ScaffoldResult struct {
	Dir     string
	Actions []WriteAction
}

ScaffoldResult is the outcome of writing a docs site, for reporting.

func Scaffold

func Scaffold(m *Model, dir string, force bool) (*ScaffoldResult, error)

Scaffold writes the model's pages as flat markdown files directly under dir, applying the two-tier policy: Generated pages are always (re)written; starter pages are written only when absent, unless force is set. Returns a per-file report so the caller can show exactly what was written vs. skipped (no silent skips).

type SurfaceDoc

type SurfaceDoc struct {
	Command    string         `json:"command" yaml:"command"` // CLI command path
	Entity     string         `json:"entity" yaml:"entity"`   // entity name
	Verb       string         `json:"verb" yaml:"verb"`       // list/get/create/update/delete/action
	Method     string         `json:"method" yaml:"method"`   // HTTP method
	Path       string         `json:"path" yaml:"path"`       // /api/v1/...
	Lookup     bool           `json:"lookup" yaml:"lookup"`   // SupportsLookup
	Parameters []ParameterDoc `json:"parameters" yaml:"parameters"`
}

SurfaceDoc documents a clicky-ui operation surface: the entity/verb mapping, its UI-role parameters, lookup support, and the HTTP endpoint + CLI command the UI uses to invoke it.

type WriteAction

type WriteAction struct {
	Path    string // path relative to the output directory
	Status  string // "written", "regenerated", or "skipped"
	Skipped bool
}

WriteAction records what happened to one file during scaffolding.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL