Skip to content

Commit

Permalink
better matching
Browse files Browse the repository at this point in the history
  • Loading branch information
E.Azer Koçulu committed Mar 14, 2014
1 parent f35b9d1 commit 6211d2a
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 15 deletions.
9 changes: 9 additions & 0 deletions example.js
@@ -0,0 +1,9 @@
var failingLine = require('./');

process.on('uncaughtException', function (error) {
console.log(failingLine(error));
});

if (true) {
hereIfail++;
}
32 changes: 25 additions & 7 deletions index.js
@@ -1,15 +1,33 @@
var find = require("findall");

module.exports = failingLine;

function failingLine (error, shift) {
var match = find(error.stack, /\(([^\(\)]+)\)/g);
if (!match) return undefined;
if (!error || !error.stack) return;

var index = 1;
if (shift) index += shift;

var fn, filename, line, col;
var stack = error.stack.split('\n')[index];
var match = stack.match(/at ([\w\.<>\[\]\s]+) \(([^:]+):(\d+):(\d+)/);

if (!match) {
match = stack.match(/at ([^:]+):(\d+):(\d+)/);
if (!match) return undefined;

match = match[0 + (shift || 0)].split(':');
filename = match[1];
line = Number(match[2]);
col = Number(match[3]);
} else {
fn = match[1];
filename = match[2];
line = Number(match[3]);
col = Number(match[4]);
}

return {
filename: match[0],
lineno: Number(match[1])
fn: fn,
filename: filename,
line: line,
col: col
};
}
5 changes: 1 addition & 4 deletions package.json
Expand Up @@ -20,8 +20,5 @@
"type": "git"
},
"author": "azer",
"license": "BSD",
"dependencies": {
"findall": "0.0.4"
}
"license": "BSD"
}
36 changes: 32 additions & 4 deletions test.js
Expand Up @@ -5,20 +5,48 @@ test('failing line', function (assert) {
var err = new Error('Hello World');
var ln = failingLine(err);

assert.plan(2);
assert.equal(ln.lineno, 5);
assert.plan(4);
assert.equal(ln.line, 5);
assert.equal(ln.filename, __filename);
assert.equal(ln.col, 13);
assert.equal(ln.fn, 'Test._cb');
});

test('shifting', function (assert) {
var err = fail();
var ln = failingLine(err, 1);

assert.plan(2);
assert.equal(ln.lineno, 14);
assert.plan(4);
assert.equal(ln.line, 16);
assert.equal(ln.filename, __filename);
assert.equal(ln.col, 13);
assert.ok(ln.fn);

function fail () {
return new Error('yo');
}
});

test('stack with no filenames', function (assert) {
var err = { stack: replStack.join('\n') };
var ln = failingLine(err);

assert.plan(4);
assert.notOk(ln.fn);
assert.equal(ln.filename, 'repl');
assert.equal(ln.line, 1);
assert.equal(ln.col, 17);

});

var replStack = ["Error: fooo",
" at repl:1:17",
" at REPLServer.self.eval (repl.js:110:21)",
" at Interface.<anonymous> (repl.js:239:12)",
" at Interface.EventEmitter.emit (events.js:95:17)",
" at Interface._onLine (readline.js:202:10)",
" at Interface._line (readline.js:531:8)",
" at Interface._ttyWrite (readline.js:760:14)",
" at ReadStream.onkeypress (readline.js:99:10)",
" at ReadStream.EventEmitter.emit (events.js:98:17)",
" at emitKey (readline.js:1095:12)"];

0 comments on commit 6211d2a

Please sign in to comment.