class Torkify::Vim::Observer

Attributes

me[R]
quickfix[R]
split_error_threshold[R]
split_errors[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/torkify/vim/observer.rb, line 9
def initialize(options = {})
  @vimserver = options[:server]
  @me = "vim"

  @split_errors = !!options[:split_errors]
  @split_error_threshold = options.fetch(:split_error_threshold, 30).to_i

  detect_server! true
end

Public Instance Methods

detect_server!(first_time = false) click to toggle source
# File lib/torkify/vim/observer.rb, line 19
def detect_server!(first_time = false)
  @quickfix ||= begin
    vim = if @vimserver
      Remote.new(@vimserver)
    else
      Remote.from_first_server
    end
    Quickfix::API.new(vim)
  rescue RemoteError => e
    Torkify.logger.error { "[#{me}] #{e}" } if first_time
    nil
  end
end
errors_from_event(event) click to toggle source
# File lib/torkify/vim/observer.rb, line 66
def errors_from_event(event)
  if split_errors && event.errors.length < split_error_threshold
    Torkify.logger.debug { "[#{me}] number of errors before splitting: #{event.errors.length}" }
    splitter = ErrorSplitter.new
    event.errors.each_with_object([]) { |error, split|
      split.concat(splitter.call(error))
    }
  else
    event.errors
  end
end
on_absorb(event) click to toggle source
# File lib/torkify/vim/observer.rb, line 38
def on_absorb(event)
  quickfix.clear if quickfix
  self
end
on_fail(event) click to toggle source
# File lib/torkify/vim/observer.rb, line 48
def on_fail(event)
  on_pass_or_fail(event)
  self
end
on_idle(event) click to toggle source
# File lib/torkify/vim/observer.rb, line 33
def on_idle(event)
  detect_server!
  self
end
on_pass(event) click to toggle source
# File lib/torkify/vim/observer.rb, line 43
def on_pass(event)
  on_pass_or_fail(event)
  self
end
on_pass_or_fail(event) click to toggle source
# File lib/torkify/vim/observer.rb, line 53
def on_pass_or_fail(event)
  return unless quickfix
  populator = Quickfix::Populator.new(quickfix)
  populator.exclude File.basename(event.log_file.chomp('.log'))

  errors = errors_from_event(event)
  Torkify.logger.debug { "[#{me}] number of errors: #{errors.length}" }

  populator.populate errors
  quickfix.open if populator.errors_populated > 0
  self
end