This commit modifies the code to detect nil slices and display them as
<nil> (as opposed to simply empty slices). For most instances a nil slice
can be treated the same as an empty slice, but there is a difference and
things like reflect.DeepEqual notice. This change makes it clear whether
the type in question is a nil slice or an empty slice.
It was previously possible for an invalid reflect value to lead to a panic
in certain obscure cases. Rather than adding multiple checks for the
invalid reflect value, handle invalid reflect values immediately.
This commit implements feature request #3. In particular, it allows the
formatter to respond to %#v and %#+v. The # flag (%#v) adds type
information to the output and the combination of the # and + flags (%#+v)
adds both type information and pointer information. This allows the
consumer a choice between displaying types, pointer information, or both.
This commit adds a new type, SpewState, which can be used to create
instances with unique configuration options. The methods of SpewState are
equivalent to the top-level functions. Full documentation and examples
are included.
This paves the way to support individual configuration options through a
separate type while still providing the simple global config and package
level methods.