Merge pull request #1667 from fjl/pretty-printer-improvements
jsre: pretty printer improvements
This commit is contained in:
		| @@ -66,6 +66,7 @@ func New(assetPath string) *JSRE { | |||||||
| 	re.loopWg.Add(1) | 	re.loopWg.Add(1) | ||||||
| 	go re.runEventLoop() | 	go re.runEventLoop() | ||||||
| 	re.Set("loadScript", re.loadScript) | 	re.Set("loadScript", re.loadScript) | ||||||
|  | 	re.Set("inspect", prettyPrintJS) | ||||||
| 	return re | 	return re | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -51,7 +51,15 @@ var boringKeys = map[string]bool{ | |||||||
|  |  | ||||||
| // prettyPrint writes value to standard output. | // prettyPrint writes value to standard output. | ||||||
| func prettyPrint(vm *otto.Otto, value otto.Value) { | 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 { | ||||||
|  | 	for _, v := range call.ArgumentList { | ||||||
|  | 		prettyPrint(call.Otto, v) | ||||||
|  | 		fmt.Println() | ||||||
|  | 	} | ||||||
|  | 	return otto.UndefinedValue() | ||||||
| } | } | ||||||
|  |  | ||||||
| type ppctx struct{ vm *otto.Otto } | type ppctx struct{ vm *otto.Otto } | ||||||
| @@ -60,10 +68,10 @@ func (ctx ppctx) indent(level int) string { | |||||||
| 	return strings.Repeat(indentString, level) | 	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 { | 	switch { | ||||||
| 	case v.IsObject(): | 	case v.IsObject(): | ||||||
| 		ctx.printObject(v.Object(), level) | 		ctx.printObject(v.Object(), level, inArray) | ||||||
| 	case v.IsNull(): | 	case v.IsNull(): | ||||||
| 		specialColor.Print("null") | 		specialColor.Print("null") | ||||||
| 	case v.IsUndefined(): | 	case v.IsUndefined(): | ||||||
| @@ -84,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() { | 	switch obj.Class() { | ||||||
| 	case "Array": | 	case "Array": | ||||||
| 		lv, _ := obj.Get("length") | 		lv, _ := obj.Get("length") | ||||||
| @@ -101,7 +109,7 @@ func (ctx ppctx) printObject(obj *otto.Object, level int) { | |||||||
| 		for i := int64(0); i < len; i++ { | 		for i := int64(0); i < len; i++ { | ||||||
| 			el, err := obj.Get(strconv.FormatInt(i, 10)) | 			el, err := obj.Get(strconv.FormatInt(i, 10)) | ||||||
| 			if err == nil { | 			if err == nil { | ||||||
| 				ctx.printValue(el, level+1) | 				ctx.printValue(el, level+1, true) | ||||||
| 			} | 			} | ||||||
| 			if i < len-1 { | 			if i < len-1 { | ||||||
| 				fmt.Printf(", ") | 				fmt.Printf(", ") | ||||||
| @@ -129,12 +137,15 @@ func (ctx ppctx) printObject(obj *otto.Object, level int) { | |||||||
| 		for i, k := range keys { | 		for i, k := range keys { | ||||||
| 			v, _ := obj.Get(k) | 			v, _ := obj.Get(k) | ||||||
| 			fmt.Printf("%s%s: ", ctx.indent(level+1), 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 { | 			if i < len(keys)-1 { | ||||||
| 				fmt.Printf(",") | 				fmt.Printf(",") | ||||||
| 			} | 			} | ||||||
| 			fmt.Println() | 			fmt.Println() | ||||||
| 		} | 		} | ||||||
|  | 		if inArray { | ||||||
|  | 			level-- | ||||||
|  | 		} | ||||||
| 		fmt.Printf("%s}", ctx.indent(level)) | 		fmt.Printf("%s}", ctx.indent(level)) | ||||||
|  |  | ||||||
| 	case "Function": | 	case "Function": | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user