Commit Graph

10 Commits

Author SHA1 Message Date
David Hill 9fadf46324 travis: Use gometalinter 2017-07-11 11:24:36 -05:00
Dave Collins 8aeb47a9ec Update license copyright years.
Several files had been updated since the listed years.  This updates
them accordingly.
2016-10-29 15:38:27 -05:00
Dave Collins 2df174808e Add support for limited mode without unsafe pkg.
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.
2015-06-19 15:29:34 -05:00
Tim Hockin 3e6e67c4dc Enable methods to sort map keys and spew itself as last resort
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.
2015-04-10 08:46:42 -07:00
Dave Collins 128854244a Add logic to deal with reflect pkg changes on tip.
This commit adds logic to gracefully handle the new internal reflect.Value
structure on tip as of golang commit 82f48826c6c7 as well as the internal
reflect.Value flag bit changes as of golang commit 90a7c3c86944.

It accomplishes this by doing some inspection at init time and choosing
the appropriate offsets and flag positions accordingly.  There was some
previous logic which dealt with a similar issue for golang commit
ecccf07e7f9d.  However, since the more recent commits essentially reverted
the change and also modify the flag bit positions, it made more sense to
rework the detection logic.  In particular, the new logic examines the
size of the reflect.Value struct to determine the difference and extracts
the kind from the flags to determine if the flags have been changed.

As a result, this commit allows spew to work properly with tip all the
back to Go 1.0.
2014-10-24 18:49:38 -05:00
Dave Collins 65ca732a33 Add logic to deal with reflect pkg changes on tip.
This commit adds logic to gracefully handle the new internal reflect.Value
structure on tip as of golang commit ecccf07e7f9d.  It accomplishes this
by doing some inspection at init time and choosing the appropriate offsets
as well as modifying which offset is used for the value accordingly.  As a
result, this allows spew to work properly with both the current release
version of Go as well as tip.

Fixes #15.
2014-01-08 02:01:15 -06:00
Dave Collins de6d1a24a0 Reorganize the new map key sorting functionality.
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.
2013-11-14 21:39:21 -06:00
Dave Collins 2fc049e83c Add tests for unrecognized reflect values.
In order to help future proof itself, spew handles unrecognized reflect
values by passing them on to the standard fmt library.  Since spew handles
all current reflect values in the language, this condition has to be
manually tested with a bit of hackery by using unsafe to change the kind
to a nonexistent value.

As of this commit, there is now 100% test coverage.
2013-01-20 22:31:09 -06:00
Dave Collins 3b5249e43e Consolidate tests for invalid reflect values. 2013-01-20 22:24:52 -06:00
Dave Collins 23b797ffdf Add tests for invalid reflect values. 2013-01-20 20:48:14 -06:00