Browse Source

Cleanup documentation on new ContinueOnMethod code.

This commit expands on TShadwell's work attached to issue #8.  It
rounds out the documentation for the new option.
Dave Collins 12 years ago
parent
commit
9dfc238865
4 changed files with 22 additions and 10 deletions
  1. 4 0
      README.md
  2. 4 4
      spew/common.go
  3. 10 6
      spew/config.go
  4. 4 0
      spew/doc.go

+ 4 - 0
README.md

@@ -109,6 +109,10 @@ options. See the ConfigState documentation for more details.
 	Disables invocation of error and Stringer interface methods on types
 	which only accept pointer receivers from non-pointer variables.
 	Pointer method invocation is enabled by default.
+
+* ContinueOnMethod
+	Enables recursion into types after invoking error and Stringer interface
+	methods. Recursion after method invocation is disabled by default.
 ```
 
 ## License

+ 4 - 4
spew/common.go

@@ -151,10 +151,10 @@ func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool)
 	case error:
 		defer catchPanic(w, v)
 		if cs.ContinueOnMethod {
-			w.Write(append(openParenBytes, []byte(iface.Error())...))
+			w.Write(openParenBytes)
+			w.Write([]byte(iface.Error()))
 			w.Write(closeParenBytes)
 			w.Write(spaceBytes)
-
 			return false
 		}
 
@@ -164,10 +164,10 @@ func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool)
 	case fmt.Stringer:
 		defer catchPanic(w, v)
 		if cs.ContinueOnMethod {
-			w.Write(append(openParenBytes, []byte(iface.String())...))
+			w.Write(openParenBytes)
+			w.Write([]byte(iface.String()))
 			w.Write(closeParenBytes)
 			w.Write(spaceBytes)
-
 			return false
 		}
 		w.Write([]byte(iface.String()))

+ 10 - 6
spew/config.go

@@ -63,11 +63,14 @@ type ConfigState struct {
 	// inside these interface methods.
 	DisablePointerMethods bool
 
-	//ContinueOnMethod specifies whether recursion should stop once
-	//a Stringer or an error interface is encountered.
+	// ContinueOnMethod specifies whether or not recursion should continue once
+	// a custom error or Stringer interface is invoked.  The default, false,
+	// means it will print the results of invoking the custom error or Stringer
+	// interface and return immediately instead of continuing to recurse into
+	// the internals of the data type.
 	//
-	//It defaults to false, meaning that it does not pretty-print
-	//the internals of Stringers or errors.
+	// NOTE: This flag does not have any effect if method invocation is disabled
+	// via the DisableMethods or DisablePointerMethods options.
 	ContinueOnMethod bool
 }
 
@@ -255,10 +258,11 @@ func (c *ConfigState) convertArgs(args []interface{}) (formatters []interface{})
 
 // NewDefaultConfig returns a ConfigState with the following default settings.
 //
-//	Indent: " "
+// 	Indent: " "
 // 	MaxDepth: 0
 // 	DisableMethods: false
-// 	DisablePointerMethods: false 
+// 	DisablePointerMethods: false
+// 	ContinueOnMethod: false
 func NewDefaultConfig() *ConfigState {
 	return &ConfigState{Indent: " "}
 }

+ 4 - 0
spew/doc.go

@@ -87,6 +87,10 @@ The following configuration options are available:
 		which only accept pointer receivers from non-pointer variables.
 		Pointer method invocation is enabled by default.
 
+	* ContinueOnMethod
+		Enables recursion into types after invoking error and Stringer interface
+		methods. Recursion after method invocation is disabled by default.
+
 Dump Usage
 
 Simply call spew.Dump with a list of variables you want to dump: