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.
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…
Add table
Add a link
Reference in a new issue