lint util.js and src/node.js

This commit is contained in:
Ryan Dahl 2010-12-02 12:11:23 -08:00
parent 7c57eb2aec
commit 558e5ba2b0
3 changed files with 612 additions and 582 deletions

View File

@ -130,11 +130,8 @@ bench-idle:
sleep 1 sleep 1
./node benchmark/idle_clients.js & ./node benchmark/idle_clients.js &
GJSLINT = PYTHONPATH=tools/closure_linter/ \
python tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc
jslint: jslint:
$(GJSLINT) -r lib/ -r src/ -r test/ PYTHONPATH=tools/closure_linter/ python tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ -r test/
cpplint: cpplint:
@python tools/cpplint.py $(wildcard src/*.cc src/*.h src/*.c) @python tools/cpplint.py $(wildcard src/*.cc src/*.h src/*.c)

View File

@ -31,7 +31,7 @@ var error = exports.error = function(x) {
* Echos the value of a value. Trys to print the value out * Echos the value of a value. Trys to print the value out
* in the best way possible given the different types. * in the best way possible given the different types.
* *
* @param {Object} value The object to print out. * @param {Object} obj The object to print out.
* @param {Boolean} showHidden Flag that shows hidden (not enumerable) * @param {Boolean} showHidden Flag that shows hidden (not enumerable)
* properties of objects. * properties of objects.
* @param {Number} depth Depth in which to descend in object. Default is 2. * @param {Number} depth Depth in which to descend in object. Default is 2.
@ -43,30 +43,32 @@ exports.inspect = function(obj, showHidden, depth, colors) {
var stylize = function(str, styleType) { var stylize = function(str, styleType) {
// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
var styles = { 'bold' : [1, 22] var styles =
, 'italic' : [3, 23] { 'bold' : [1, 22],
, 'underline' : [4, 24] 'italic' : [3, 23],
, 'inverse' : [7, 27] 'underline' : [4, 24],
, 'white' : [37, 39] 'inverse' : [7, 27],
, 'grey' : [90, 39] 'white' : [37, 39],
, 'black' : [30, 39] 'grey' : [90, 39],
, 'blue' : [34, 39] 'black' : [30, 39],
, 'cyan' : [36, 39] 'blue' : [34, 39],
, 'green' : [32, 39] 'cyan' : [36, 39],
, 'magenta' : [35, 39] 'green' : [32, 39],
, 'red' : [31, 39] 'magenta' : [35, 39],
, 'yellow' : [33, 39] 'red' : [31, 39],
}; 'yellow' : [33, 39] };
var style = { 'special': 'grey'
, 'number': 'blue' var style =
, 'boolean': 'blue' { 'special': 'grey',
, 'undefined': 'red' 'number': 'blue',
, 'null': 'red' 'boolean': 'blue',
, 'string': 'green' 'undefined': 'red',
, 'date': 'magenta' 'null': 'red',
//, "name": intentionally not styling 'string': 'green',
, 'regexp': 'cyan' 'date': 'magenta',
}[styleType]; // "name": intentionally not styling
'regexp': 'cyan' }[styleType];
if (style) { if (style) {
return '\033[' + styles[style][0] + 'm' + str + return '\033[' + styles[style][0] + 'm' + str +
'\033[' + styles[style][1] + 'm'; '\033[' + styles[style][1] + 'm';
@ -91,14 +93,20 @@ exports.inspect = function(obj, showHidden, depth, colors) {
// Primitive types cannot have properties // Primitive types cannot have properties
switch (typeof value) { switch (typeof value) {
case 'undefined': return stylize('undefined', 'undefined'); case 'undefined':
case 'string': return stylize( return stylize('undefined', 'undefined');
JSON.stringify(value).replace(/'/g, "\\'")
.replace(/\\"/g, '"') case 'string':
.replace(/(^"|"$)/g, "'"), var simple = JSON.stringify(value).replace(/'/g, "\\'")
'string'); .replace(/\\"/g, '"')
case 'number': return stylize('' + value, 'number'); .replace(/(^"|"$)/g, "'");
case 'boolean': return stylize('' + value, 'boolean'); return stylize(simple, 'string');
case 'number':
return stylize('' + value, 'number');
case 'boolean':
return stylize('' + value, 'boolean');
} }
// For some reason typeof null is "object", so special case here. // For some reason typeof null is "object", so special case here.
if (value === null) { if (value === null) {
@ -114,13 +122,14 @@ exports.inspect = function(obj, showHidden, depth, colors) {
if (isRegExp(value)) { if (isRegExp(value)) {
return stylize('' + value, 'regexp'); return stylize('' + value, 'regexp');
} else { } else {
return stylize('[Function' + (value.name ? ': ' + value.name : '') + ']', 'special'); var name = value.name ? ': ' + value.name : '';
return stylize('[Function' + name + ']', 'special');
} }
} }
// Dates without properties can be shortcutted // Dates without properties can be shortcutted
if (isDate(value) && keys.length === 0) { if (isDate(value) && keys.length === 0) {
return stylize(value.toUTCString(), 'date'); return stylize(value.toUTCString(), 'date');
} }
var base, type, braces; var base, type, braces;
@ -135,7 +144,8 @@ exports.inspect = function(obj, showHidden, depth, colors) {
// Make functions say that they are functions // Make functions say that they are functions
if (typeof value === 'function') { if (typeof value === 'function') {
base = (isRegExp(value)) ? ' ' + value : ' [Function' + (value.name ? ': ' + value.name : '') + ']'; var n = value.name ? ': ' + value.name : '';
base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']';
} else { } else {
base = ''; base = '';
} }
@ -222,20 +232,18 @@ exports.inspect = function(obj, showHidden, depth, colors) {
var numLinesEst = 0; var numLinesEst = 0;
var length = output.reduce(function(prev, cur) { var length = output.reduce(function(prev, cur) {
numLinesEst++; numLinesEst++;
if (cur.indexOf('\n') >= 0) { if (cur.indexOf('\n') >= 0) numLinesEst++;
numLinesEst++; return prev + cur.length + 1;
} }, 0);
return prev + cur.length + 1;
},0);
if (length > (require('readline').columns || 50)) { if (length > (require('readline').columns || 50)) {
output = braces[0] output = braces[0] +
+ (base === '' ? '' : base + '\n ') (base === '' ? '' : base + '\n ') +
+ ' ' ' ' +
+ output.join(',\n ') output.join(',\n ') +
+ ' ' ' ' +
+ braces[1]; braces[1];
} else { } else {
output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
@ -248,21 +256,22 @@ exports.inspect = function(obj, showHidden, depth, colors) {
function isArray(ar) { function isArray(ar) {
return ar instanceof Array return ar instanceof Array ||
|| Array.isArray(ar) Array.isArray(ar) ||
|| (ar && ar !== Object.prototype && isArray(ar.__proto__)); (ar && ar !== Object.prototype && isArray(ar.__proto__));
} }
function isRegExp(re) { function isRegExp(re) {
var s = ''+ re; var s = '' + re;
return re instanceof RegExp // easy case return re instanceof RegExp || // easy case
|| typeof(re) === 'function' // duck-type for context-switching evalcx case // duck-type for context-switching evalcx case
&& re.constructor.name === 'RegExp' typeof(re) === 'function' &&
&& re.compile re.constructor.name === 'RegExp' &&
&& re.test re.compile &&
&& re.exec re.test &&
&& s.match(/^\/.*\/[gim]{0,3}$/); re.exec &&
s.match(/^\/.*\/[gim]{0,3}$/);
} }
@ -279,7 +288,8 @@ var pWarning;
exports.p = function() { exports.p = function() {
if (!pWarning) { if (!pWarning) {
pWarning = 'util.p will be removed in future versions of Node. Use util.puts(util.inspect()) instead.\n'; pWarning = 'util.p will be removed in future versions of Node. ' +
'Use util.puts(util.inspect()) instead.\n';
exports.error(pWarning); exports.error(pWarning);
} }
for (var i = 0, len = arguments.length; i < len; ++i) { for (var i = 0, len = arguments.length; i < len; ++i) {
@ -293,15 +303,16 @@ function pad(n) {
} }
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
'Oct', 'Nov', 'Dec'];
// 26 Feb 16:19:34 // 26 Feb 16:19:34
function timestamp() { function timestamp() {
var d = new Date(); var d = new Date();
return [d.getDate() var time = [pad(d.getHours()),
, months[d.getMonth()] pad(d.getMinutes()),
, [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':') pad(d.getSeconds())].join(':');
].join(' '); return [d.getDate(), months[d.getMonth()], time].join(' ');
} }
@ -313,7 +324,8 @@ exports.log = function(msg) {
var execWarning; var execWarning;
exports.exec = function() { exports.exec = function() {
if (!execWarning) { if (!execWarning) {
execWarning = 'util.exec has moved to the "child_process" module. Please update your source code.'; execWarning = 'util.exec has moved to the "child_process" module.' +
' Please update your source code.';
error(execWarning); error(execWarning);
} }
return require('child_process').exec.apply(this, arguments); return require('child_process').exec.apply(this, arguments);
@ -330,8 +342,13 @@ exports.pump = function(readStream, writeStream, callback) {
} }
} }
if (!readStream.pause) readStream.pause = function() {readStream.emit('pause');}; if (!readStream.pause) {
if (!readStream.resume) readStream.resume = function() {readStream.emit('resume');}; readStream.pause = function() {readStream.emit('pause');};
}
if (!readStream.resume) {
readStream.resume = function() {readStream.emit('resume');};
}
readStream.addListener('data', function(chunk) { readStream.addListener('data', function(chunk) {
if (writeStream.write(chunk) === false) readStream.pause(); if (writeStream.write(chunk) === false) readStream.pause();
@ -368,6 +385,7 @@ exports.pump = function(readStream, writeStream, callback) {
}); });
}; };
/** /**
* Inherit the prototype methods from one constructor into another. * Inherit the prototype methods from one constructor into another.
* *
@ -382,11 +400,8 @@ exports.pump = function(readStream, writeStream, callback) {
* @param {function} superCtor Constructor function to inherit prototype from. * @param {function} superCtor Constructor function to inherit prototype from.
*/ */
exports.inherits = function(ctor, superCtor) { exports.inherits = function(ctor, superCtor) {
ctor.super_ = superCtor; ctor.super_ = superCtor;
ctor.prototype = Object.create(superCtor.prototype, { ctor.prototype = Object.create(superCtor.prototype, {
constructor: { constructor: { value: ctor, enumerable: false }
value: ctor, });
enumerable: false
}
});
}; };

File diff suppressed because it is too large Load Diff