Commit Graph

85 Commits

Author SHA1 Message Date
Dave Collins 6d212800a4 Deprecate "disableunsafe" tag in favor of "safe".
This adds a new build tag named "safe" which serves the exact same
purpose as the current "disableunsafe" tag.  This is being done, as
recommended by @shurcooL, since it is emerging as the standard way to do
it in several high profile packages, it mirrors the "unsafe" package
nicely, it is shorter, and users generally seem to prefer it.

However, to avoid breaking existing infrastructure, the disableunsafe
tag is still available and simply is being deprecated.
2016-09-07 12:06:01 -05:00
Jonathan Hall 66f99a29a0 Disable unsafe for GopherJS compiler.
* Disable unsafe for GopherJS compiler.
* Update comments to reflect GopherJS build constraints
2016-09-07 11:16:42 -05:00
David Hill 6cf5744a04 Update Travis to test multiple golang versions. 2016-08-16 12:40:47 -05:00
Dave Collins 5215b55f46 Add logic to deal with reflect pkg changes on tip.
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.
2015-11-05 15:13:17 -06: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
Anaminus a4b53deb9b Add support for sorting keys that are arrays. 2015-02-23 15:16:52 -06:00
deads2k 1aaf839fb0 make nil maps appear different than empty maps 2015-01-19 11:34:19 -05:00
Dave Collins 83f84dc933 Improve unsafe reflect value handling.
This commit modifies the unsafeReflectValue function to recognize
reference types even when the indirection flag is not set for the series
of golang commits after ecccf07e7f9d and before 82f48826c6c7 which
introduced the additional scalar field in the reflect.Value struct.  That
additional field has since been removed, but the intention of this code is
to work properly across all Go versions and other packages make use of the
logic.

Thanks to @shurcooL for providing example code which wasn't working
properly with the function when it was exported and therefore being called
in ways which spew itself does not.
2014-11-15 20:01:10 -06: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
Josh Rickmar 3fdaf5cea8 Dump non-zero len and cap for applicable types.
Closes #16.
2014-05-05 22:39:05 -05:00
Dave Collins 110c37a4d1 Update TravisCI to use Go 1.2.
Also fix a comment typo in doc.go under the custom formatter section.
2014-03-27 04:46:40 -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
Patrick Mezard 264fa19def tests: fix TestSortValues on 32-bits platforms
reflect.DeepEqual fails when comparing reflect.Value containing float64. I
think it cannot make sense of reflect.Value pointer tricks and directly
compare reflect.Value.val fields which contain the float value in 64 bits,
but a pointer to the float in 32 bits.

Fortunately, interface{} which have a similar memory layout, compare correctly,
so we just turn the []reflect.Value into []interface{}.
2013-12-01 16:46:38 +01:00
Dave Collins 1a05ce86a9 Add SortKeys option to doco for NewDefaultConfig. 2013-11-16 20:45:52 -06:00
Dave Collins 550ce83cb9 Update README and doc.go with new SortKeys option. 2013-11-16 16:05:42 -06:00
Dave Collins 92b7ef315a Add additional tests for new sortValues code.
This brings the test coverage back to 100%.
2013-11-14 22:22:17 -06:00
Dave Collins 3b4a2055ce Correct valuesSorter.Less function for uintptr.
The function sort be sorting the uintptr itself, not the address of it.
Also, the previous code could easily panic on an unaddressable
reflect.Value since it was trying to take an address.
2013-11-14 22:03:41 -06:00
Dave Collins 67c401cf12 Reorder Less function cases to consistent order. 2013-11-14 21:53:06 -06:00
Dave Collins e0d93cdf8b Update imports for previous. 2013-11-14 21:46:27 -06:00
Dave Collins fab1d2b55f Move TestSortValues to common_test.go.
This commit moves the TestSortValues function from dump_test.go to
common_test.go to mirror the new implementation location.  It also
slightly formats the tests to be consistent with the rest of the package.
2013-11-14 21:44:13 -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 f0ba95e184 Fix a few style issues pointed out by golint. 2013-11-14 21:19:56 -06:00
Patrick Mezard 8e1b34364f dump: make SortKeys default to string representation instead of nothing
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.
2013-10-28 14:35:33 +01:00
Patrick Mezard 1fdf49f1b9 config: add SortKeys option to sort native map keys before display
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.
2013-10-27 23:44:49 +01:00
Dave Collins 56a83c905e Add tests for recent cgo handling updates.
This commit adds tests for the recent cgo handling of char, unsigned char,
and uint8_t arrays.

In addition, it adds an architecture for the cgo specific testing based on
build constraints.  This was done because spew itself does not require
cgo, but in order to test its handling of the cgo types it needs to be fed
cgo data.  Rather than force all users to have a system which supports cgo
and an external compiler just to run the tests, the cgo test support must
explicitly be turned on via a build tag.
2013-09-21 21:50:00 -05:00
Dave Collins a83f71796b Add better support for dumping cgo char arrays.
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 [#].
2013-09-21 21:43:56 -05:00
Dave Collins 8f603f64f9 Add tests for nil slice change.
This commit adds tests for the nil slice change.
2013-09-09 20:43:39 -05:00
Dave Collins 7ea732c827 Detect nil slices and print them as <nil>.
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.
2013-09-09 20:38:28 -05:00
Dave Collins 3bcb0679af Add tests for packed nil interfaces.
This commit adds tests for nil interfaces packed inside maps and slices to
test the recently added fix for issue #12.
2013-03-27 22:50:10 -05:00
Dave Collins 173295b96e Fix incorrect val display on packed nil interfaces.
This was reported by shurcooL as issue #12.
2013-03-27 22:50:09 -05:00
Dave Collins 691853c424 Update docs for new Sdump function. 2013-03-11 18:37:09 -05:00
Dave Collins 35ec0796c8 Add tests for new Sdump function.
This commit adds tests for the new Sdump function both at the package
level and as a part of a ConfigState.
2013-03-11 18:17:45 -05:00
Dave Collins 3a62f585a7 Add support for Sdump.
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.
2013-03-11 18:15:28 -05:00
Dave Collins 9b87fb3e12 Add byte slice to Dump example. 2013-03-08 22:45:50 -06:00
Dave Collins 096da7a702 Update docs for new byte array and slice behavior. 2013-03-08 22:45:02 -06:00
Dave Collins 8fb5bf1e06 Add tests for byte arrays and slices.
This commit adds tests for the new byte array and slice hexdump
functionality as specified in issue #9.
2013-03-08 22:21:05 -06:00
Dave Collins 70d81533ec Dump byte arrays and slices like hexdump -C.
This commit modifies the Dump family functions to output byte arrays and
slices like hexdump -C as specified in issue #9.
2013-03-08 22:15:12 -06:00
Dave Collins 471552e81e Modify printInt and printUint to accept base.
This paves the way to improve how byte arrays are output as well as
increases the flexibily of the functions.
2013-03-08 19:55:04 -06:00
Dave Collins 5cc287d265 Add tests for new ContinueOnMethod option. 2013-03-03 13:21:13 -06:00
Dave Collins 9dfc238865 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.
2013-03-03 12:59:13 -06:00
Thomas NJ Shadwell 6d6046a9de Re-added accidentally removed lines 2013-02-26 19:48:56 +00:00
Thomas NJ Shadwell f948516369 revert previous mis-commits, add ability to allow deeper pretty-printing after an error or Stringer interface is encountered. 2013-02-26 19:43:45 +00:00
Dave Collins 803b1997c4 Add tests for new Sprint* family functions.
This commit adds tests for the new Sprint, Sprintf, and Sprintln functions
at the package level and as part of a ConfigState.
2013-02-23 21:53:16 -06:00
Dave Collins ce74710920 Add support Sprint* family of functions.
This commit implements wrappers for the fmt.Sprint, fmt.Sprintf, and
fmt.Sprintln functions as requested in issue #7.
2013-02-23 21:33:01 -06:00
Dave Collins 17273f26d7 Fix a couple of comment typos. 2013-02-07 18:43:36 -06:00
Dave Collins 52f41f689f Rename pad function to indent.
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.
2013-02-03 01:35:24 -06:00
Dave Collins 333c720067 Update overview doc for correct verb/flag combos. 2013-02-02 01:14:34 -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