class Solargraph::LanguageServer::Host::Diagnoser

An asynchronous diagnosis reporter.

Attributes

host[R]

@return [Host]

mutex[R]

@return [Mutex]

queue[R]

@return [Array]

Public Class Methods

new(host) click to toggle source

@param host [Host]

# File lib/solargraph/language_server/host/diagnoser.rb, line 10
def initialize host
  @host = host
  @mutex = Mutex.new
  @queue = []
  @stopped = true
end

Public Instance Methods

schedule(uri) click to toggle source

Schedule a file to be diagnosed.

@param uri [String] @return [void]

# File lib/solargraph/language_server/host/diagnoser.rb, line 21
def schedule uri
  mutex.synchronize { queue.push uri }
end
start() click to toggle source

Start the diagnosis thread.

@return [self]

# File lib/solargraph/language_server/host/diagnoser.rb, line 42
def start
  return unless @stopped
  @stopped = false
  Thread.new do
    until stopped?
      tick
      sleep 0.1
    end
  end
  self
end
stop() click to toggle source

Stop the diagnosis thread.

@return [void]

# File lib/solargraph/language_server/host/diagnoser.rb, line 28
def stop
  @stopped = true
end
stopped?() click to toggle source

True is the diagnoser is stopped.

@return [Boolean]

# File lib/solargraph/language_server/host/diagnoser.rb, line 35
def stopped?
  @stopped
end
tick() click to toggle source

Perform diagnoses.

@return [void]

# File lib/solargraph/language_server/host/diagnoser.rb, line 57
def tick
  return if queue.empty? || host.synchronizing?
  if !host.options['diagnostics']
    mutex.synchronize { queue.clear }
    return
  end
  current = mutex.synchronize { queue.shift }
  return if queue.include?(current)
  host.diagnose current
end