irb 1.2.1 → 1.2.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f07d42a212577323f5b522af715546bf0aa4f50403191e8bfea72c264cd55fd
4
- data.tar.gz: 642aee0475b00876e5a9b4c0ad7dc55b4e84ee215c2e7f664aad689a4103660e
3
+ metadata.gz: 1db19c9463f04b7e54357c0cdd3aaf2dc33e74f2d82f7ec4e6a1b949232c17f1
4
+ data.tar.gz: e8fb0dd9ae7bb63ec86f043c646530d2614f8cbc04a2ef9a4566b58206eeb139
5
5
  SHA512:
6
- metadata.gz: b9466d40cc08ee522b64dee832ce98059b21ed0f6d9cbd3b656ebd05c198c8027c342b9c9c708927662768a3351b0c709f0c7ce373ee3ad68207c8b907644c40
7
- data.tar.gz: 5e0a8c523e31fb349e934a25079347619f3e901756ef3cdd8375bd7fd2823e1f2d09054acf42945596fcae2181f20693f220ae8fc283b88e9aaed62851922f04
6
+ metadata.gz: ffecda47f8fd505d5ae6adc071939668d77a248275554048f36300750f219660d7d876155a0767816f67d01abde2f9a308c5755e62a3fbe2a5e919667b27caa7
7
+ data.tar.gz: 6906dbf9af719531f725f7fb5175166382626fda407712c46e7087414df09115a5768866e9df36eacf4389bca11959e8a5091127a58a629f7d9d009a0d1e470d
@@ -0,0 +1,4 @@
1
+ LICENSE.txt
2
+ README.md
3
+ doc
4
+ lib/**/*.rb
@@ -4,10 +4,10 @@ Redistribution and use in source and binary forms, with or without
4
4
  modification, are permitted provided that the following conditions
5
5
  are met:
6
6
  1. Redistributions of source code must retain the above copyright
7
- notice, this list of conditions and the following disclaimer.
7
+ notice, this list of conditions and the following disclaimer.
8
8
  2. Redistributions in binary form must reproduce the above copyright
9
- notice, this list of conditions and the following disclaimer in the
10
- documentation and/or other materials provided with the distribution.
9
+ notice, this list of conditions and the following disclaimer in the
10
+ documentation and/or other materials provided with the distribution.
11
11
 
12
12
  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13
13
  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.license = "BSD-2-Clause"
18
18
 
19
19
  spec.files = [
20
+ ".document",
20
21
  "Gemfile",
21
22
  "LICENSE.txt",
22
23
  "README.md",
@@ -52,7 +53,6 @@ Gem::Specification.new do |spec|
52
53
  "lib/irb/init.rb",
53
54
  "lib/irb/input-method.rb",
54
55
  "lib/irb/inspector.rb",
55
- "lib/irb/lc/.document",
56
56
  "lib/irb/lc/error.rb",
57
57
  "lib/irb/lc/help-message",
58
58
  "lib/irb/lc/ja/encoding_aliases.rb",
data/lib/irb.rb CHANGED
@@ -21,6 +21,7 @@ require "irb/locale"
21
21
  require "irb/color"
22
22
 
23
23
  require "irb/version"
24
+ require "irb/easter-egg"
24
25
 
25
26
  # IRB stands for "interactive Ruby" and is a tool to interactively execute Ruby
26
27
  # expressions read from the standard input.
@@ -131,7 +132,7 @@ require "irb/version"
131
132
  #
132
133
  # See IRB::Context#save_history= for more information.
133
134
  #
134
- # The history of _resuls_ of commands evaluated is not stored by default,
135
+ # The history of _results_ of commands evaluated is not stored by default,
135
136
  # but can be turned on to be stored with this +.irbrc+ setting:
136
137
  #
137
138
  # IRB.conf[:EVAL_HISTORY] = <number>
@@ -736,7 +737,13 @@ module IRB
736
737
  end
737
738
 
738
739
  def output_value # :nodoc:
739
- printf @context.return_format, @context.inspect_last_value
740
+ str = @context.inspect_last_value
741
+ multiline_p = /\A.*\Z/ !~ str
742
+ if multiline_p && @context.newline_before_multiline_output?
743
+ printf @context.return_format, "\n#{str}"
744
+ else
745
+ printf @context.return_format, str
746
+ end
740
747
  end
741
748
 
742
749
  # Outputs the local variables to this current session, including
@@ -203,7 +203,7 @@ module IRB
203
203
  sep = $2
204
204
  message = Regexp.quote($3)
205
205
 
206
- gv = eval("global_variables", bind).collect{|m| m.to_s}.append("true", "false", "nil")
206
+ gv = eval("global_variables", bind).collect{|m| m.to_s}.push("true", "false", "nil")
207
207
  lv = eval("local_variables", bind).collect{|m| m.to_s}
208
208
  iv = eval("instance_variables", bind).collect{|m| m.to_s}
209
209
  cv = eval("self.class.constants", bind).collect{|m| m.to_s}
@@ -265,18 +265,14 @@ module IRB
265
265
  end
266
266
  end
267
267
 
268
- PerfectMatchedProc = ->(matched) {
268
+ PerfectMatchedProc = ->(matched, bind: IRB.conf[:MAIN_CONTEXT].workspace.binding) {
269
269
  RDocRIDriver ||= RDoc::RI::Driver.new
270
270
  if matched =~ /\A(?:::)?RubyVM/ and not ENV['RUBY_YES_I_AM_NOT_A_NORMAL_USER']
271
- File.open(File.join(__dir__, 'ruby_logo.aa')) do |f|
272
- RDocRIDriver.page do |io|
273
- IO.copy_stream(f, io)
274
- end
275
- end
271
+ IRB.send(:easter_egg)
276
272
  return
277
273
  end
278
- namespace = retrieve_completion_data(matched, doc_namespace: true)
279
- return unless matched
274
+ namespace = retrieve_completion_data(matched, bind: bind, doc_namespace: true)
275
+ return unless namespace
280
276
  if namespace.is_a?(Array)
281
277
  out = RDoc::Markup::Document.new
282
278
  namespace.each do |m|
@@ -133,6 +133,11 @@ module IRB
133
133
  if @echo_on_assignment.nil?
134
134
  @echo_on_assignment = false
135
135
  end
136
+
137
+ @newline_before_multiline_output = IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT]
138
+ if @newline_before_multiline_output.nil?
139
+ @newline_before_multiline_output = true
140
+ end
136
141
  end
137
142
 
138
143
  # The top-level workspace, see WorkSpace#main
@@ -253,6 +258,20 @@ module IRB
253
258
  # a = "omg"
254
259
  # #=> omg
255
260
  attr_accessor :echo_on_assignment
261
+ # Whether a newline is put before multiline output.
262
+ #
263
+ # Uses IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT] if available,
264
+ # or defaults to +true+.
265
+ #
266
+ # "abc\ndef"
267
+ # #=>
268
+ # abc
269
+ # def
270
+ # IRB.CurrentContext.newline_before_multiline_output = false
271
+ # "abc\ndef"
272
+ # #=> abc
273
+ # def
274
+ attr_accessor :newline_before_multiline_output
256
275
  # Whether verbose messages are displayed or not.
257
276
  #
258
277
  # A copy of the default <code>IRB.conf[:VERBOSE]</code>
@@ -287,6 +306,7 @@ module IRB
287
306
  alias ignore_eof? ignore_eof
288
307
  alias echo? echo
289
308
  alias echo_on_assignment? echo_on_assignment
309
+ alias newline_before_multiline_output? newline_before_multiline_output
290
310
 
291
311
  # Returns whether messages are displayed or not.
292
312
  def verbose?
@@ -72,7 +72,7 @@ module IRB
72
72
  end
73
73
  history_file = IRB.rc_file("_history") unless history_file
74
74
  if File.exist?(history_file)
75
- open(history_file) do |f|
75
+ open(history_file, "r:#{IRB.conf[:LC_MESSAGES].encoding}") do |f|
76
76
  f.each { |l|
77
77
  l = l.chomp
78
78
  if self.class == ReidlineInputMethod and history.last&.end_with?("\\")
@@ -107,7 +107,7 @@ module IRB
107
107
  raise
108
108
  end
109
109
 
110
- open(history_file, 'w', 0600 ) do |f|
110
+ open(history_file, "w:#{IRB.conf[:LC_MESSAGES].encoding}", 0600) do |f|
111
111
  hist = history.map{ |l| l.split("\n").join("\\\n") }
112
112
  f.puts(hist[-num..-1] || hist)
113
113
  end
@@ -296,15 +296,18 @@ module IRB # :nodoc:
296
296
  DefaultEncodings = Struct.new(:external, :internal)
297
297
  class << IRB
298
298
  private
299
- def set_encoding(extern, intern = nil)
299
+ def set_encoding(extern, intern = nil, override: true)
300
300
  verbose, $VERBOSE = $VERBOSE, nil
301
301
  Encoding.default_external = extern unless extern.nil? || extern.empty?
302
302
  Encoding.default_internal = intern unless intern.nil? || intern.empty?
303
- @CONF[:ENCODINGS] = IRB::DefaultEncodings.new(extern, intern)
304
303
  [$stdin, $stdout, $stderr].each do |io|
305
304
  io.set_encoding(extern, intern)
306
305
  end
307
- @CONF[:LC_MESSAGES].instance_variable_set(:@encoding, extern)
306
+ if override
307
+ @CONF[:LC_MESSAGES].instance_variable_set(:@override_encoding, extern)
308
+ else
309
+ @CONF[:LC_MESSAGES].instance_variable_set(:@encoding, extern)
310
+ end
308
311
  ensure
309
312
  $VERBOSE = verbose
310
313
  end
@@ -133,6 +133,9 @@ module IRB
133
133
  include Readline
134
134
  # Creates a new input method object using Readline
135
135
  def initialize
136
+ if Readline.respond_to?(:encoding_system_needs)
137
+ IRB.__send__(:set_encoding, Readline.encoding_system_needs.name, override: false)
138
+ end
136
139
  super
137
140
 
138
141
  @line_no = 0
@@ -207,6 +210,7 @@ module IRB
207
210
  include Reline
208
211
  # Creates a new input method object using Readline
209
212
  def initialize
213
+ IRB.__send__(:set_encoding, Reline.encoding_system_needs.name, override: false)
210
214
  super
211
215
 
212
216
  @line_no = 0
@@ -24,6 +24,7 @@ module IRB # :nodoc:
24
24
  @@loaded = []
25
25
 
26
26
  def initialize(locale = nil)
27
+ @override_encoding = nil
27
28
  @lang = @territory = @encoding_name = @modifier = nil
28
29
  @locale = locale || ENV["IRB_LANG"] || ENV["LC_MESSAGES"] || ENV["LC_ALL"] || ENV["LANG"] || "C"
29
30
  if m = LOCALE_NAME_RE.match(@locale)
@@ -40,12 +41,16 @@ module IRB # :nodoc:
40
41
  @encoding ||= (Encoding.find('locale') rescue Encoding::ASCII_8BIT)
41
42
  end
42
43
 
43
- attr_reader :lang, :territory, :encoding, :modifier
44
+ attr_reader :lang, :territory, :modifier
45
+
46
+ def encoding
47
+ @override_encoding || @encoding
48
+ end
44
49
 
45
50
  def String(mes)
46
51
  mes = super(mes)
47
- if @encoding
48
- mes.encode(@encoding, undef: :replace)
52
+ if encoding
53
+ mes.encode(encoding, undef: :replace)
49
54
  else
50
55
  mes
51
56
  end
@@ -317,11 +317,13 @@ class RubyLex
317
317
 
318
318
  def check_newline_depth_difference
319
319
  depth_difference = 0
320
+ open_brace_on_line = 0
320
321
  @tokens.each_with_index do |t, index|
321
322
  case t[1]
322
323
  when :on_ignored_nl, :on_nl, :on_comment
323
324
  if index != (@tokens.size - 1)
324
325
  depth_difference = 0
326
+ open_brace_on_line = 0
325
327
  end
326
328
  next
327
329
  when :on_sp
@@ -330,8 +332,9 @@ class RubyLex
330
332
  case t[1]
331
333
  when :on_lbracket, :on_lbrace, :on_lparen
332
334
  depth_difference += 1
335
+ open_brace_on_line += 1
333
336
  when :on_rbracket, :on_rbrace, :on_rparen
334
- depth_difference -= 1
337
+ depth_difference -= 1 if open_brace_on_line > 0
335
338
  when :on_kw
336
339
  next if index > 0 and @tokens[index - 1][3].allbits?(Ripper::EXPR_FNAME)
337
340
  case t[2]
@@ -365,6 +368,7 @@ class RubyLex
365
368
  is_first_printable_of_line = true
366
369
  spaces_of_nest = []
367
370
  spaces_at_line_head = 0
371
+ open_brace_on_line = 0
368
372
  @tokens.each_with_index do |t, index|
369
373
  case t[1]
370
374
  when :on_ignored_nl, :on_nl, :on_comment
@@ -372,6 +376,7 @@ class RubyLex
372
376
  spaces_at_line_head = 0
373
377
  is_first_spaces_of_line = true
374
378
  is_first_printable_of_line = true
379
+ open_brace_on_line = 0
375
380
  next
376
381
  when :on_sp
377
382
  spaces_at_line_head = t[2].count(' ') if is_first_spaces_of_line
@@ -380,7 +385,8 @@ class RubyLex
380
385
  end
381
386
  case t[1]
382
387
  when :on_lbracket, :on_lbrace, :on_lparen
383
- spaces_of_nest.push(spaces_at_line_head)
388
+ spaces_of_nest.push(spaces_at_line_head + open_brace_on_line * 2)
389
+ open_brace_on_line += 1
384
390
  when :on_rbracket, :on_rbrace, :on_rparen
385
391
  if is_first_printable_of_line
386
392
  corresponding_token_depth = spaces_of_nest.pop
@@ -388,6 +394,7 @@ class RubyLex
388
394
  spaces_of_nest.pop
389
395
  corresponding_token_depth = nil
390
396
  end
397
+ open_brace_on_line -= 1
391
398
  when :on_kw
392
399
  next if index > 0 and @tokens[index - 1][3].allbits?(Ripper::EXPR_FNAME)
393
400
  case t[2]
@@ -11,7 +11,7 @@
11
11
  #
12
12
 
13
13
  module IRB # :nodoc:
14
- VERSION = "1.2.1"
14
+ VERSION = "1.2.2"
15
15
  @RELEASE_VERSION = VERSION
16
- @LAST_UPDATE_DATE = "2019-12-24"
16
+ @LAST_UPDATE_DATE = "2020-02-14"
17
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: irb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keiju ISHITSUKA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-24 00:00:00.000000000 Z
11
+ date: 2020-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: reline
@@ -60,6 +60,7 @@ executables:
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
+ - ".document"
63
64
  - Gemfile
64
65
  - LICENSE.txt
65
66
  - README.md
@@ -95,7 +96,6 @@ files:
95
96
  - lib/irb/init.rb
96
97
  - lib/irb/input-method.rb
97
98
  - lib/irb/inspector.rb
98
- - lib/irb/lc/.document
99
99
  - lib/irb/lc/error.rb
100
100
  - lib/irb/lc/help-message
101
101
  - lib/irb/lc/ja/encoding_aliases.rb
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  - !ruby/object:Gem::Version
133
133
  version: '0'
134
134
  requirements: []
135
- rubygems_version: 3.0.6
135
+ rubygems_version: 3.1.2
136
136
  signing_key:
137
137
  specification_version: 4
138
138
  summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
@@ -1,4 +0,0 @@
1
- # hide help-message files which contain usage information
2
- error.rb
3
- ja/encoding_aliases.rb
4
- ja/error.rb