class Solargraph::LanguageServer::Host::Sources


A Host class for managing sources.

def async_update uri, updater

Returns:
  • (void) -

Parameters:
  • updater (Source::Updater) --
  • uri (String) --
def async_update uri, updater
  src = find(uri)
  mutex.synchronize do
    open_source_hash[uri] = src.start_synchronize(updater)
    queue.push uri
  end
  changed
  notify_observers uri
end

def clear

Returns:
  • (void) -
def clear
  open_source_hash.clear
end

def close uri

Returns:
  • (void) -

Parameters:
  • uri (String) --
def close uri
  open_source_hash.delete uri
end

def find uri

Returns:
  • (Source) -

Parameters:
  • uri (String) --

Raises:
  • (FileNotFoundError) - if the URI does not match an open source.
def find uri
  open_source_hash[uri] || raise(Solargraph::FileNotFoundError, "Host could not find #{uri}")
end

def include? uri

Returns:
  • (Boolean) -

Parameters:
  • uri (String) --
def include? uri
  open_source_hash.key? uri
end

def initialize

def initialize
  @stopped = true
end

def mutex

Returns:
  • (Mutex) -
def mutex
  @mutex ||= Mutex.new
end

def open uri, text, version

Returns:
  • (Source) -

Parameters:
  • version (Integer) --
  • text (String) --
  • uri (String) --
def open uri, text, version
  filename = uri_to_file(uri)
  source = Solargraph::Source.new(text, filename, version)
  open_source_hash[uri] = source
end

def open_from_disk uri

def open_from_disk uri
  source = Solargraph::Source.load(UriHelpers.uri_to_file(uri))
  open_source_hash[uri] = source
end

def open_source_hash

Returns:
  • (Array) -
def open_source_hash
  @open_source_hash ||= {}
end

def queue

Returns:
  • (Array) -
def queue
  @queue ||= []
end

def start

Returns:
  • (void) -
def start
  return unless @stopped
  @stopped = false
  Thread.new do
    until stopped?
      tick
      sleep 0.25 if queue.empty?
    end
  end
end

def stop

Returns:
  • (void) -
def stop
  @stopped = true
end

def stopped?

def stopped?
  @stopped
end

def tick

Returns:
  • (void) -
def tick
  return if queue.empty?
  uri = mutex.synchronize { queue.shift }
  return if queue.include?(uri)
  mutex.synchronize do
    nxt = open_source_hash[uri].finish_synchronize
    open_source_hash[uri] = nxt
    changed
    notify_observers uri
  end
end

def update uri, updater

Returns:
  • (Source) -

Parameters:
  • updater (Source::Updater) --
  • uri (String) --

Raises:
  • (FileNotFoundError) - if the URI does not match an open source.
def update uri, updater
  src = find(uri)
  mutex.synchronize { open_source_hash[uri] = src.synchronize(updater) }
  changed
  notify_observers uri
end