summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorStan Lo <stan001212@gmail.com>2023-07-07 18:27:14 +0100
committergit <svn-admin@ruby-lang.org>2023-07-07 17:27:25 +0000
commit24d9e21f84eced634b3e443ada2a57621b2b4b9b (patch)
tree96ecaa8228d6b04c80b48047e8a77abc15b5cb61 /lib
parenta642a94b68a31c0e7c092087114c269132cdb159 (diff)
[ruby/reline] Reduce direct references to `Reline::IOGate`
(https://github.com/ruby/reline/pull/566) * Avoid referencing IOGate from IOGate classes The only time those classes being used is when themselves being the IOGate. So when referencing to IOGate, it's better to use `self` instead. * Avoid referencing to IOGate from LineEditor directly * Avoid referencing to IOGate from Core directly * Reference to Reline.core directly * Replace Reline::IOGate with Reline.core.io_gate
Diffstat (limited to 'lib')
-rw-r--r--lib/reline.rb60
-rw-r--r--lib/reline/ansi.rb2
-rw-r--r--lib/reline/line_editor.rb4
3 files changed, 37 insertions, 29 deletions
diff --git a/lib/reline.rb b/lib/reline.rb
index 8da614aa2b..0a2dba4f0d 100644
--- a/lib/reline.rb
+++ b/lib/reline.rb
@@ -83,8 +83,12 @@ module Reline
@bracketed_paste_finished = false
end
+ def io_gate
+ Reline::IOGate
+ end
+
def encoding
- Reline::IOGate.encoding
+ io_gate.encoding
end
def completion_append_character=(val)
@@ -181,16 +185,16 @@ module Reline
def input=(val)
raise TypeError unless val.respond_to?(:getc) or val.nil?
- if val.respond_to?(:getc) && Reline::IOGate.respond_to?(:input=)
- Reline::IOGate.input = val
+ if val.respond_to?(:getc) && io_gate.respond_to?(:input=)
+ io_gate.input = val
end
end
def output=(val)
raise TypeError unless val.respond_to?(:write) or val.nil?
@output = val
- if Reline::IOGate.respond_to?(:output=)
- Reline::IOGate.output = val
+ if io_gate.respond_to?(:output=)
+ io_gate.output = val
end
end
@@ -213,7 +217,7 @@ module Reline
end
def get_screen_size
- Reline::IOGate.get_screen_size
+ io_gate.get_screen_size
end
Reline::DEFAULT_DIALOG_PROC_AUTOCOMPLETE = ->() {
@@ -267,7 +271,7 @@ module Reline
def readmultiline(prompt = '', add_hist = false, &confirm_multiline_termination)
Reline.update_iogate
- Reline::IOGate.with_raw_input do
+ io_gate.with_raw_input do
unless confirm_multiline_termination
raise ArgumentError.new('#readmultiline needs block to confirm multiline termination')
end
@@ -300,7 +304,7 @@ module Reline
private def inner_readline(prompt, add_hist, multiline, &confirm_multiline_termination)
if ENV['RELINE_STDERR_TTY']
- if Reline::IOGate.win?
+ if io_gate.win?
$stderr = File.open(ENV['RELINE_STDERR_TTY'], 'a')
else
$stderr.reopen(ENV['RELINE_STDERR_TTY'], 'w')
@@ -308,7 +312,7 @@ module Reline
$stderr.sync = true
$stderr.puts "Reline is used by #{Process.pid}"
end
- otio = Reline::IOGate.prep
+ otio = io_gate.prep
may_req_ambiguous_char_width
line_editor.reset(prompt, encoding: encoding)
@@ -335,7 +339,7 @@ module Reline
unless config.test_mode
config.read
config.reset_default_key_bindings
- Reline::IOGate.set_default_key_bindings(config)
+ io_gate.set_default_key_bindings(config)
end
line_editor.rerender
@@ -344,9 +348,9 @@ module Reline
line_editor.set_signal_handlers
prev_pasting_state = false
loop do
- prev_pasting_state = Reline::IOGate.in_pasting?
+ prev_pasting_state = io_gate.in_pasting?
read_io(config.keyseq_timeout) { |inputs|
- line_editor.set_pasting_state(Reline::IOGate.in_pasting?)
+ line_editor.set_pasting_state(io_gate.in_pasting?)
inputs.each { |c|
line_editor.input_key(c)
line_editor.rerender
@@ -356,29 +360,29 @@ module Reline
@bracketed_paste_finished = false
end
}
- if prev_pasting_state == true and not Reline::IOGate.in_pasting? and not line_editor.finished?
+ if prev_pasting_state == true and not io_gate.in_pasting? and not line_editor.finished?
line_editor.set_pasting_state(false)
prev_pasting_state = false
line_editor.rerender_all
end
break if line_editor.finished?
end
- Reline::IOGate.move_cursor_column(0)
+ io_gate.move_cursor_column(0)
rescue Errno::EIO
# Maybe the I/O has been closed.
rescue StandardError => e
line_editor.finalize
- Reline::IOGate.deprep(otio)
+ io_gate.deprep(otio)
raise e
rescue Exception
# Including Interrupt
line_editor.finalize
- Reline::IOGate.deprep(otio)
+ io_gate.deprep(otio)
raise
end
line_editor.finalize
- Reline::IOGate.deprep(otio)
+ io_gate.deprep(otio)
end
# GNU Readline waits for "keyseq-timeout" milliseconds to see if the ESC
@@ -393,7 +397,7 @@ module Reline
private def read_io(keyseq_timeout, &block)
buffer = []
loop do
- c = Reline::IOGate.getc
+ c = io_gate.getc
if c == -1
result = :unmatched
@bracketed_paste_finished = true
@@ -433,7 +437,7 @@ module Reline
begin
succ_c = nil
Timeout.timeout(keyseq_timeout / 1000.0) {
- succ_c = Reline::IOGate.getc
+ succ_c = io_gate.getc
}
rescue Timeout::Error # cancel matching only when first byte
block.([Reline::Key.new(c, c, false)])
@@ -448,7 +452,7 @@ module Reline
end
return :break
when :matching
- Reline::IOGate.ungetc(succ_c)
+ io_gate.ungetc(succ_c)
return :next
when :matched
buffer << succ_c
@@ -465,7 +469,7 @@ module Reline
begin
escaped_c = nil
Timeout.timeout(keyseq_timeout / 1000.0) {
- escaped_c = Reline::IOGate.getc
+ escaped_c = io_gate.getc
}
rescue Timeout::Error # independent ESC
block.([Reline::Key.new(c, c, false)])
@@ -488,19 +492,19 @@ module Reline
end
private def may_req_ambiguous_char_width
- @ambiguous_width = 2 if Reline::IOGate == Reline::GeneralIO or !STDOUT.tty?
+ @ambiguous_width = 2 if io_gate == Reline::GeneralIO or !STDOUT.tty?
return if defined? @ambiguous_width
- Reline::IOGate.move_cursor_column(0)
+ io_gate.move_cursor_column(0)
begin
output.write "\u{25bd}"
rescue Encoding::UndefinedConversionError
# LANG=C
@ambiguous_width = 1
else
- @ambiguous_width = Reline::IOGate.cursor_pos.x
+ @ambiguous_width = io_gate.cursor_pos.x
end
- Reline::IOGate.move_cursor_column(0)
- Reline::IOGate.erase_after_cursor
+ io_gate.move_cursor_column(0)
+ io_gate.erase_after_cursor
end
end
@@ -576,7 +580,7 @@ module Reline
end
def self.ungetc(c)
- Reline::IOGate.ungetc(c)
+ core.io_gate.ungetc(c)
end
def self.line_editor
@@ -588,7 +592,7 @@ module Reline
# Need to change IOGate when `$stdout.tty?` change from false to true by `$stdout.reopen`
# Example: rails/spring boot the application in non-tty, then run console in tty.
- if ENV['TERM'] != 'dumb' && Reline::IOGate == Reline::GeneralIO && $stdout.tty?
+ if ENV['TERM'] != 'dumb' && core.io_gate == Reline::GeneralIO && $stdout.tty?
require 'reline/ansi'
remove_const(:IOGate)
const_set(:IOGate, Reline::ANSI)
diff --git a/lib/reline/ansi.rb b/lib/reline/ansi.rb
index 06ea9efd09..1e018d4e82 100644
--- a/lib/reline/ansi.rb
+++ b/lib/reline/ansi.rb
@@ -206,7 +206,7 @@ class Reline::ANSI
end
def self.in_pasting?
- @@in_bracketed_paste_mode or (not Reline::IOGate.empty_buffer?)
+ @@in_bracketed_paste_mode or (not empty_buffer?)
end
def self.empty_buffer?
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb
index 404a595f9c..4030902139 100644
--- a/lib/reline/line_editor.rb
+++ b/lib/reline/line_editor.rb
@@ -60,6 +60,10 @@ class Reline::LineEditor
reset_variables(encoding: encoding)
end
+ def io_gate
+ Reline::IOGate
+ end
+
def set_pasting_state(in_pasting)
@in_pasting = in_pasting
end