From eb42c1eb4f2502433a22c49ede9e657fb6cd86e0 Mon Sep 17 00:00:00 2001 From: Anto Aravinth Date: Sun, 18 Nov 2018 09:07:48 +0530 Subject: [PATCH] repl: handle buffered string logic on finish Looks like `clearBufferedCommand` will be called on almost all flows. Hence history was broken. PR-URL: https://github.com/nodejs/node/pull/24389 Fixes: https://github.com/nodejs/node/issues/24385 Reviewed-By: James M Snell Reviewed-By: Jeremiah Senkpiel --- lib/readline.js | 6 +++--- lib/repl.js | 8 +++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/readline.js b/lib/readline.js index f22d84f1a0df77..b293292d83770e 100644 --- a/lib/readline.js +++ b/lib/readline.js @@ -348,9 +348,9 @@ Interface.prototype.undoHistory = function() { // If it's a multiline code, then add history // accordingly. -Interface.prototype.multilineHistory = function() { - // check if we got a multiline code - if (this.multiline !== '' && this.terminal) { +Interface.prototype.multilineHistory = function(clearBuffer) { + // if not clear buffer, add multiline history + if (!clearBuffer && this.terminal) { const dupIndex = this.history.indexOf(this.multiline); if (dupIndex !== -1) this.history.splice(dupIndex, 1); // Remove the last entered line as multiline diff --git a/lib/repl.js b/lib/repl.js index cd341978cb6f71..5dbd02fd231cd1 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -667,6 +667,13 @@ function REPLServer(prompt, } } + // handle multiline history + if (self[kBufferedCommandSymbol].length) + REPLServer.super_.prototype.multilineHistory.call(self, false); + else { + REPLServer.super_.prototype.multilineHistory.call(self, true); + } + // Clear buffer if no SyntaxErrors self.clearBufferedCommand(); sawCtrlD = false; @@ -773,7 +780,6 @@ exports.start = function(prompt, REPLServer.prototype.clearBufferedCommand = function clearBufferedCommand() { this[kBufferedCommandSymbol] = ''; - REPLServer.super_.prototype.multilineHistory.call(this); }; REPLServer.prototype.close = function close() {