mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/irb] Optimize show_source command further
https://github.com/ruby/irb/pull/249 actually slowed down how `code` is concatenated. The original way of creating `code` is faster. [before] user system total real 2.420137 0.005364 2.425501 ( 2.426264) [after] user system total real 1.000221 0.007454 1.007675 ( 1.008295) Theoretically, this implementation might skip lines that don't appear in Ripper tokens, but this assumes such lines don't impact whether the code passes compilation or not. At least normal blank lines seem to have an `on_ignored_nl` token anyway though. https://github.com/ruby/irb/commit/27dd2867cd
This commit is contained in:
parent
6eb7c663c6
commit
35c7e83bb3
1 changed files with 4 additions and 1 deletions
|
@ -61,12 +61,15 @@ module IRB
|
|||
lex = RubyLex.new
|
||||
lines = File.read(file).lines[(first_line - 1)..-1]
|
||||
tokens = RubyLex.ripper_lex_without_warning(lines.join)
|
||||
|
||||
code = +""
|
||||
prev_tokens = []
|
||||
|
||||
# chunk with line number
|
||||
tokens.chunk { |tok| tok[0][0] }.each do |lnum, chunk|
|
||||
code = lines[0..lnum].join
|
||||
code << lines[lnum]
|
||||
prev_tokens.concat chunk
|
||||
|
||||
continue = lex.process_continue(prev_tokens)
|
||||
code_block_open = lex.check_code_block(code, prev_tokens)
|
||||
if !continue && !code_block_open
|
||||
|
|
Loading…
Reference in a new issue