irb 1.3.5 → 1.3.6
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 +4 -4
- data/Gemfile +10 -0
- data/Rakefile +1 -1
- data/irb.gemspec +1 -3
- data/lib/irb.rb +11 -4
- data/lib/irb/cmd/ls.rb +26 -2
- data/lib/irb/color.rb +9 -14
- data/lib/irb/init.rb +16 -4
- data/lib/irb/ruby-lex.rb +1 -1
- data/lib/irb/version.rb +2 -2
- metadata +8 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7071322837c419efbce74bd5aa91c9b83a9a3fd31e893e72376b763b2bbf4409
|
4
|
+
data.tar.gz: fa4e508771f91e4da313913592a7caa713cb82069f57d4dab059426baa764fc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b040a17c30df8f8512c176acfb1884237c050d5e4dab769f08aa75a00da23dcba1be9fab15d37671e4617abee3f6279363fed80c0980687cdcbed417bf5e3f4
|
7
|
+
data.tar.gz: 0a021169f28c114aeac7b7375eda932cdd4b357056b092a8499a61da6d4d1b01d019591e94eaaf134392a8b5c92cd632d0dfc7bf4b243831df93cc0514cd2eb1
|
data/Gemfile
CHANGED
@@ -3,3 +3,13 @@ source "https://rubygems.org"
|
|
3
3
|
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
4
4
|
|
5
5
|
gemspec
|
6
|
+
|
7
|
+
group :development do
|
8
|
+
gem "bundler"
|
9
|
+
is_unix = RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
|
10
|
+
is_truffleruby = RUBY_DESCRIPTION =~ /truffleruby/
|
11
|
+
gem 'vterm', '>= 0.0.5' if is_unix && ENV['WITH_VTERM']
|
12
|
+
gem 'yamatanooroti', '>= 0.0.6'
|
13
|
+
gem "rake"
|
14
|
+
gem "stackprof" if is_unix && !is_truffleruby
|
15
|
+
end
|
data/Rakefile
CHANGED
data/irb.gemspec
CHANGED
@@ -36,7 +36,5 @@ Gem::Specification.new do |spec|
|
|
36
36
|
|
37
37
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.5")
|
38
38
|
|
39
|
-
spec.add_dependency "reline", ">= 0.
|
40
|
-
spec.add_development_dependency "bundler"
|
41
|
-
spec.add_development_dependency "rake"
|
39
|
+
spec.add_dependency "reline", ">= 0.2.5"
|
42
40
|
end
|
data/lib/irb.rb
CHANGED
@@ -590,9 +590,15 @@ module IRB
|
|
590
590
|
end
|
591
591
|
end
|
592
592
|
|
593
|
-
def convert_invalid_byte_sequence(str)
|
594
|
-
str
|
595
|
-
|
593
|
+
def convert_invalid_byte_sequence(str, enc)
|
594
|
+
str.force_encoding(enc)
|
595
|
+
str.scrub { |c|
|
596
|
+
c.bytes.map{ |b| "\\x#{b.to_s(16).upcase}" }.join
|
597
|
+
}
|
598
|
+
end
|
599
|
+
|
600
|
+
def encode_with_invalid_byte_sequence(str, enc)
|
601
|
+
conv = Encoding::Converter.new(str.encoding, enc)
|
596
602
|
dst = String.new
|
597
603
|
begin
|
598
604
|
ret = conv.primitive_convert(str, dst)
|
@@ -640,7 +646,8 @@ module IRB
|
|
640
646
|
message = exc.full_message(order: :top)
|
641
647
|
order = :top
|
642
648
|
end
|
643
|
-
message = convert_invalid_byte_sequence(message)
|
649
|
+
message = convert_invalid_byte_sequence(message, exc.message.encoding)
|
650
|
+
message = encode_with_invalid_byte_sequence(message, IRB.conf[:LC_MESSAGES].encoding) unless message.encoding.to_s.casecmp?(IRB.conf[:LC_MESSAGES].encoding.to_s)
|
644
651
|
message = message.gsub(/((?:^\t.+$\n)+)/) { |m|
|
645
652
|
case order
|
646
653
|
when :top
|
data/lib/irb/cmd/ls.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "reline"
|
4
|
+
require 'set'
|
4
5
|
require_relative "nop"
|
5
6
|
require_relative "../color"
|
6
7
|
|
@@ -16,13 +17,36 @@ module IRB
|
|
16
17
|
klass = (obj.class == Class || obj.class == Module ? obj : obj.class)
|
17
18
|
|
18
19
|
o.dump("constants", obj.constants) if obj.respond_to?(:constants)
|
19
|
-
o
|
20
|
-
o
|
20
|
+
dump_singleton_methods(o, klass, obj)
|
21
|
+
dump_instance_methods(o, klass)
|
21
22
|
o.dump("instance variables", obj.instance_variables)
|
22
23
|
o.dump("class variables", klass.class_variables)
|
23
24
|
o.dump("locals", locals)
|
24
25
|
end
|
25
26
|
|
27
|
+
def dump_singleton_methods(o, klass, obj)
|
28
|
+
maps = class_method_map(obj.singleton_class.ancestors.take_while { |c| c != klass })
|
29
|
+
maps.each do |mod, methods|
|
30
|
+
name = mod == obj.singleton_class ? "#{klass}.methods" : "#{mod}#methods"
|
31
|
+
o.dump(name, methods)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def dump_instance_methods(o, klass)
|
36
|
+
maps = class_method_map(klass.ancestors)
|
37
|
+
maps.each do |mod, methods|
|
38
|
+
o.dump("#{mod}#methods", methods)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def class_method_map(classes)
|
43
|
+
dumped = Set.new
|
44
|
+
classes.reject { |mod| mod >= Object }.map do |mod|
|
45
|
+
methods = mod.public_instance_methods(false).select { |m| dumped.add?(m) }
|
46
|
+
[mod, methods]
|
47
|
+
end.reverse
|
48
|
+
end
|
49
|
+
|
26
50
|
class Output
|
27
51
|
MARGIN = " "
|
28
52
|
|
data/lib/irb/color.rb
CHANGED
@@ -77,7 +77,7 @@ module IRB # :nodoc:
|
|
77
77
|
|
78
78
|
class << self
|
79
79
|
def colorable?
|
80
|
-
$stdout.tty? &&
|
80
|
+
$stdout.tty? && (/mswin|mingw/ =~ RUBY_PLATFORM || (ENV.key?('TERM') && ENV['TERM'] != 'dumb'))
|
81
81
|
end
|
82
82
|
|
83
83
|
def inspect_colorable?(obj, seen: {}.compare_by_identity)
|
@@ -101,22 +101,22 @@ module IRB # :nodoc:
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
|
-
def clear
|
105
|
-
return '' unless colorable
|
104
|
+
def clear(colorable: colorable?)
|
105
|
+
return '' unless colorable
|
106
106
|
"\e[#{CLEAR}m"
|
107
107
|
end
|
108
108
|
|
109
|
-
def colorize(text, seq)
|
110
|
-
return text unless colorable
|
109
|
+
def colorize(text, seq, colorable: colorable?)
|
110
|
+
return text unless colorable
|
111
111
|
seq = seq.map { |s| "\e[#{const_get(s)}m" }.join('')
|
112
|
-
"#{seq}#{text}#{clear}"
|
112
|
+
"#{seq}#{text}#{clear(colorable: colorable)}"
|
113
113
|
end
|
114
114
|
|
115
115
|
# If `complete` is false (code is incomplete), this does not warn compile_error.
|
116
116
|
# This option is needed to avoid warning a user when the compile_error is happening
|
117
117
|
# because the input is not wrong but just incomplete.
|
118
|
-
def colorize_code(code, complete: true, ignore_error: false)
|
119
|
-
return code unless colorable
|
118
|
+
def colorize_code(code, complete: true, ignore_error: false, colorable: colorable?)
|
119
|
+
return code unless colorable
|
120
120
|
|
121
121
|
symbol_state = SymbolState.new
|
122
122
|
colored = +''
|
@@ -134,7 +134,7 @@ module IRB # :nodoc:
|
|
134
134
|
line = Reline::Unicode.escape_for_print(line)
|
135
135
|
if seq = dispatch_seq(token, expr, line, in_symbol: in_symbol)
|
136
136
|
colored << seq.map { |s| "\e[#{s}m" }.join('')
|
137
|
-
colored << line.sub(/\Z/, clear)
|
137
|
+
colored << line.sub(/\Z/, clear(colorable: colorable))
|
138
138
|
else
|
139
139
|
colored << line
|
140
140
|
end
|
@@ -161,11 +161,6 @@ module IRB # :nodoc:
|
|
161
161
|
seen.delete(obj)
|
162
162
|
end
|
163
163
|
|
164
|
-
def supported?
|
165
|
-
return @supported if defined?(@supported)
|
166
|
-
@supported = Ripper::Lexer::Elem.method_defined?(:state)
|
167
|
-
end
|
168
|
-
|
169
164
|
def scan(code, allow_last_error:)
|
170
165
|
pos = [1, 0]
|
171
166
|
|
data/lib/irb/init.rb
CHANGED
@@ -44,7 +44,7 @@ module IRB # :nodoc:
|
|
44
44
|
@CONF[:IRB_RC] = nil
|
45
45
|
|
46
46
|
@CONF[:USE_SINGLELINE] = false unless defined?(ReadlineInputMethod)
|
47
|
-
@CONF[:USE_COLORIZE] =
|
47
|
+
@CONF[:USE_COLORIZE] = !ENV['NO_COLOR']
|
48
48
|
@CONF[:INSPECT_MODE] = true
|
49
49
|
@CONF[:USE_TRACER] = false
|
50
50
|
@CONF[:USE_LOADER] = false
|
@@ -120,7 +120,11 @@ module IRB # :nodoc:
|
|
120
120
|
puts 'processing time: %fs' % (now - time) if IRB.conf[:MEASURE]
|
121
121
|
result
|
122
122
|
}
|
123
|
+
# arg can be either a symbol for the mode (:cpu, :wall, ..) or a hash for
|
124
|
+
# a more complete configuration.
|
125
|
+
# See https://github.com/tmm1/stackprof#all-options.
|
123
126
|
@CONF[:MEASURE_PROC][:STACKPROF] = proc { |context, code, line_no, arg, &block|
|
127
|
+
return block.() unless IRB.conf[:MEASURE]
|
124
128
|
success = false
|
125
129
|
begin
|
126
130
|
require 'stackprof'
|
@@ -130,10 +134,18 @@ module IRB # :nodoc:
|
|
130
134
|
end
|
131
135
|
if success
|
132
136
|
result = nil
|
133
|
-
|
137
|
+
arg = { mode: arg || :cpu } unless arg.is_a?(Hash)
|
138
|
+
stackprof_result = StackProf.run(**arg) do
|
134
139
|
result = block.()
|
135
140
|
end
|
136
|
-
|
141
|
+
case stackprof_result
|
142
|
+
when File
|
143
|
+
puts "StackProf report saved to #{stackprof_result.path}"
|
144
|
+
when Hash
|
145
|
+
StackProf::Report.new(stackprof_result).print_text
|
146
|
+
else
|
147
|
+
puts "Stackprof ran with #{arg.inspect}"
|
148
|
+
end
|
137
149
|
result
|
138
150
|
else
|
139
151
|
block.()
|
@@ -301,11 +313,11 @@ module IRB # :nodoc:
|
|
301
313
|
break
|
302
314
|
end
|
303
315
|
end
|
316
|
+
|
304
317
|
load_path.collect! do |path|
|
305
318
|
/\A\.\// =~ path ? path : File.expand_path(path)
|
306
319
|
end
|
307
320
|
$LOAD_PATH.unshift(*load_path)
|
308
|
-
|
309
321
|
end
|
310
322
|
|
311
323
|
# running config
|
data/lib/irb/ruby-lex.rb
CHANGED
data/lib/irb/version.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keiju ISHITSUKA
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: reline
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1.5
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.1.5
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
15
|
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rake
|
43
16
|
requirement: !ruby/object:Gem::Requirement
|
44
17
|
requirements:
|
45
18
|
- - ">="
|
46
19
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
type: :
|
49
|
-
prerelease: false
|
20
|
+
version: 0.2.5
|
21
|
+
type: :runtime
|
50
22
|
version_requirements: !ruby/object:Gem::Requirement
|
51
23
|
requirements:
|
52
24
|
- - ">="
|
53
25
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
26
|
+
version: 0.2.5
|
55
27
|
description: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
|
56
28
|
email:
|
57
29
|
- keiju@ruby-lang.org
|
@@ -125,7 +97,7 @@ licenses:
|
|
125
97
|
- Ruby
|
126
98
|
- BSD-2-Clause
|
127
99
|
metadata: {}
|
128
|
-
post_install_message:
|
100
|
+
post_install_message:
|
129
101
|
rdoc_options: []
|
130
102
|
require_paths:
|
131
103
|
- lib
|
@@ -141,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
113
|
version: '0'
|
142
114
|
requirements: []
|
143
115
|
rubygems_version: 3.1.4
|
144
|
-
signing_key:
|
116
|
+
signing_key:
|
145
117
|
specification_version: 4
|
146
118
|
summary: Interactive Ruby command-line tool for REPL (Read Eval Print Loop).
|
147
119
|
test_files: []
|