Feature #14683

IRB with Ripper

Added by aycabta (aycabta .) 8 days ago. Updated about 24 hours ago.

Target version:


I replaced lexical analyzer with Ripper. It's important for supporting new syntax.

I explain what I did.

Replace with Ripper

I talked with matz (Yukihiro Matsumoto) about it and I decided to use mirb of mruby as a reference.

The mirb uses compile error messages and token information such as token type and lex_state for that whether or not inputted code continues(and PROMPT_N). I used RubyVM::InstructionSequence#compile and Ripper for the same action.

ref. IRB#each_top_level_statement, IRB#lex and IRB#check_code_block

Continue(PROMPT_N), literal type(PROMPT_S), nesting level(%NNi)

IRB needs statuses of code snippets. nobu (Nobuyoshi Nakada) implemented it as Ripper's features at irb-ripper branch on GitHub.

I implemented by pure Ruby because I heard what nobu (Nobuyoshi Nakada) thinks pure Ruby implementation for it. I think that it's the best way for that Ripper keeps simple.

ref. IRB#process_continue, IRB#process_nesting_level, IRB#check_string_literal and IRB#process_literal_type

Erase --irb_debug option

Because this is just for pure Ruby lexical analyzer.

irb.patch (51.8 KB) irb.patch aycabta (aycabta .), 04/12/2018 03:06 PM


#2 [ruby-core:86534] Updated by hsbt (Hiroshi SHIBATA) 8 days ago

  • Assignee set to keiju (Keiju Ishitsuka)
  • Status changed from Open to Assigned

#3 [ruby-core:86615] Updated by keiju (Keiju Ishitsuka) about 24 hours ago

I am developing Reirb which is new version of irb, now.
Reirb is a reborn irb, and new implementation for irb,
I would like to replacing irb with reirb(as irb).

Therefore, I want to pending big changes until RubyKaigi 2018 is over.

Also available in: Atom PDF