irb 1.0.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.document +4 -0
  3. data/Gemfile +10 -2
  4. data/LICENSE.txt +3 -3
  5. data/README.md +3 -3
  6. data/Rakefile +17 -1
  7. data/doc/irb/irb-tools.rd.ja +184 -0
  8. data/doc/irb/irb.rd.ja +427 -0
  9. data/irb.gemspec +18 -4
  10. data/lib/irb/cmd/fork.rb +2 -4
  11. data/lib/irb/cmd/help.rb +10 -5
  12. data/lib/irb/cmd/info.rb +32 -0
  13. data/lib/irb/cmd/ls.rb +101 -0
  14. data/lib/irb/cmd/measure.rb +43 -0
  15. data/lib/irb/cmd/nop.rb +10 -4
  16. data/lib/irb/cmd/pushws.rb +0 -1
  17. data/lib/irb/cmd/show_source.rb +93 -0
  18. data/lib/irb/cmd/whereami.rb +20 -0
  19. data/lib/irb/color.rb +246 -0
  20. data/lib/irb/color_printer.rb +47 -0
  21. data/lib/irb/completion.rb +254 -55
  22. data/lib/irb/context.rb +165 -72
  23. data/lib/irb/easter-egg.rb +138 -0
  24. data/lib/irb/ext/change-ws.rb +0 -1
  25. data/lib/irb/ext/history.rb +47 -11
  26. data/lib/irb/ext/loader.rb +46 -20
  27. data/lib/irb/ext/multi-irb.rb +7 -7
  28. data/lib/irb/ext/save-history.rb +36 -11
  29. data/lib/irb/ext/tracer.rb +14 -2
  30. data/lib/irb/ext/use-loader.rb +4 -3
  31. data/lib/irb/ext/workspaces.rb +0 -1
  32. data/lib/irb/extend-command.rb +113 -63
  33. data/lib/irb/frame.rb +12 -7
  34. data/lib/irb/help.rb +0 -1
  35. data/lib/irb/init.rb +146 -26
  36. data/lib/irb/input-method.rb +287 -9
  37. data/lib/irb/inspector.rb +15 -11
  38. data/lib/irb/lc/error.rb +55 -16
  39. data/lib/irb/lc/help-message +25 -13
  40. data/lib/irb/lc/ja/error.rb +55 -14
  41. data/lib/irb/lc/ja/help-message +11 -6
  42. data/lib/irb/locale.rb +13 -4
  43. data/lib/irb/notifier.rb +12 -8
  44. data/lib/irb/output-method.rb +6 -6
  45. data/lib/irb/ruby-lex.rb +673 -992
  46. data/lib/irb/ruby_logo.aa +37 -0
  47. data/lib/irb/version.rb +2 -2
  48. data/lib/irb/workspace.rb +65 -21
  49. data/lib/irb/xmp.rb +1 -1
  50. data/lib/irb.rb +276 -96
  51. data/man/irb.1 +229 -0
  52. metadata +25 -31
  53. data/.gitignore +0 -9
  54. data/.travis.yml +0 -6
  55. data/lib/irb/lc/.document +0 -4
  56. data/lib/irb/ruby-token.rb +0 -267
  57. data/lib/irb/slex.rb +0 -282
@@ -0,0 +1,37 @@
1
+
2
+ -+smJYYN?mm-
3
+ HB"BBYT TQg NggT
4
+ 9Q+g Nm,T 8g NJW
5
+ YS+ N2NJ"Sg N?
6
+ BQg #( gT Nggggk J
7
+ 5j NJ NJ NNge
8
+ #Q #JJ NgT N(
9
+ @j bj mT J
10
+ Bj @/d NJ (
11
+ #q #(( NgT #J
12
+ 5d #(t mT $d
13
+ #q @(@J NJB;
14
+ @( 5d ? HHH H HQmgggggggmN qD
15
+ 5d #uN 2QdH E O
16
+ 5 5JSd Nd NJH @d j
17
+ Fd @J4d s NQH #d (
18
+ #( #o6d Nd NgH #d #d
19
+ 4 B&Od v NgT #d F
20
+ #( 9JGd NH NgUd F
21
+ #d #GJQ d NP $
22
+ #J #U+#Q N Q # j
23
+ j /W BQ+ BQ d NJ NJ
24
+ - NjJH HBIjTQggPJQgW N W k #J
25
+ #J b HYWgggN j s Nag d NN b #d
26
+ #J 5- D s Ngg N d Nd F
27
+ Fd BKH2 #+ s NNgg J Q J ]
28
+ F H @ J N y K(d P I
29
+ F4 E N? #d y #Q NJ E j
30
+ F W Nd q m Bg NxW N(H-
31
+ F d b @ m Hd gW vKJ
32
+ NJ d K d s Bg aT FDd
33
+ b # d N m BQ mV N>
34
+ e5 Nd #d NggggggQWH HHHH NJ -
35
+ m7 NW H N HSVO1z=?11-
36
+ NgTH bB kH WBHWWHBHWmQgg&gggggNNN
37
+ NNggggggNN
data/lib/irb/version.rb CHANGED
@@ -11,7 +11,7 @@
11
11
  #
12
12
 
13
13
  module IRB # :nodoc:
14
- VERSION = "1.0.0"
14
+ VERSION = "1.4.1"
15
15
  @RELEASE_VERSION = VERSION
16
- @LAST_UPDATE_DATE = "2018-12-18"
16
+ @LAST_UPDATE_DATE = "2021-12-25"
17
17
  end
data/lib/irb/workspace.rb CHANGED
@@ -9,6 +9,10 @@
9
9
  #
10
10
  #
11
11
  #
12
+
13
+ require "delegate"
14
+
15
+ IRB::TOPLEVEL_BINDING = binding
12
16
  module IRB # :nodoc:
13
17
  class WorkSpace
14
18
  # Creates a new workspace.
@@ -48,18 +52,26 @@ EOF
48
52
  end
49
53
  @binding = BINDING_QUEUE.pop
50
54
 
51
- when 3 # binding in function on TOPLEVEL_BINDING(default)
52
- @binding = eval("def irb_binding; private; binding; end; irb_binding",
55
+ when 3 # binding in function on TOPLEVEL_BINDING
56
+ @binding = eval("self.class.remove_method(:irb_binding) if defined?(irb_binding); private; def irb_binding; binding; end; irb_binding",
53
57
  TOPLEVEL_BINDING,
54
58
  __FILE__,
55
59
  __LINE__ - 3)
60
+ when 4 # binding is a copy of TOPLEVEL_BINDING (default)
61
+ # Note that this will typically be IRB::TOPLEVEL_BINDING
62
+ # This is to avoid RubyGems' local variables (see issue #17623)
63
+ @binding = TOPLEVEL_BINDING.dup
56
64
  end
57
65
  end
66
+
58
67
  if main.empty?
59
68
  @main = eval("self", @binding)
60
69
  else
61
70
  @main = main[0]
62
- IRB.conf[:__MAIN__] = @main
71
+ end
72
+ IRB.conf[:__MAIN__] = @main
73
+
74
+ unless main.empty?
63
75
  case @main
64
76
  when Module
65
77
  @binding = eval("IRB.conf[:__MAIN__].module_eval('binding', __FILE__, __LINE__)", @binding, __FILE__, __LINE__)
@@ -67,10 +79,32 @@ EOF
67
79
  begin
68
80
  @binding = eval("IRB.conf[:__MAIN__].instance_eval('binding', __FILE__, __LINE__)", @binding, __FILE__, __LINE__)
69
81
  rescue TypeError
70
- IRB.fail CantChangeBinding, @main.inspect
82
+ fail CantChangeBinding, @main.inspect
83
+ end
84
+ end
85
+ end
86
+
87
+ case @main
88
+ when Object
89
+ use_delegator = @main.frozen?
90
+ else
91
+ use_delegator = true
92
+ end
93
+
94
+ if use_delegator
95
+ @main = SimpleDelegator.new(@main)
96
+ IRB.conf[:__MAIN__] = @main
97
+ @main.singleton_class.class_eval do
98
+ private
99
+ define_method(:exit) do |*a, &b|
100
+ # Do nothing, will be overridden
71
101
  end
102
+ define_method(:binding, Kernel.instance_method(:binding))
103
+ define_method(:local_variables, Kernel.instance_method(:local_variables))
72
104
  end
105
+ @binding = eval("IRB.conf[:__MAIN__].instance_eval('binding', __FILE__, __LINE__)", @binding, *@binding.source_location)
73
106
  end
107
+
74
108
  @binding.local_variable_set(:_, nil)
75
109
  end
76
110
 
@@ -95,46 +129,56 @@ EOF
95
129
 
96
130
  # error message manipulator
97
131
  def filter_backtrace(bt)
132
+ return nil if bt =~ /\/irb\/.*\.rb/
133
+ return nil if bt =~ /\/irb\.rb/
134
+ return nil if bt =~ /tool\/lib\/.*\.rb|runner\.rb/ # for tests in Ruby repository
98
135
  case IRB.conf[:CONTEXT_MODE]
99
- when 0
100
- return nil if bt =~ /\(irb_local_binding\)/
101
136
  when 1
102
- if(bt =~ %r!/tmp/irb-binding! or
103
- bt =~ %r!irb/.*\.rb! or
104
- bt =~ /irb\.rb/)
105
- return nil
106
- end
107
- when 2
108
- return nil if bt =~ /irb\/.*\.rb/
109
- return nil if bt =~ /irb\.rb/
137
+ return nil if bt =~ %r!/tmp/irb-binding!
110
138
  when 3
111
- return nil if bt =~ /irb\/.*\.rb/
112
- return nil if bt =~ /irb\.rb/
113
139
  bt = bt.sub(/:\s*in `irb_binding'/, '')
114
140
  end
115
141
  bt
116
142
  end
117
143
 
118
144
  def code_around_binding
119
- file, pos = @binding.source_location
145
+ if @binding.respond_to?(:source_location)
146
+ file, pos = @binding.source_location
147
+ else
148
+ file, pos = @binding.eval('[__FILE__, __LINE__]')
149
+ end
120
150
 
121
- unless defined?(::SCRIPT_LINES__[file]) && lines = ::SCRIPT_LINES__[file]
151
+ if defined?(::SCRIPT_LINES__[file]) && lines = ::SCRIPT_LINES__[file]
152
+ code = ::SCRIPT_LINES__[file].join('')
153
+ else
122
154
  begin
123
- lines = File.readlines(file)
155
+ code = File.read(file)
124
156
  rescue SystemCallError
125
157
  return
126
158
  end
127
159
  end
160
+
161
+ # NOT using #use_colorize? of IRB.conf[:MAIN_CONTEXT] because this method may be called before IRB::Irb#run
162
+ use_colorize = IRB.conf.fetch(:USE_COLORIZE, true)
163
+ if use_colorize
164
+ lines = Color.colorize_code(code).lines
165
+ else
166
+ lines = code.lines
167
+ end
128
168
  pos -= 1
129
169
 
130
170
  start_pos = [pos - 5, 0].max
131
171
  end_pos = [pos + 5, lines.size - 1].min
132
172
 
133
- fmt = " %2s %#{end_pos.to_s.length}d: %s"
173
+ if use_colorize
174
+ fmt = " %2s #{Color.colorize("%#{end_pos.to_s.length}d", [:BLUE, :BOLD])}: %s"
175
+ else
176
+ fmt = " %2s %#{end_pos.to_s.length}d: %s"
177
+ end
134
178
  body = (start_pos..end_pos).map do |current_pos|
135
179
  sprintf(fmt, pos == current_pos ? '=>' : '', current_pos + 1, lines[current_pos])
136
180
  end.join("")
137
- "\nFrom: #{file} @ line #{pos + 1} :\n\n#{body}\n"
181
+ "\nFrom: #{file} @ line #{pos + 1} :\n\n#{body}#{Color.clear if use_colorize}\n"
138
182
  end
139
183
 
140
184
  def IRB.delete_caller
data/lib/irb/xmp.rb CHANGED
@@ -10,7 +10,7 @@
10
10
  #
11
11
  #
12
12
 
13
- require "irb"
13
+ require_relative "../irb"
14
14
  require_relative "frame"
15
15
 
16
16
  # An example printer for irb.