This commit adds logic to gracefully the internal reflect.Value flag bit
changes as of golang commit adf9b30e5594 while maintaining support all
the back to Go 1.0.
It accomplishes this by adding code to the init time inspection to
detect the change and set the flag positions accordingly.
While here, also removes a TODO comment since it was already done
previously.
This commit adds support for compiling spew without the unsafe package.
When compiled without the unsafe package, some of the more advanced
features such as invoking stringers on pointers from non-pointer
variables and unexported struct fields are not available.
By default, spew will be compiled in the limited mode for Google App
Engine since the unsafe package is not available there. Additionally,
spew can be compiled without the unsafe package manually by specifying
the "disableunsafe" build tag.
Finally, a new package-level constant named "UnsafeDisabled" has been
exposed which can be used to programmatically determine if spew was
compiled with access to the unsafe package.
If enabled by flags, try to use methods to stringify map keys and sort on that.
If we can't use primitive sorting and we can't use methods, we can still fall
back on spew itself. If SpewKeys is enabled, use Sprintf("%#v") to generate a
string and sort by that.
This commit moves the new code related to sorting reflect.Value items into
common.go since it is accessed by both the formatter and the dumper. It
also adds comments to the new functions and unexports SortValues since it
should be an internal function only.
The previous version of SortKeys was sorting only native types. Now, if
the type is unknown it defaults to its reflect.Value.String()
representation which at least guarantees display stability.
If ConfigState.SortKeys is true, then dump and format will sort map keys
before displaying them. Only native types (bool, ints, uint, uintptr,
string) are supported, other slices are left unchanged.
The motivation is to have more diffable output, mostly for test purpose.
This commit adds support for dumping a few cgo types like hexdump -C as
requested in issue #11. In particular, it now handles char [#], unsigned
char [#], and uint8_t [#].
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.
This commit adds a function named Sdump which works exactly like Dump and
Fdump except it returns the formatted output as a string. This serves the
same purpose as the the Sprint* family of functions.
The name indent better describes the function. This also will help
differentiate the function from planned functions that are intended to
perform padding for the purposes of aligning fields, types, and values.
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.