cli

package module
v0.2.3 Latest Latest
Warning

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

Go to latest
Published: Jan 15, 2026 License: MIT Imports: 8 Imported by: 25

README

Package cli

import (
	"github.com/titpetric/cli"
}

CLI package

This package contains the implementation for a minimal opinionated flags framework similar to spf13/cobra. It all centers around the cli.Command type but provides less functionality.

To create a new CLI application:

app := cli.NewApp("mig")
app.AddCommand("version", version.Name, version.New)

	if err := app.Run(); err != nil {
	        return err
	}

The version.New is a func() *cli.Command.

The Command type defines Name and Title as strings, equivallent to cobra Command.Use (Name) and Command.Long (Title). There is no equivalent of Command.Short.

The API choices are different, cobra's AddCommand took a command, and the command type was passed into Run().

The cli package creates a CommandInfo with AddCommand, and then calls the constructor of the *Command type. The type must have Run filled, and can implement Bind(*FlagSet) to read in CLI flags.

The Run function is context aware, supporting observability.

Types

// App is the cli entrypoint.
type App struct {
	Name		string
	DefaultCommand	string

	commands	map[string]CommandInfo
	commandOrder	[]string
}
// Command and CommandInfo types for CLI command handling.
type (
	// FlagSet is here to prevent pflag leaking to imports.
	FlagSet	= pflag.FlagSet

	// Command is an individual command.
	Command	struct {
		Name	string
		Title	string
		Default	bool
		Bind	func(*FlagSet)
		Run	func(context.Context, []string) error
	}

	// CommandInfo is the constructor info for a command
	CommandInfo	struct {
		Name	string
		Title	string
		New	func() *Command
	}
)

Vars

// Flag variable binding functions from spf13/pflag.
var (
	BoolVar		= pflag.BoolVar
	DurationVar	= pflag.DurationVar
	Int64Var	= pflag.Int64Var
	IntVar		= pflag.IntVar
	StringVar	= pflag.StringVar
	Uint64Var	= pflag.Uint64Var
	UintVar		= pflag.UintVar
	StringSliceVar	= pflag.StringSliceVar

	BoolVarP	= pflag.BoolVarP
	DurationVarP	= pflag.DurationVarP
	Int64VarP	= pflag.Int64VarP
	IntVarP		= pflag.IntVarP
	StringVarP	= pflag.StringVarP
	Uint64VarP	= pflag.Uint64VarP
	UintVarP	= pflag.UintVarP
	StringSliceVarP	= pflag.StringSliceVarP

	PrintDefaults	= pflag.PrintDefaults
)

Function symbols

  • func NewApp (name string) *App
  • func ParseWithFlagSet (fs *FlagSet, args []string) error
  • func (*App) AddCommand (name,title string, constructor func() *Command)
  • func (*App) FindCommand (commands []string, fallback string) (*Command, error)
  • func (*App) HasCommand (name string) bool
  • func (*App) Help ()
  • func (*App) HelpCommand (fs *FlagSet, command *Command)
  • func (*App) ParseCommands (args []string) []string
  • func (*App) Run () error
  • func (*App) RunWithArgs (args []string) error
NewApp

NewApp creates a new App instance.

func NewApp (name string) *App
ParseWithFlagSet

ParseWithFlagSet parses flags and environment variables for a scoped FlagSet.

func ParseWithFlagSet (fs *FlagSet, args []string) error
AddCommand

AddCommand adds a command to the app.

func (*App) AddCommand (name,title string, constructor func() *Command)
FindCommand

FindCommand finds a command for the app.

func (*App) FindCommand (commands []string, fallback string) (*Command, error)
HasCommand

HasCommand checks if a command exists in the app.

func (*App) HasCommand (name string) bool
Help

Help prints out registered commands for app.

func (*App) Help ()
HelpCommand

HelpCommand prints out help for a specific command.

func (*App) HelpCommand (fs *FlagSet, command *Command)
ParseCommands

ParseCommands cleans up args[], returning only commands. If no commands are detected, DefaultCommand is returned.

func (*App) ParseCommands (args []string) []string
Run

Run passes os.Args without the command name to RunWithArgs().

func (*App) Run () error
RunWithArgs

RunWithArgs is a cli entrypoint which sets up a cancellable context for the command.

func (*App) RunWithArgs (args []string) error

Documentation

Overview

CLI package

This package contains the implementation for a minimal opinionated flags framework similar to spf13/cobra. It all centers around the `cli.Command` type but provides less functionality.

To create a new CLI application:

```go app := cli.NewApp("mig") app.AddCommand("version", version.Name, version.New)

if err := app.Run(); err != nil {
        return err
}

```

The `version.New` is a `func() *cli.Command`.

The Command type defines Name and Title as strings, equivallent to cobra `Command.Use` (Name) and `Command.Long` (Title). There is no equivalent of `Command.Short`.

The API choices are different, cobra's `AddCommand` took a command, and the command type was passed into Run().

The cli package creates a `CommandInfo` with AddCommand, and then calls the constructor of the `*Command` type. The type must have Run filled, and can implement Bind(*FlagSet) to read in CLI flags.

The Run function is context aware, supporting observability.

Index

Constants

This section is empty.

Variables

View Source
var (
	BoolVar        = pflag.BoolVar
	DurationVar    = pflag.DurationVar
	Int64Var       = pflag.Int64Var
	IntVar         = pflag.IntVar
	StringVar      = pflag.StringVar
	Uint64Var      = pflag.Uint64Var
	UintVar        = pflag.UintVar
	StringSliceVar = pflag.StringSliceVar

	BoolVarP        = pflag.BoolVarP
	DurationVarP    = pflag.DurationVarP
	Int64VarP       = pflag.Int64VarP
	IntVarP         = pflag.IntVarP
	StringVarP      = pflag.StringVarP
	Uint64VarP      = pflag.Uint64VarP
	UintVarP        = pflag.UintVarP
	StringSliceVarP = pflag.StringSliceVarP

	PrintDefaults = pflag.PrintDefaults
)

Flag variable binding functions from spf13/pflag.

Functions

func ParseWithFlagSet

func ParseWithFlagSet(fs *FlagSet, args []string) error

ParseWithFlagSet parses flags and environment variables for a scoped FlagSet.

Types

type App

type App struct {
	Name           string
	DefaultCommand string
	// contains filtered or unexported fields
}

App is the cli entrypoint.

func NewApp

func NewApp(name string) *App

NewApp creates a new App instance.

func (*App) AddCommand

func (app *App) AddCommand(name, title string, constructor func() *Command)

AddCommand adds a command to the app.

func (*App) FindCommand

func (app *App) FindCommand(commands []string, fallback string) (*Command, error)

FindCommand finds a command for the app.

func (*App) HasCommand added in v0.2.1

func (app *App) HasCommand(name string) bool

HasCommand checks if a command exists in the app.

func (*App) Help

func (app *App) Help()

Help prints out registered commands for app.

func (*App) HelpCommand

func (app *App) HelpCommand(fs *FlagSet, command *Command)

HelpCommand prints out help for a specific command.

func (*App) ParseCommands added in v0.2.2

func (app *App) ParseCommands(args []string) []string

ParseCommands cleans up args[], returning only commands. If no commands are detected, DefaultCommand is returned.

func (*App) Run

func (app *App) Run() error

Run passes os.Args without the command name to RunWithArgs().

func (*App) RunWithArgs

func (app *App) RunWithArgs(args []string) error

RunWithArgs is a cli entrypoint which sets up a cancellable context for the command.

type Command

type Command struct {
	Name    string
	Title   string
	Default bool
	Bind    func(*FlagSet)
	Run     func(context.Context, []string) error
}

Command is an individual command.

type CommandInfo

type CommandInfo struct {
	Name  string
	Title string
	New   func() *Command
}

CommandInfo is the constructor info for a command

type FlagSet added in v0.2.0

type FlagSet = pflag.FlagSet

FlagSet is here to prevent pflag leaking to imports.

Jump to

Keyboard shortcuts

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