Class: Diakonos::Lsp::Transport
Instance Method Summary collapse
- #close ⇒ Object
-
#initialize(reader_io:, writer_io:) ⇒ Transport
constructor
A new instance of Transport.
- #read(&block) ⇒ Object
-
#read_one ⇒ Object
Reads exactly one LSP message from the reader IO and returns it.
- #write(message:) ⇒ Object
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
#close ⇒ Object
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_one ⇒ Object
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 = @reader_io.read(content_length) if .nil? raise 'Unexpected EOF reading LSP message body' end JSON.parse(, symbolize_names: true) end end |
#write(message:) ⇒ Object
43 44 45 |
# File 'lib/diakonos/lsp/transport.rb', line 43 def write(message:) @writer.write() end |