Class: Diakonos::Lsp::Transport

Inherits:
Object
  • Object
show all
Defined in:
lib/diakonos/lsp/transport.rb

Instance Method Summary collapse

Constructor Details

#initialize(reader_io:, writer_io:) ⇒ Transport

Returns a new instance of Transport.



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/diakonos/lsp/transport.rb', line 7

def initialize(reader_io:, writer_io:)
  @reader_io = reader_io
  @reader = (
    LanguageServer::Protocol::Transport::Io::Reader
    .new(reader_io)
  )
  @writer = (
    LanguageServer::Protocol::Transport::Io::Writer
    .new(writer_io)
  )
end

Instance Method Details

#closeObject



19
20
21
22
# File 'lib/diakonos/lsp/transport.rb', line 19

def close
  @reader.close
  @writer.close
end

#read(&block) ⇒ Object



24
25
26
# File 'lib/diakonos/lsp/transport.rb', line 24

def read(&block)
  @reader.read(&block)
end

#read_oneObject

Reads exactly one LSP message from the reader IO and returns it. Returns nil on EOF.



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/diakonos/lsp/transport.rb', line 30

def read_one
  buffer = @reader_io.gets("\r\n\r\n")
  if buffer
    content_length = buffer[/Content-Length: (\d+)/i, 1].to_i
    message = @reader_io.read(content_length)
    if message.nil?
      raise 'Unexpected EOF reading LSP message body'
    end

    JSON.parse(message, symbolize_names: true)
  end
end

#write(message:) ⇒ Object



43
44
45
# File 'lib/diakonos/lsp/transport.rb', line 43

def write(message:)
  @writer.write(message)
end