lib/yard/logging.rb in yard-0.8.2.1 vs lib/yard/logging.rb in yard-0.8.3
- old
+ new
@@ -20,11 +20,12 @@
attr_writer :show_backtraces
# @return [Boolean] whether progress indicators should be shown when
# logging CLIs (by default this is off).
def show_progress
- return false if RUBY18 # threading is too ineffective for progress support
+ return false if YARD.ruby18? # threading is too ineffective for progress support
+ return false if YARD.windows? # windows has poor ANSI support
return false unless io.tty? # no TTY support on IO
return false if level > WARN # no progress in verbose/debug modes
@show_progress
end
attr_writer :show_progress
@@ -84,11 +85,11 @@
return unless show_progress
icon = ""
if defined?(::Encoding)
icon = PROGRESS_INDICATORS[@progress_indicator] + " "
end
- self << "\e[2K\e[?25l\e[1m#{icon}#{msg}\e[0m\r"
+ print("\e[2K\e[?25l\e[1m#{icon}#{msg}\e[0m\r")
@mutex.synchronize do
@progress_msg = msg
@progress_indicator += 1
@progress_indicator %= PROGRESS_INDICATORS.size
end
@@ -103,23 +104,36 @@
# Clears the progress indicator in the TTY display.
# @return [void]
# @since 0.8.2
def clear_progress
return unless show_progress
- self << "\e[?25h\e[2K"
+ print_no_newline("\e[?25h\e[2K")
@progress_msg = nil
end
- # Displays an unformatted line to the logger output stream. Similar to
- # the +#<<+ method, but adds a newline.
+ # Displays an unformatted line to the logger output stream, adding
+ # a newline.
# @param [String] msg the message to display
# @return [void]
# @since 0.8.2
- def puts(msg)
- self << "#{msg}\n"
+ def puts(msg = '')
+ print("#{msg}\n")
end
+ alias_method :print_no_newline, :<<
+ private :print_no_newline
+
+ # Displays an unformatted line to the logger output stream.
+ # @param [String] msg the message to display
+ # @return [void]
+ # @since 0.8.2
+ def print(msg = '')
+ clear_line
+ print_no_newline(msg)
+ end
+ alias_method :<<, :print
+
# Prints the backtrace +exc+ to the logger as error data.
#
# @param [Array<String>] exc the backtrace list
# @param [Symbol] level_meth the level to log backtrace at
# @return [void]
@@ -153,9 +167,20 @@
yield
self.level = old_level
end
private
+
+ # Override this internal Logger method to clear line
+ def add(*args)
+ clear_line
+ super(*args)
+ end
+
+ def clear_line
+ return unless @progress_msg
+ print_no_newline("\e[2K\r")
+ end
# Log format (from Logger implementation). Used by Logger internally
def format_log(sev, time, prog, msg)
"[#{sev.downcase}]: #{msg}\n"
end