# ffmd [![Go Reference](https://pkg.go.dev/badge/go.jolheiser.com/ffmd.svg)](https://pkg.go.dev/go.jolheiser.com/ffmd) One of the things that I really liked about [urfave/cli](https://github.com/urfave/cli) was that it could generate markdown docs for my commands. With `ffmd` you can generate markdown docs for both `flag.FlagSet` and `ffcli.Command` (with any amount of sub-commands). Check out [examples](examples) for some sample generated docs. ## Generate your docs ```go //go:build generate // +build generate package main import ( "os" "go.jolheiser.com/ffmd" ) func main() { fi, err := os.Create("docs.md") if err != nil { panic(err) } defer fi.Close() // cmd is the ffcli.Command md, err := ffmd.Command(cmd) if err != nil { panic(err) } if _, err := fi.WriteString(md); err != nil { panic(err) } } ``` ## Aliases While the stdlib doesn't directly support flag aliases, this library allows for neater generation using a special syntax. ```go package main import "flag" func main() { fs := flag.NewFlagSet("myapp", flag.ExitOnError) stringFlag := fs.String("string", "", "String flag") fs.StringVar(stringFlag, "s", *stringFlag, "--string") } ``` In the above code, a second flag was registered with the special `Usage` that simply declared what the long-form flag name was. In this scenario, `ffmd` will generate docs similar to ```text --string,-s ``` See the [example](examples/alias). ## License [MIT](LICENSE)