It would be helpful if Prism have an API that works like this. ~~~ruby Prism.parse('1 + [').input_continuable? #=> true Prism.parse('1 + ]').input_continuable? #=> false Prism.parse('tap do').input_continuable? #=> true Prism.parse('end.tap do').input_continuable? #=> false ~~~ Some other naming idea: `end_of_input_error?` `error_recoverable?` ## Background When IRB receives `end[ENTER]`, IRB immediately evaluates it because `"end\n" + code` is always syntax invalid. ~~~ruby irb(main):001> end (irb):1: syntax error found (SyntaxError) ~~~ When IRB receives `tap do[ENTER]`, IRB waits for the next line input because `"tap do\n" + code` can be syntax valid. ~~~ruby irb(main):001> tap do irb(main):002> ~~~ Both `end` and `tap do` are syntax invalid code. IRB needs to distinguish these two type of syntax errors. IRB currently uses `SyntaxError#message` and regexps. This check logic is fragile. Implementation in IRB: https://github.com/ruby/irb/blob/8b63f05160aa90e0205cf392b10cb85d6ecfa9a3/lib/irb/ruby-lex.rb#L229-L276