31 lines
774 B
Ruby
31 lines
774 B
Ruby
# frozen_string_literal: true
|
|
|
|
module SyntaxSuggest
|
|
# Mini String IO [Private]
|
|
#
|
|
# Acts like a StringIO with reduced API, but without having to require that
|
|
# class.
|
|
#
|
|
# The original codebase emitted directly to $stderr, but now SyntaxError#detailed_message
|
|
# needs a string output. To accomplish that we kept the original print infrastructure in place and
|
|
# added this class to accumulate the print output into a string.
|
|
class MiniStringIO
|
|
EMPTY_ARG = Object.new
|
|
|
|
def initialize(isatty: $stderr.isatty)
|
|
@string = +""
|
|
@isatty = isatty
|
|
end
|
|
|
|
attr_reader :isatty
|
|
def puts(value = EMPTY_ARG, **)
|
|
if !value.equal?(EMPTY_ARG)
|
|
@string << value
|
|
end
|
|
@string << $/
|
|
end
|
|
|
|
attr_reader :string
|
|
end
|
|
end
|