class RubyLex
def should_continue?(tokens)
def should_continue?(tokens) # Look at the last token and check if IRB need to continue reading next line. # Example code that should continue: `a\` `a +` `a.` # Trailing spaces, newline, comments are skipped return true if tokens.last&.event == :on_sp && tokens.last.tok == "\\\n" tokens.reverse_each do |token| case token.event when :on_sp, :on_nl, :on_ignored_nl, :on_comment, :on_embdoc_beg, :on_embdoc, :on_embdoc_end # Skip when :on_regexp_end, :on_heredoc_end, :on_semicolon # State is EXPR_BEG but should not continue return false else # Endless range should not continue return false if token.event == :on_op && token.tok.match?(/\A\.\.\.?\z/) # EXPR_DOT and most of the EXPR_BEG should continue return token.state.anybits?(Ripper::EXPR_BEG | Ripper::EXPR_DOT) end end false end