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

clihelp

package
v1.3.100 Latest Latest
Warning

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

Go to latest
Published: Oct 9, 2026 License: AGPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

Package clihelp is the machine-readable shape of `skywire cli --help`.

`--help --json` emits this instead of the rendered help text. The point is discovery without scraping: one call at the root returns the whole command tree with every flag, its type and its default, so a caller can find the command it needs — or check what a flag is called — without running 387 commands and parsing prose that was written for a person.

Cobra offers nothing here. It renders help through a text/template and has no notion of a machine format (there is no JSON anywhere in the library), so the schema is ours to define. What it does offer is SetHelpFunc, which children inherit — so registering once on the root covers every subcommand.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Command

type Command struct {
	// Name is the first word of Use; Path is how you would type it,
	// e.g. "skywire cli visor info". Both are given because callers want
	// different ones: Name to match, Path to run.
	Name    string `json:"name"`
	Path    string `json:"path"`
	Use     string `json:"use,omitempty"`
	Short   string `json:"short,omitempty"`
	Long    string `json:"long,omitempty"`
	Example string `json:"example,omitempty"`

	Aliases    []string `json:"aliases,omitempty"`
	Deprecated string   `json:"deprecated,omitempty"`
	Hidden     bool     `json:"hidden,omitempty"`
	// Runnable distinguishes a command that does something from a group that
	// only holds subcommands.
	Runnable bool `json:"runnable"`

	// Flags are declared on this command; Inherited come from ancestors
	// (--json among them). Kept apart because the distinction decides where
	// a flag may be placed on the command line.
	Flags     []Flag `json:"flags,omitempty"`
	Inherited []Flag `json:"inherited_flags,omitempty"`

	Subcommands []Command `json:"subcommands,omitempty"`
}

Command is one command and, recursively, everything under it.

func Of

func Of(cmd *cobra.Command) Command

Of builds the schema for cmd and everything beneath it.

type Flag

type Flag struct {
	Name string `json:"name"`
	// Shorthand is the single-letter form without its dash, empty if none.
	Shorthand string `json:"shorthand,omitempty"`
	// Type is pflag's own name for the value: "string", "bool", "int",
	// "stringSlice" and so on. It is what tells a caller whether the flag
	// takes an argument.
	Type       string `json:"type"`
	Default    string `json:"default,omitempty"`
	Usage      string `json:"usage,omitempty"`
	Deprecated string `json:"deprecated,omitempty"`
	Hidden     bool   `json:"hidden,omitempty"`
}

Flag is one flag as the parser sees it.

type Node

type Node struct {
	Name string `json:"name"`
	// Path is how the command is typed, e.g. "skywire cli visor info".
	Path string `json:"path"`
	// Runnable separates a command that does something from a group that only
	// holds others — the distinction the ASCII rendering cannot show.
	Runnable bool   `json:"runnable"`
	Children []Node `json:"children,omitempty"`
}

Node is the command tree with the help text stripped out: what `tree` shows, in the shape a program would want it.

Deliberately not Command. `tree` exists to show STRUCTURE — it is `help -t`, help with the text removed — so its JSON carries names and nesting and nothing else. Emitting the full Command schema here would make `tree --json` a duplicate of `--help --json`, and the two commands would stop meaning different things.

func TreeOf

func TreeOf(cmd *cobra.Command) Node

TreeOf builds the structural tree rooted at cmd, following the same visibility rule as the ASCII rendering: available commands only, so the two forms describe the same thing.

func (Node) Human

func (n Node) Human(w io.Writer) error

Human writes the ASCII tree, so `tree` and `tree --json` are one value in two renderings rather than two code paths that can disagree.

Jump to

Keyboard shortcuts

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