aboutsummaryrefslogtreecommitdiffstats
path: root/internal
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-05-11 22:28:29 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-05-30 22:25:23 +0800
commit14ae5708d61059d424c9be9822b85a3f4bb392b3 (patch)
treed5d29a92448808718dac4b6ebd967480656dc7df /internal
parentffaf58f0a98bd987bbe76e8669bb22c405dcd62a (diff)
downloaddexon-14ae5708d61059d424c9be9822b85a3f4bb392b3.tar
dexon-14ae5708d61059d424c9be9822b85a3f4bb392b3.tar.gz
dexon-14ae5708d61059d424c9be9822b85a3f4bb392b3.tar.bz2
dexon-14ae5708d61059d424c9be9822b85a3f4bb392b3.tar.lz
dexon-14ae5708d61059d424c9be9822b85a3f4bb392b3.tar.xz
dexon-14ae5708d61059d424c9be9822b85a3f4bb392b3.tar.zst
dexon-14ae5708d61059d424c9be9822b85a3f4bb392b3.zip
console, internal/jsre: colorize JavaScript exceptions too
Diffstat (limited to 'internal')
-rw-r--r--internal/jsre/jsre.go4
-rw-r--r--internal/jsre/pretty.go18
2 files changed, 20 insertions, 2 deletions
diff --git a/internal/jsre/jsre.go b/internal/jsre/jsre.go
index 8d8f4fc2a..a95efd379 100644
--- a/internal/jsre/jsre.go
+++ b/internal/jsre/jsre.go
@@ -303,11 +303,11 @@ func (self *JSRE) Evaluate(code string, w io.Writer) error {
self.Do(func(vm *otto.Otto) {
val, err := vm.Run(code)
if err != nil {
- fail = err
+ prettyError(vm, err, w)
} else {
prettyPrint(vm, val, w)
- fmt.Fprintln(w)
}
+ fmt.Fprintln(w)
})
return fail
}
diff --git a/internal/jsre/pretty.go b/internal/jsre/pretty.go
index cf4bf2cf8..30d8660ff 100644
--- a/internal/jsre/pretty.go
+++ b/internal/jsre/pretty.go
@@ -37,6 +37,7 @@ var (
SpecialColor = color.New(color.Bold).SprintfFunc()
NumberColor = color.New(color.FgRed).SprintfFunc()
StringColor = color.New(color.FgGreen).SprintfFunc()
+ ErrorColor = color.New(color.FgHiRed).SprintfFunc()
)
// these fields are hidden when printing objects.
@@ -55,6 +56,23 @@ func prettyPrint(vm *otto.Otto, value otto.Value, w io.Writer) {
ppctx{vm: vm, w: w}.printValue(value, 0, false)
}
+// prettyError writes err to standard output.
+func prettyError(vm *otto.Otto, err error, w io.Writer) {
+ failure := err.Error()
+ if ottoErr, ok := err.(*otto.Error); ok {
+ failure = ottoErr.String()
+ }
+ fmt.Fprint(w, ErrorColor("%s", failure))
+}
+
+// jsErrorString adds a backtrace to errors generated by otto.
+func jsErrorString(err error) string {
+ if ottoErr, ok := err.(*otto.Error); ok {
+ return ottoErr.String()
+ }
+ return err.Error()
+}
+
func prettyPrintJS(call otto.FunctionCall, w io.Writer) otto.Value {
for _, v := range call.ArgumentList {
prettyPrint(call.Otto, v, w)