Skip to content

Commit fda49f2

Browse files
committed
Merge pull request #1213 from karalabe/polish-console-prettyprinter
jsre: patch up the pretty printer to have a decent look
2 parents c71ab2a + d6f4c51 commit fda49f2

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

jsre/pp_js.go

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,19 @@ function pp(object, indent) {
2626
} else if(typeof(object) === "object") {
2727
str += "{\n";
2828
indent += " ";
29-
var last = getFields(object).pop()
30-
getFields(object).forEach(function (k) {
31-
str += indent + k + ": ";
29+
30+
var fields = getFields(object);
31+
var last = fields[fields.length - 1];
32+
fields.forEach(function (key) {
33+
str += indent + key + ": ";
3234
try {
33-
str += pp(object[k], indent);
35+
str += pp(object[key], indent);
3436
} catch (e) {
3537
str += pp(e, indent);
3638
}
37-
38-
if(k !== last) {
39+
if(key !== last) {
3940
str += ",";
4041
}
41-
4242
str += "\n";
4343
});
4444
str += indent.substr(2, indent.length) + "}";
@@ -49,7 +49,7 @@ function pp(object, indent) {
4949
} else if(typeof(object) === "number") {
5050
str += "\033[31m" + object;
5151
} else if(typeof(object) === "function") {
52-
str += "\033[35m[Function]";
52+
str += "\033[35m" + object.toString().split(" {")[0];
5353
} else {
5454
str += object;
5555
}
@@ -70,15 +70,32 @@ var redundantFields = [
7070
];
7171
7272
var getFields = function (object) {
73-
var result = Object.getOwnPropertyNames(object);
73+
var members = Object.getOwnPropertyNames(object);
7474
if (object.constructor && object.constructor.prototype) {
75-
result = result.concat(Object.getOwnPropertyNames(object.constructor.prototype));
75+
members = members.concat(Object.getOwnPropertyNames(object.constructor.prototype));
7676
}
77-
return result.filter(function (field) {
77+
78+
var fields = members.filter(function (member) {
79+
return !isMemberFunction(object, member)
80+
}).sort()
81+
var funcs = members.filter(function (member) {
82+
return isMemberFunction(object, member)
83+
}).sort()
84+
85+
var results = fields.concat(funcs);
86+
return results.filter(function (field) {
7887
return redundantFields.indexOf(field) === -1;
7988
});
8089
};
8190
91+
var isMemberFunction = function(object, member) {
92+
try {
93+
return typeof(object[member]) === "function";
94+
} catch(e) {
95+
return false;
96+
}
97+
}
98+
8299
var isBigNumber = function (object) {
83100
return typeof BigNumber !== 'undefined' && object instanceof BigNumber;
84101
};

0 commit comments

Comments
 (0)