Class: Torkify::Vim::Observer

Inherits:
Object
  • Object
show all
Defined in:
lib/torkify/vim/observer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Observer

Returns a new instance of Observer.



9
10
11
12
13
14
15
16
17
# 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

Instance Attribute Details

#meObject (readonly)

Returns the value of attribute me.



7
8
9
# File 'lib/torkify/vim/observer.rb', line 7

def me
  @me
end

#quickfixObject (readonly)

Returns the value of attribute quickfix.



7
8
9
# File 'lib/torkify/vim/observer.rb', line 7

def quickfix
  @quickfix
end

#split_error_thresholdObject (readonly)

Returns the value of attribute split_error_threshold.



7
8
9
# File 'lib/torkify/vim/observer.rb', line 7

def split_error_threshold
  @split_error_threshold
end

#split_errorsObject (readonly)

Returns the value of attribute split_errors.



7
8
9
# File 'lib/torkify/vim/observer.rb', line 7

def split_errors
  @split_errors
end

Instance Method Details

#detect_server!(first_time = false) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# 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) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
# 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) ⇒ Object



38
39
40
41
# File 'lib/torkify/vim/observer.rb', line 38

def on_absorb(event)
  quickfix.clear if quickfix
  self
end

#on_fail(event) ⇒ Object



48
49
50
51
# File 'lib/torkify/vim/observer.rb', line 48

def on_fail(event)
  on_pass_or_fail(event)
  self
end

#on_idle(event) ⇒ Object



33
34
35
36
# File 'lib/torkify/vim/observer.rb', line 33

def on_idle(event)
  detect_server!
  self
end

#on_pass(event) ⇒ Object



43
44
45
46
# File 'lib/torkify/vim/observer.rb', line 43

def on_pass(event)
  on_pass_or_fail(event)
  self
end

#on_pass_or_fail(event) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
# 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