diff options
| author | tomoya ishida <tomoyapenguin@gmail.com> | 2022-10-18 14:44:04 +0900 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2022-10-18 05:44:07 +0000 |
| commit | a09f764ce52838a363b006ea434287eca431dbae (patch) | |
| tree | 8da2c8147cb80ea8caf9484bdf7a1d5915e30b06 /lib/irb/color.rb | |
| parent | 344e6c915f41d99df024c7e90403baca0d5213a5 (diff) | |
[ruby/irb] Always use local variables in current context to parse code (https://github.com/ruby/irb/pull/397)
* Use local_variables for colorize, code_block_open check, nesting_level and assignment_expression check
* Check if expression is an assignment BEFORE evaluating it. evaluate might define new localvars and change result of assignment_expression?
* Add local_variables dependent code test
* pend local variable dependent test on truffleruby
code_block_open is not working on truffleruby
* Always pass context to RubyLex#lex
* Rename local_variable_assign_code generator method name
* Add assignment expression truncate test
* Add Context#local_variables and make generate_local_variables_assign_code more simple
* Update lib/irb/input-method.rb
Co-authored-by: Stan Lo <stan001212@gmail.com>
* Add a comment why assignment expression check should be done before evaluate
https://github.com/ruby/irb/commit/c8b3877281
Co-authored-by: Stan Lo <stan001212@gmail.com>
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
Diffstat (limited to 'lib/irb/color.rb')
| -rw-r--r-- | lib/irb/color.rb | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/lib/irb/color.rb b/lib/irb/color.rb index 7071696cb2..34912420e4 100644 --- a/lib/irb/color.rb +++ b/lib/irb/color.rb @@ -123,13 +123,15 @@ module IRB # :nodoc: # If `complete` is false (code is incomplete), this does not warn compile_error. # This option is needed to avoid warning a user when the compile_error is happening # because the input is not wrong but just incomplete. - def colorize_code(code, complete: true, ignore_error: false, colorable: colorable?) + def colorize_code(code, complete: true, ignore_error: false, colorable: colorable?, local_variables: []) return code unless colorable symbol_state = SymbolState.new colored = +'' + lvars_code = RubyLex.generate_local_variables_assign_code(local_variables) + code_with_lvars = lvars_code ? "#{lvars_code}\n#{code}" : code - scan(code, allow_last_error: !complete) do |token, str, expr| + scan(code_with_lvars, allow_last_error: !complete) do |token, str, expr| # handle uncolorable code if token.nil? colored << Reline::Unicode.escape_for_print(str) @@ -152,7 +154,12 @@ module IRB # :nodoc: end end end - colored + + if lvars_code + colored.sub(/\A.+\n/, '') + else + colored + end end private |
