Skip to content

Commit

Permalink
utter: fix local package removal logic
Browse files Browse the repository at this point in the history
  • Loading branch information
kortschak committed Jan 6, 2022
1 parent 40e9ce8 commit 77f612f
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
1 change: 0 additions & 1 deletion common.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,6 @@ var (
ampersandBytes = []byte("&")
colonSpaceBytes = []byte(": ")
spaceBytes = []byte(" ")
dotBytes = []byte(".")
openParenBytes = []byte("(")
closeParenBytes = []byte(")")
nilBytes = []byte("nil")
Expand Down
27 changes: 22 additions & 5 deletions dump.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,17 +146,16 @@ func (d *dumpState) dumpPtr(v reflect.Value) {
var typeBytes []byte
if displayed {
d.w.Write(openParenBytes)
typeBytes = []byte(strings.TrimPrefix(orig.Type().String(), d.cs.LocalPackage))
typeBytes = []byte(typeString(orig.Type(), d.cs.LocalPackage))
} else {
d.w.Write(bytes.Repeat(ampersandBytes, indirects))
typeBytes = []byte(strings.TrimPrefix(v.Type().String(), d.cs.LocalPackage))
typeBytes = []byte(typeString(v.Type(), d.cs.LocalPackage))
}
kind := v.Kind()
bufferedChan := kind == reflect.Chan && v.Cap() != 0
if kind == reflect.Ptr || bufferedChan {
d.w.Write(openParenBytes)
}
typeBytes = bytes.TrimPrefix(typeBytes, dotBytes)
d.w.Write(bytes.ReplaceAll(typeBytes, interfaceTypeBytes, interfaceBytes))
if displayed {
d.w.Write(closeParenBytes)
Expand Down Expand Up @@ -377,8 +376,7 @@ func (d *dumpState) dump(v reflect.Value, wasPtr, static, canElideCompound bool,
if bufferedChan {
d.w.Write(openParenBytes)
}
typeBytes := []byte(strings.TrimPrefix(v.Type().String(), d.cs.LocalPackage))
typeBytes = bytes.TrimPrefix(typeBytes, dotBytes)
typeBytes := []byte(typeString(v.Type(), d.cs.LocalPackage))
d.w.Write(bytes.ReplaceAll(typeBytes, interfaceTypeBytes, interfaceBytes))
if bufferedChan {
switch len := v.Len(); len {
Expand Down Expand Up @@ -587,6 +585,25 @@ func (d *dumpState) dump(v reflect.Value, wasPtr, static, canElideCompound bool,
}
}

// typeString returns the string representation of the reflect.Type with the local
// package selector removed.
func typeString(typ reflect.Type, local string) string {
switch typ.Kind() {
case reflect.Ptr:
return "*" + strings.TrimPrefix(strings.TrimPrefix(strings.TrimPrefix(typ.String(), "*"), local), ".")
case reflect.Array:
return fmt.Sprintf("[%d]%s", typ.Len(), typeString(typ.Elem(), local))
case reflect.Chan:
return fmt.Sprintf("%s %s", typ.ChanDir(), typeString(typ.Elem(), local))
case reflect.Map:
return fmt.Sprintf("map[%s]%s", typeString(typ.Key(), local), typeString(typ.Elem(), local))
case reflect.Slice:
return fmt.Sprintf("[]%s", typeString(typ.Elem(), local))
default:
return strings.TrimPrefix(strings.TrimPrefix(typ.String(), local), ".")
}
}

// isDefault returns whether the type is a default type absent of context.
func isDefault(typ reflect.Type) bool {
if typ.PkgPath() != "" || typ.Name() == "" {
Expand Down
15 changes: 15 additions & 0 deletions spew_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,21 @@ func initSpewTests() {
{elideLocalDefault, fCSFdump, Foo{Bar{flag: 1}, map[interface{}]interface{}{"one": true}},
"Foo{\n unexportedField: Bar{\n flag: Flag(1),\n data: uintptr(0),\n },\n ExportedField: map[interface{}]interface{}{\n string(\"one\"): bool(true),\n },\n}\n",
},
{elideLocalDefault, fCSFdump, map[cs]cs{{}: {}},
"map[cs]cs{\n cs{\n cs: (*cs)(nil),\n }: cs{\n cs: (*cs)(nil),\n },\n}\n",
},
{elideLocalDefault, fCSFdump, [2]cs{},
"[2]cs{\n cs{\n cs: (*cs)(nil),\n },\n cs{\n cs: (*cs)(nil),\n },\n}\n",
},
{elideLocalDefault, fCSFdump, []cs{{}},
"[]cs{\n cs{\n cs: (*cs)(nil),\n },\n}\n",
},
{elideLocalDefault, fCSFdump, chan cs(nil),
"chan cs(nil)\n",
},
{elideLocalDefault, fCSFdump, chan<- cs(nil),
"chan<- cs(nil)\n",
},
{elideTypeDefault, fCSFdump, float64(1), "1.0\n"},
{elideTypeDefault, fCSFdump, float32(1), "float32(1)\n"},
{elideTypeDefault, fCSFdump, int(1), "1\n"},
Expand Down

0 comments on commit 77f612f

Please sign in to comment.