Эх сурвалжийг харах

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:

  [{
    ...
  }]
Felix Lange 10 жил өмнө
parent
commit
1086e2f298
1 өөрчлөгдсөн 9 нэмэгдсэн , 6 устгасан
  1. 9 6
      jsre/pretty.go

+ 9 - 6
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":