Sha256: b3972d8213b02eadfc38bbc921567a507ae9b7ddbfb0a9eca1bfbdcf8a09afb8

Contents?: true

Size: 1.71 KB

Versions: 4

Compression:

Stored size: 1.71 KB

Contents

require 'language_server-protocol'
require 'securerandom'

module Yoda
  class Server
    require 'yoda/server/session'
    require 'yoda/server/concurrent_writer'
    require 'yoda/server/notifier'
    require 'yoda/server/providers'
    require 'yoda/server/root_handler'
    require 'yoda/server/lifecycle_handler'
    require 'yoda/server/deserializer'
    require 'yoda/server/scheduler'
    require 'yoda/server/workspace'
    require 'yoda/server/uri_decoder'
    require 'yoda/server/rootless_workspace'

    # @return [::LanguageServer::Protocol::Transport::Stdio::Reader]
    attr_reader :reader

    # @return [ConcurrentWriter]
    attr_reader :writer

    # @return [RootHandler]
    attr_reader :root_handler

    # Use this value as return value for notification handling
    NO_RESPONSE = :no_response

    def initialize(
      reader: LanguageServer::Protocol::Transport::Stdio::Reader.new,
      writer: LanguageServer::Protocol::Transport::Stdio::Writer.new,
      root_handler_class: RootHandler
    )
      @reader = reader
      @writer = ConcurrentWriter.new(writer)
      @root_handler = RootHandler.new(writer: @writer)
    end

    def run
      Logger.trace "Server initializing..."
      reader.read do |request|
        begin
          root_handler.handle(id: request[:id], method: request[:method].to_sym, params: deserialize(request[:params]))
        rescue StandardError => ex
          Logger.warn ex
          Logger.warn ex.full_message
        end
      end
      Logger.trace "Waiting to finish all pending tasks..."
      root_handler.wait_for_termination(timeout: 10)
      Logger.trace "Server finishing..."
    end

    def deserialize(hash)
      Deserializer.new.deserialize(hash || {})
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
yoda-language-server-0.10.1 lib/yoda/server.rb
yoda-language-server-0.10.0 lib/yoda/server.rb
yoda-language-server-0.9.0 lib/yoda/server.rb
yoda-language-server-0.8.0 lib/yoda/server.rb