revert previous mis-commits, add ability to allow deeper pretty-printing after an error or Stringer interface is encountered.
This commit is contained in:
parent
3e74359719
commit
f948516369
|
@ -150,11 +150,26 @@ func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool)
|
||||||
switch iface := viface.(type) {
|
switch iface := viface.(type) {
|
||||||
case error:
|
case error:
|
||||||
defer catchPanic(w, v)
|
defer catchPanic(w, v)
|
||||||
|
if cs.ContinueOnMethod {
|
||||||
|
w.Write(append(openParenBytes, []byte(iface.Error())...))
|
||||||
|
w.Write(closeParenBytes)
|
||||||
|
w.Write(spaceBytes)
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
w.Write([]byte(iface.Error()))
|
w.Write([]byte(iface.Error()))
|
||||||
return true
|
return true
|
||||||
|
|
||||||
case fmt.Stringer:
|
case fmt.Stringer:
|
||||||
defer catchPanic(w, v)
|
defer catchPanic(w, v)
|
||||||
|
if cs.ContinueOnMethod {
|
||||||
|
w.Write(append(openParenBytes, []byte(iface.String())...))
|
||||||
|
w.Write(closeParenBytes)
|
||||||
|
w.Write(spaceBytes)
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
w.Write([]byte(iface.String()))
|
w.Write([]byte(iface.String()))
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,6 +62,13 @@ type ConfigState struct {
|
||||||
// interface with a pointer receiver should not be mutating their state
|
// interface with a pointer receiver should not be mutating their state
|
||||||
// inside these interface methods.
|
// inside these interface methods.
|
||||||
DisablePointerMethods bool
|
DisablePointerMethods bool
|
||||||
|
|
||||||
|
//ContinueOnMethod specifies whether recursion should stop once
|
||||||
|
//a Stringer or an error interface is encountered.
|
||||||
|
//
|
||||||
|
//It defaults to false, meaning that it does not pretty-print
|
||||||
|
//the internals of Stringers or errors.
|
||||||
|
ContinueOnMethod bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Config is the active configuration of the top-level functions.
|
// Config is the active configuration of the top-level functions.
|
||||||
|
@ -151,39 +158,6 @@ func (c *ConfigState) Println(a ...interface{}) (n int, err error) {
|
||||||
return fmt.Println(c.convertArgs(a)...)
|
return fmt.Println(c.convertArgs(a)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were
|
|
||||||
// passed with a Formatter interface returned by c.NewFormatter. It returns
|
|
||||||
// the resulting string. See NewFormatter for formatting details.
|
|
||||||
//
|
|
||||||
// This function is shorthand for the following syntax:
|
|
||||||
//
|
|
||||||
// fmt.Sprint(c.NewFormatter(a), c.NewFormatter(b))
|
|
||||||
func (c *ConfigState) Sprint(a ...interface{}) string {
|
|
||||||
return fmt.Sprint(c.convertArgs(a)...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were
|
|
||||||
// passed with a Formatter interface returned by c.NewFormatter. It returns
|
|
||||||
// the resulting string. See NewFormatter for formatting details.
|
|
||||||
//
|
|
||||||
// This function is shorthand for the following syntax:
|
|
||||||
//
|
|
||||||
// fmt.Sprintf(format, c.NewFormatter(a), c.NewFormatter(b))
|
|
||||||
func (c *ConfigState) Sprintf(format string, a ...interface{}) string {
|
|
||||||
return fmt.Sprintf(format, c.convertArgs(a)...)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it
|
|
||||||
// were passed with a Formatter interface returned by c.NewFormatter. It
|
|
||||||
// returns the resulting string. See NewFormatter for formatting details.
|
|
||||||
//
|
|
||||||
// This function is shorthand for the following syntax:
|
|
||||||
//
|
|
||||||
// fmt.Sprintln(c.NewFormatter(a), c.NewFormatter(b))
|
|
||||||
func (c *ConfigState) Sprintln(a ...interface{}) string {
|
|
||||||
return fmt.Sprintln(c.convertArgs(a)...)
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
NewFormatter returns a custom formatter that satisfies the fmt.Formatter
|
NewFormatter returns a custom formatter that satisfies the fmt.Formatter
|
||||||
interface. As a result, it integrates cleanly with standard fmt package
|
interface. As a result, it integrates cleanly with standard fmt package
|
||||||
|
|
Loading…
Reference in New Issue