Inline type annotations for Tty.

This commit is contained in:
Markus Reiter 2020-10-10 15:42:30 +02:00
parent e1e9f2d9bd
commit fc7a34585f
2 changed files with 14 additions and 38 deletions

View File

@ -1,36 +0,0 @@
# typed: strict
module Tty
include Kernel
sig{ params(string: String).returns(String) }
def strip_ansi(string)
end
sig{ returns(Integer) }
def width()
end
sig{ params(string: String).returns(T.nilable(String)) }
def truncate(string)
end
def append_to_escape_sequence(code)
end
sig{ returns(String) }
def current_escape_sequence()
end
sig{ void }
def reset_escape_sequence!()
end
sig{ returns(String) }
def to_s
end
sig { returns(T::Boolean) }
def color?
end
end

View File

@ -5,11 +5,15 @@
# #
# @api private # @api private
module Tty module Tty
include Kernel
extend T::Sig
@stream = $stdout @stream = $stdout
module_function module_function
def with(stream) sig { params(stream: IO, _block: T.proc.params(arg0: IO).void).void }
def with(stream, &_block)
previous_stream = @stream previous_stream = @stream
@stream = stream @stream = stream
@ -18,10 +22,12 @@ module Tty
@stream = previous_stream @stream = previous_stream
end end
sig { params(string: String).returns(String) }
def strip_ansi(string) def strip_ansi(string)
string.gsub(/\033\[\d+(;\d+)*m/, "") string.gsub(/\033\[\d+(;\d+)*m/, "")
end end
sig { returns(Integer) }
def width def width
@width ||= begin @width ||= begin
_, width = `/bin/stty size 2>/dev/null`.split _, width = `/bin/stty size 2>/dev/null`.split
@ -31,8 +37,9 @@ module Tty
end end
end end
sig { params(string: String).returns(String) }
def truncate(string) def truncate(string)
(w = width).zero? ? string.to_s : string.to_s[0, w - 4] (w = width).zero? ? string.to_s : (string.to_s[0, w - 4] || "")
end end
COLOR_CODES = { COLOR_CODES = {
@ -65,18 +72,21 @@ module Tty
CODES = COLOR_CODES.merge(STYLE_CODES).freeze CODES = COLOR_CODES.merge(STYLE_CODES).freeze
sig { params(code: Integer).returns(T.self_type) }
def append_to_escape_sequence(code) def append_to_escape_sequence(code)
@escape_sequence ||= [] @escape_sequence ||= []
@escape_sequence << code @escape_sequence << code
self self
end end
sig { returns(String) }
def current_escape_sequence def current_escape_sequence
return "" if @escape_sequence.nil? return "" if @escape_sequence.nil?
"\033[#{@escape_sequence.join(";")}m" "\033[#{@escape_sequence.join(";")}m"
end end
sig { void }
def reset_escape_sequence! def reset_escape_sequence!
@escape_sequence = nil @escape_sequence = nil
end end
@ -97,6 +107,7 @@ module Tty
end end
end end
sig { returns(String) }
def to_s def to_s
return "" unless color? return "" unless color?
@ -105,6 +116,7 @@ module Tty
reset_escape_sequence! reset_escape_sequence!
end end
sig { returns(T::Boolean) }
def color? def color?
return false if Homebrew::EnvConfig.no_color? return false if Homebrew::EnvConfig.no_color?
return true if Homebrew::EnvConfig.color? return true if Homebrew::EnvConfig.color?