Method: Standard::LSP::Server#initialize

Defined in:
lib/standard/lsp/server.rb

#initialize(standardizer) ⇒ Server

Returns a new instance of Server.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/standard/lsp/server.rb', line 16

def initialize(standardizer)
  self.standardizer = standardizer
  self.writer = Proto::Transport::Io::Writer.new($stdout)
  self.reader = Proto::Transport::Io::Reader.new($stdin)
  self.logger = $stderr
  self.text_cache = {}

  self.subscribers = {
    "initialize" => ->(request) {
      init_result = Proto::Interface::InitializeResult.new(
        capabilities: Proto::Interface::ServerCapabilities.new(
          document_formatting_provider: true,
          diagnostic_provider: true,
          text_document_sync: Proto::Constant::TextDocumentSyncKind::FULL
        )
      )
      writer.write(id: request[:id], result: init_result)
    },

    "initialized" => ->(request) { logger.puts "standard v#{Standard::VERSION} initialized, pid #{Process.pid}" },

    "shutdown" => ->(request) {
      logger.puts "asked to shutdown, exiting..."
      exit
    },

    "textDocument/didChange" => ->(request) {
      params = request[:params]
      result = diagnostic(params[:textDocument][:uri], params[:contentChanges][0][:text])
      writer.write(result)
    },

    "textDocument/didOpen" => ->(request) {
      td = request[:params][:textDocument]
      result = diagnostic(td[:uri], td[:text])
      writer.write(result)
    },

    "textDocument/didClose" => ->(request) {
      text_cache.delete(request.dig(:params, :textDocument, :uri))
    },

    "textDocument/formatting" => ->(request) {
      uri = request[:params][:textDocument][:uri]
      writer.write({id: request[:id], result: format_file(uri)})
    },

    "textDocument/didSave" => ->(request) {}
  }
end