repl: preserve preview on ESCAPE key press

Fix: #46876
PR-URL: https://github.com/nodejs/node/pull/46878
Fixes: https://github.com/nodejs/node/issues/46876
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
Xuguang Mei
2023-03-16 11:24:23 +08:00
committed by GitHub
parent 2fc6e03bfa
commit 2566400aa2
3 changed files with 25 additions and 6 deletions

View File

@@ -363,7 +363,7 @@ function setupPreview(repl, contextSymbol, bufferSymbol, active) {
}, () => callback(new ERR_INSPECTOR_NOT_AVAILABLE()));
}
const showPreview = () => {
const showPreview = (showCompletion = true) => {
// Prevent duplicated previews after a refresh.
if (inputPreview !== null || !repl.isCompletionEnabled) {
return;
@@ -379,8 +379,10 @@ function setupPreview(repl, contextSymbol, bufferSymbol, active) {
hasCompletions = false;
// Add the autocompletion preview.
const insertPreview = false;
showCompletionPreview(repl.line, insertPreview);
if (showCompletion) {
const insertPreview = false;
showCompletionPreview(repl.line, insertPreview);
}
// Do not preview if the command is buffered.
if (repl[bufferSymbol]) {

View File

@@ -993,9 +993,8 @@ function REPLServer(prompt,
clearPreview(key);
if (!reverseSearch(d, key)) {
ttyWrite(d, key);
if (key.name !== 'escape') {
showPreview();
}
const showCompletionPreview = key.name !== 'escape';
showPreview(showCompletionPreview);
}
return;
}

View File

@@ -614,6 +614,24 @@ const tests = [
],
clean: false
},
{
// Test that preview should not be removed when pressing ESCAPE key
env: { NODE_REPL_HISTORY: defaultHistoryPath },
skip: !process.features.inspector,
test: [
'1+1',
ESCAPE,
ENTER,
],
expected: [
prompt, ...'1+1',
'\n// 2',
'\n// 2',
'2\n',
prompt,
],
clean: false
},
];
const numtests = tests.length;