diff options
author | Felix Lange <fjl@twurst.com> | 2015-08-16 06:56:05 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2015-08-16 07:35:00 +0800 |
commit | 1086e2f298215cb0d4973a2c10ae9c9c8fd38462 (patch) | |
tree | 038126a1af7b63c88b6c5f927d7ef73fb31d84c9 /jsre/pretty.go | |
parent | 49703bea0aac8c06856a506b35bccf30cf0c2520 (diff) | |
download | go-tangerine-1086e2f298215cb0d4973a2c10ae9c9c8fd38462.tar.gz go-tangerine-1086e2f298215cb0d4973a2c10ae9c9c8fd38462.tar.zst go-tangerine-1086e2f298215cb0d4973a2c10ae9c9c8fd38462.zip |
jsre: fix annoying indentation when printing arrays of objects
The pretty printer, dumb as it is, printed arrays of objects as
[{
...
}]
With this change, they now print as:
[{
...
}]
Diffstat (limited to 'jsre/pretty.go')
-rw-r--r-- | jsre/pretty.go | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/jsre/pretty.go b/jsre/pretty.go index 7300a5f37..99aa9b33e 100644 --- a/jsre/pretty.go +++ b/jsre/pretty.go @@ -51,7 +51,7 @@ var boringKeys = map[string]bool{ // prettyPrint writes value to standard output. func prettyPrint(vm *otto.Otto, value otto.Value) { - ppctx{vm}.printValue(value, 0) + ppctx{vm}.printValue(value, 0, false) } func prettyPrintJS(call otto.FunctionCall) otto.Value { @@ -68,10 +68,10 @@ func (ctx ppctx) indent(level int) string { return strings.Repeat(indentString, level) } -func (ctx ppctx) printValue(v otto.Value, level int) { +func (ctx ppctx) printValue(v otto.Value, level int, inArray bool) { switch { case v.IsObject(): - ctx.printObject(v.Object(), level) + ctx.printObject(v.Object(), level, inArray) case v.IsNull(): specialColor.Print("null") case v.IsUndefined(): @@ -92,7 +92,7 @@ func (ctx ppctx) printValue(v otto.Value, level int) { } } -func (ctx ppctx) printObject(obj *otto.Object, level int) { +func (ctx ppctx) printObject(obj *otto.Object, level int, inArray bool) { switch obj.Class() { case "Array": lv, _ := obj.Get("length") @@ -109,7 +109,7 @@ func (ctx ppctx) printObject(obj *otto.Object, level int) { for i := int64(0); i < len; i++ { el, err := obj.Get(strconv.FormatInt(i, 10)) if err == nil { - ctx.printValue(el, level+1) + ctx.printValue(el, level+1, true) } if i < len-1 { fmt.Printf(", ") @@ -137,12 +137,15 @@ func (ctx ppctx) printObject(obj *otto.Object, level int) { for i, k := range keys { v, _ := obj.Get(k) fmt.Printf("%s%s: ", ctx.indent(level+1), k) - ctx.printValue(v, level+1) + ctx.printValue(v, level+1, false) if i < len(keys)-1 { fmt.Printf(",") } fmt.Println() } + if inArray { + level-- + } fmt.Printf("%s}", ctx.indent(level)) case "Function": |