Explorar el Código

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.
Patrick Mezard hace 12 años
padre
commit
8e1b34364f
Se han modificado 2 ficheros con 6 adiciones y 17 borrados
  1. 2 1
      spew/config.go
  2. 4 16
      spew/dump.go

+ 2 - 1
spew/config.go

@@ -77,7 +77,8 @@ type ConfigState struct {
 	// SortKeys specifies map keys should be sorted before being printed. Use
 	// SortKeys specifies map keys should be sorted before being printed. Use
 	// this to have a more deterministic, diffable output. Note that only
 	// this to have a more deterministic, diffable output. Note that only
 	// native types (bool, int, uint, floats, uintptr and string) are supported,
 	// 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
 	SortKeys bool
 }
 }
 
 

+ 4 - 16
spew/dump.go

@@ -269,29 +269,17 @@ func (s *valuesSorter) Less(i, j int) bool {
 	case reflect.Uintptr:
 	case reflect.Uintptr:
 		return s.values[i].UnsafeAddr() < s.values[j].UnsafeAddr()
 		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.
 // 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) {
 func SortValues(values []reflect.Value) {
 	if len(values) == 0 {
 	if len(values) == 0 {
 		return
 		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
 // dump is the main workhorse for dumping a value.  It uses the passed reflect