61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
// Package cli provides a minimal framework for creating and organizing command line
|
|
// Go applications. cli is designed to be easy to understand and write, the most simple
|
|
// cli application can be written as follows:
|
|
//
|
|
// func main() {
|
|
// (&cli.Command{}).Run(context.Background(), os.Args)
|
|
// }
|
|
//
|
|
// Of course this application does not do much, so let's make this an actual application:
|
|
//
|
|
// func main() {
|
|
// cmd := &cli.Command{
|
|
// Name: "greet",
|
|
// Usage: "say a greeting",
|
|
// Action: func(c *cli.Context) error {
|
|
// fmt.Println("Greetings")
|
|
// return nil
|
|
// },
|
|
// }
|
|
//
|
|
// cmd.Run(context.Background(), os.Args)
|
|
// }
|
|
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"runtime"
|
|
"strings"
|
|
)
|
|
|
|
var isTracingOn = os.Getenv("URFAVE_CLI_TRACING") == "on"
|
|
|
|
func tracef(format string, a ...any) {
|
|
if !isTracingOn {
|
|
return
|
|
}
|
|
|
|
if !strings.HasSuffix(format, "\n") {
|
|
format = format + "\n"
|
|
}
|
|
|
|
pc, file, line, _ := runtime.Caller(1)
|
|
cf := runtime.FuncForPC(pc)
|
|
|
|
fmt.Fprintf(
|
|
os.Stderr,
|
|
strings.Join([]string{
|
|
"## URFAVE CLI TRACE ",
|
|
file,
|
|
":",
|
|
fmt.Sprintf("%v", line),
|
|
" ",
|
|
fmt.Sprintf("(%s)", cf.Name()),
|
|
" ",
|
|
format,
|
|
}, ""),
|
|
a...,
|
|
)
|
|
}
|