Patrick Linnane ddd28e52e7
extend/io: use typed: strict
Signed-off-by: Patrick Linnane <patrick@linnane.io>
2024-08-13 12:42:06 -06:00

26 lines
443 B
Ruby

# typed: strict
# frozen_string_literal: true
class IO
sig { params(sep: BasicObject).returns(String) }
def readline_nonblock(sep = $INPUT_RECORD_SEPARATOR)
line = +""
buffer = +""
begin
loop do
break if buffer == sep
read_nonblock(1, buffer)
line.concat(buffer)
end
line.freeze
rescue IO::WaitReadable, EOFError
raise if line.empty?
line.freeze
end
end
end