Class: Yoda::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/yoda/server.rb,
lib/yoda/server/session.rb,
lib/yoda/server/notifier.rb,
lib/yoda/server/providers.rb,
lib/yoda/server/scheduler.rb,
lib/yoda/server/workspace.rb,
lib/yoda/server/uri_decoder.rb,
lib/yoda/server/deserializer.rb,
lib/yoda/server/root_handler.rb,
lib/yoda/server/providers/base.rb,
lib/yoda/server/providers/hover.rb,
lib/yoda/server/concurrent_writer.rb,
lib/yoda/server/lifecycle_handler.rb,
lib/yoda/server/rootless_workspace.rb,
lib/yoda/server/providers/signature.rb,
lib/yoda/server/providers/completion.rb,
lib/yoda/server/providers/definition.rb,
lib/yoda/server/providers/with_timeout.rb,
lib/yoda/server/providers/workspace_symbol.rb,
lib/yoda/server/providers/reportable_progress.rb,
lib/yoda/server/providers/text_document_did_open.rb,
lib/yoda/server/providers/text_document_did_save.rb,
lib/yoda/server/providers/text_document_did_change.rb,
lib/yoda/server/providers/workspace_did_create_files.rb,
lib/yoda/server/providers/workspace_did_delete_files.rb,
lib/yoda/server/providers/workspace_did_rename_files.rb,
lib/yoda/server/providers/workspace_did_change_workspace_folders.rb

Defined Under Namespace

Modules: Providers, UriDecoder Classes: ConcurrentWriter, Deserializer, LifecycleHandler, Notifier, RootHandler, RootlessWorkspace, Scheduler, Session, Workspace

Constant Summary collapse

NO_RESPONSE =

Use this value as return value for notification handling

:no_response

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(reader: LanguageServer::Protocol::Transport::Stdio::Reader.new, writer: LanguageServer::Protocol::Transport::Stdio::Writer.new, root_handler_class: RootHandler) ⇒ Server

Returns a new instance of Server.



30
31
32
33
34
35
36
37
38
# File 'lib/yoda/server.rb', line 30

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

Instance Attribute Details

#reader::LanguageServer::Protocol::Transport::Stdio::Reader (readonly)

Returns:

  • (::LanguageServer::Protocol::Transport::Stdio::Reader)


19
20
21
# File 'lib/yoda/server.rb', line 19

def reader
  @reader
end

#root_handlerRootHandler (readonly)

Returns:



25
26
27
# File 'lib/yoda/server.rb', line 25

def root_handler
  @root_handler
end

#writerConcurrentWriter (readonly)

Returns:



22
23
24
# File 'lib/yoda/server.rb', line 22

def writer
  @writer
end

Instance Method Details

#deserialize(hash) ⇒ Object



55
56
57
# File 'lib/yoda/server.rb', line 55

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

#runObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/yoda/server.rb', line 40

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