summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spew/config.go3
-rw-r--r--spew/dump.go20
2 files changed, 6 insertions, 17 deletions
diff --git a/spew/config.go b/spew/config.go
index 1faca1b..d766dfb 100644
--- a/spew/config.go
+++ b/spew/config.go
@@ -77,7 +77,8 @@ type ConfigState struct {
// SortKeys specifies map keys should be sorted before being printed. Use
// this to have a more deterministic, diffable output. Note that only
// native types (bool, int, uint, floats, uintptr and string) are supported,
- // other key sequences will displayed in the original order.
+ // other types will be sort according to the reflect.Value.String() output
+ // which guarantees display stability.
SortKeys bool
}
diff --git a/spew/dump.go b/spew/dump.go
index c06750d..771b473 100644
--- a/spew/dump.go
+++ b/spew/dump.go
@@ -269,29 +269,17 @@ func (s *valuesSorter) Less(i, j int) bool {
case reflect.Uintptr:
return s.values[i].UnsafeAddr() < s.values[j].UnsafeAddr()
}
- panic("notimplemented")
+ return s.values[i].String() < s.values[j].String()
}
// Generic sort function for native types: int, uint, bool, string and uintptr.
-// Other inputs are left unchanged.
+// Other inputs are sort according to their Value.String() value to ensure
+// display stability.
func SortValues(values []reflect.Value) {
if len(values) == 0 {
return
}
- switch values[0].Kind() {
- case reflect.Bool:
- sort.Sort(&valuesSorter{values})
- case reflect.Float32, reflect.Float64:
- sort.Sort(&valuesSorter{values})
- case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:
- sort.Sort(&valuesSorter{values})
- case reflect.String:
- sort.Sort(&valuesSorter{values})
- case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:
- sort.Sort(&valuesSorter{values})
- case reflect.Uintptr:
- sort.Sort(&valuesSorter{values})
- }
+ sort.Sort(&valuesSorter{values})
}
// dump is the main workhorse for dumping a value. It uses the passed reflect