MCPcopy Index your code
hub / github.com/chzyer/flagly

github.com/chzyer/flagly @v1.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.1 ↗ · + Follow
221 symbols 481 edges 17 files 4 documented · 2%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

flagly

Software License Build Status GoDoc codebeat badge

The easier way to parsing command-line flag in Golang, also building a command line app.

It can also provides shell-like interactives by using readline (demo: flagly-shell)

Usage

go get github.com/chzyer/flagly

binding

type Config struct {
    Verbose bool   `name:"v" desc:"be more verbose"`
    Name    string `type:"[0]"`
}

func NewConfig() *Config {
    var cfg Config
    flagly.Bind(&cfg)
    return &cfg
}

func main() {
    cfg := NewConfig()
    fmt.Printf("config: %+v\n", cfg)
}

source file: flagly-binding

$ go install github.com/chzyer/flagly/demo/flagly-binding
$ flagly-binding -v name
config: &{Verbose:true Name:name}

routing

type Git struct {
    Version bool `name:"v" desc:"show version"`

    // sub handlers
    Clone *GitClone `flagly:"handler"`
    Init  *GitInit  `flagly:"handler"`
}

type GitClone struct {
    Parent *Git `flagly:"parent"`

    Verbose  bool   `name:"v" desc:"be more verbose"`
    Quiet    bool   `name:"q" desc:"be more quiet"`
    Progress bool   `name:"progress" desc:"force progress reporting"`
    Template string `arg:"template-directory"`

    Repo string `name:"[0]"`
    Dir  string `name:"[1]" default:""`
}

func (g *GitClone) FlaglyHandle() error {
    if g.Repo == "" {
        return flagly.ErrShowUsage
    }
    fmt.Printf("git clone %+v %+v\n", g.Parent, g)
    return nil
}

func (g *GitClone) FlaglyDesc() string {
    return "Create an empty Git repository or reinitialize an existing one"
}

type GitInit struct {
    Quiet bool `name:"q" desc:"be quiet"`
}

func (g *GitInit) FlaglyDesc() string {
    return "Clone a repository into a new directory"
}

func main() {
    var git Git
    flagly.Run(&git)
}

source file: flagly-git

$ go install github.com/chzyer/flagly/demo/flagly-git
$ flagly-git

usage: flagly-git [option] <command>

options:
    -v                  show version
    -h                  show help

commands:
    clone               Create an empty Git repository or reinitialize an existing one
    init                Clone a repository into a new directory

$ flagly-get -v clone -h

usage: flagly-git [flagly-git option] clone [option] [--] <repo> [<dir>]

options:
    -v                  be more verbose
    -q                  be more quiet
    -progress           force progress reporting
    -template <template-directory>
                        directory from which templates will be used
    -h                  show help

flagly-git options:
    -v                  show version
    -h                  show help

$ flagly-git -v clone repoName

git clone
    &{Version:true Clone:<nil> Init:<nil> Add:<nil>}
    &{Parent:0xc20801e220 Verbose:false Quiet:false Progress:false Template: Repo:repoName Dir:}

Feedback

If you have any questions, please submit a github issue and any pull requests is welcomed :)

Extension points exported contracts — how you extend this code

BaseTyper (Interface)
(no doc) [8 implementers]
typer.go
FlaglyDescer (Interface)
(no doc) [4 implementers]
iface.go
Tree (Interface)
(no doc) [2 implementers]
completer.go
BaseTypeCanBeValuer (Interface)
(no doc) [7 implementers]
typer.go
FlaglyIniter (Interface)
(no doc) [2 implementers]
iface.go
BaseTypeNumArgs (Interface)
(no doc) [7 implementers]
typer.go
FlaglyVerifier (Interface)
(no doc)
iface.go
BaseTyperParser (Interface)
(no doc) [6 implementers]
typer.go

Core symbols most depended-on inside this repo

String
called by 16
handler.go
Get
called by 13
tagparser.go
Type
called by 12
typer.go
Set
called by 10
typer.go
GetName
called by 8
completer.go
Error
called by 7
usage.go
GetChildren
called by 7
handler.go
HasDefault
called by 6
option.go

Shape

Method 141
Function 40
Struct 28
Interface 10
TypeAlias 2

Languages

Go100%

Modules by API surface

typer.go62 symbols
handler.go48 symbols
flagly.go25 symbols
option.go20 symbols
demo/flagly-shell/flagly-shell.go11 symbols
iface.go10 symbols
completer.go9 symbols
tagparser.go8 symbols
usage.go7 symbols
demo/flagly-git/git-clone.go4 symbols
commands.go4 symbols
demo/flagly-git/git-add.go3 symbols

For agents

$ claude mcp add flagly \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact