mirror of
https://github.com/nodejs/node.git
synced 2026-11-09 15:11:11 -05:00
repl: attach location info to syntax errors
Currently, when a file with a syntax error is imported in the REPL, no information is provided on the error's location. This commit adds the error's location to the stack trace. Refs: https://github.com/nodejs/node/issues/2762 Refs: https://github.com/nodejs/node/issues/3411 Refs: https://github.com/nodejs/node/issues/3784 PR-URL: https://github.com/nodejs/node/pull/4013 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit is contained in:
1 parent
e68ea16c32
commit
aaab108dfe
2 files changed
+40
No files matched your search
@@ -274,6 +274,7 @@ function REPLServer(prompt,
|
||||
self._domain.on('error', function(e) {
|
||||
debug('domain error');
|
||||
const top = replMap.get(self);
|
||||
util.decorateErrorStack(e);
|
||||
top.outputStream.write((e.stack || e) + '\n');
|
||||
top.lineParser.reset();
|
||||
top.bufferedCommand = '';
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
'use strict';
|
||||
|
||||
const common = require('../common');
|
||||
const assert = require('assert');
|
||||
const path = require('path');
|
||||
const repl = require('repl');
|
||||
const util = require('util');
|
||||
let found = false;
|
||||
|
||||
process.on('exit', () => {
|
||||
assert.strictEqual(found, true);
|
||||
});
|
||||
|
||||
// A stream to push an array into a REPL
|
||||
function ArrayStream() {
|
||||
this.run = function(data) {
|
||||
data.forEach(line => {
|
||||
this.emit('data', line + '\n');
|
||||
});
|
||||
};
|
||||
}
|
||||
util.inherits(ArrayStream, require('stream').Stream);
|
||||
ArrayStream.prototype.readable = true;
|
||||
ArrayStream.prototype.writable = true;
|
||||
ArrayStream.prototype.resume = function() {};
|
||||
ArrayStream.prototype.write = function(output) {
|
||||
if (/var foo bar;/.test(output))
|
||||
found = true;
|
||||
};
|
||||
|
||||
const putIn = new ArrayStream();
|
||||
const testMe = repl.start('', putIn);
|
||||
let file = path.resolve(__dirname, '../fixtures/syntax/bad_syntax');
|
||||
|
||||
if (common.isWindows)
|
||||
file = file.replace(/\\/g, '\\\\');
|
||||
|
||||
putIn.run(['.clear']);
|
||||
putIn.run([`require('${file}');`]);
|
||||
Reference in new issue
Block a user