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