From 1086e2f298215cb0d4973a2c10ae9c9c8fd38462 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sat, 15 Aug 2015 23:56:05 +0100 Subject: [PATCH] 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: [{ ... }] --- jsre/pretty.go | 15 +++++++++------ 1 file 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":