Skip to content

Conversation

@cola119
Copy link
Member

@cola119cola119 commented Jun 23, 2022

Fixes#43528. This PR fixes the REPL on editor mode crashing during tab completion.

The root cause of this issue is that commonPrefix could receive an empty array of completions because of #41632.

On editor mode, the completions are converted into the common prefix string in REPLServer.prototype.completeOnEditorModeL1603 (I'm not sure why this wrapper is needed). And then [kTabCompleter]() is called as a callback with the completion as its argument.

node/lib/repl.js

Lines 1596 to 1607 in 6f924ac

REPLServer.prototype.completeOnEditorMode=(callback)=>(err,results)=>{
if(err)returncallback(err);
const{0: completions,1: completeOn=''}=results;
letresult=ArrayPrototypeFilter(completions,Boolean);
if(completeOn&&result.length!==0){
result=[commonPrefix(result)];
}
callback(null,[result,completeOn]);
};

For example, the completions for a are ['async', 'await', 'Array', ...] (note that #41632 made REPL case-incentive) and their common prefix string is '' (the return value of commonPrefix(['async', 'await', 'Array', ...])).
This means the completions is [''] when [kTabCompleter]() is called, and commonPrefix([]) will be called at L670.

[kTabCompleter](lastKeypressWasTab,{0: completions,1: completeOn}){
// Result and the text that was completed.
if(!completions||completions.length===0){
return;
}
// If there is a common prefix to all matches, then apply that portion.
constprefix=commonPrefix(
ArrayPrototypeFilter(completions,(e)=>e!=='')
);

@nodejs-github-botnodejs-github-bot added needs-ci PRs that need a full CI run. readline Issues and PRs related to the built-in readline module. labels Jun 23, 2022
@aduh95aduh95 added author ready PRs that have at least one approval, no pending requests for changes, and a CI started. request-ci Add this label to start a Jenkins CI on a PR. labels Jun 27, 2022
@github-actionsgithub-actionsbot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jun 27, 2022
@nodejs-github-bot
Copy link
Collaborator

@ZYSzysZYSzys added commit-queue Add this label to land a pull request using GitHub Actions. and removed needs-ci PRs that need a full CI run. labels Jun 28, 2022
@nodejs-github-botnodejs-github-bot removed the commit-queue Add this label to land a pull request using GitHub Actions. label Jun 28, 2022
@nodejs-github-botnodejs-github-bot merged commit 593de05 into nodejs:mainJun 28, 2022
@nodejs-github-bot
Copy link
Collaborator

Landed in 593de05

targos pushed a commit that referenced this pull request Jul 12, 2022
PR-URL: #43543 Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Yongsheng Zhang <[email protected]> Reviewed-By: James M Snell <[email protected]>
@targostargos mentioned this pull request Jul 12, 2022
targos pushed a commit that referenced this pull request Jul 20, 2022
PR-URL: #43543 Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Yongsheng Zhang <[email protected]> Reviewed-By: James M Snell <[email protected]>
targos pushed a commit that referenced this pull request Jul 31, 2022
PR-URL: #43543 Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Yongsheng Zhang <[email protected]> Reviewed-By: James M Snell <[email protected]>
@targostargos mentioned this pull request Aug 3, 2022
guangwong pushed a commit to noslate-project/node that referenced this pull request Oct 10, 2022
PR-URL: nodejs/node#43543 Reviewed-By: Antoine du Hamel <[email protected]> Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: Yongsheng Zhang <[email protected]> Reviewed-By: James M Snell <[email protected]>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author readyPRs that have at least one approval, no pending requests for changes, and a CI started.readlineIssues and PRs related to the built-in readline module.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

REPL in editor mode crashes during tab completion

6 participants

@cola119@nodejs-github-bot@jasnell@tniessen@aduh95@ZYSzys