package argvpb // debug argv protobuf functions // enable with --autodebug or Setenv( "AUTOCOMPLETE_VERBOSE" ) import ( "fmt" "os" "strings" "go.wit.com/lib/cobol" ) // decides here to print to STDERR or not func (pb *Argv) Debugf(fmts string, parts ...any) { fmts = strings.TrimSpace(fmts) fmts += "\n" pb.Stderr += fmt.Sprintf(fmts, parts...) } // print out auto complete debugging info func (pb *Argv) PrintDebug() { pb.PrintDebugNew("ARGV") } func (pb *Argv) PrintDebugNew(msg string) { cmd := fmt.Sprintf("cmd='%s'", pb.GetCmd()) var arglast string if me.last == nil { arglast = fmt.Sprintf("last='%s'", "") } else { arglast = fmt.Sprintf("last='%s'", me.last.GetCmd()) } partial := fmt.Sprintf("p='%s'", pb.Partial) dur := cobol.Duration(pb.Ctime) var fast string if pb.Fast { fast = "fast=1," + pb.GetCmd() } else { fast = "fast=0," + pb.GetCmd() } sargv := fmt.Sprintf("argv(%v)", pb.Real) pb.Debugf("%s: age=(%s) %-12.12s %-12.12s %-12.12s %s %s goargs='%v'", msg, dur, cmd, arglast, partial, fast, sargv, pb.Goargs) } func (all *Argvs) PrintHistory() { for pb := range all.IterAll() { pb.PrintDebugNew("HIST") } } func (pb *Argv) PrintStderr() { if !me.debug { os.Exit(0) } lines := strings.Split(strings.TrimSpace(pb.Stderr), "\n") if len(lines) == 0 { os.Exit(0) } fmt.Fprintf(os.Stderr, "\n") for _, line := range lines { line = strings.TrimSpace(line) if line == "" { continue } fmt.Fprintf(os.Stderr, "%s\n", line) } } func (pb *Argv) PrintStderrExit() { pb.PrintStderr() os.Exit(0) }