Class: ThemeCheck::LanguageServer::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/theme_check/language_server/server.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(in_stream: STDIN, out_stream: STDOUT, err_stream: $DEBUG ? File.open('/tmp/lsp.log', 'a') : STDERR) ⇒ Server

Returns a new instance of Server.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/theme_check/language_server/server.rb', line 14

def initialize(
  in_stream: STDIN,
  out_stream: STDOUT,
  err_stream: $DEBUG ? File.open('/tmp/lsp.log', 'a') : STDERR
)
  validate!([in_stream, out_stream, err_stream])

  @handler = Handler.new(self)
  @in = in_stream
  @out = out_stream
  @err = err_stream

  @out.sync = true # do not buffer
  @err.sync = true # do not buffer
end

Instance Attribute Details

#handlerObject (readonly)

Returns the value of attribute handler.



12
13
14
# File 'lib/theme_check/language_server/server.rb', line 12

def handler
  @handler
end

Instance Method Details

#listenObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/theme_check/language_server/server.rb', line 30

def listen
  loop do
    process_request

  # support ctrl+c and stuff
  rescue SignalException, DoneStreaming
    cleanup
    return 0

  rescue Exception => e # rubocop:disable Lint/RescueException
    log(e)
    log(e.backtrace)
    return 1
  end
end

#log(message) ⇒ Object



56
57
58
59
# File 'lib/theme_check/language_server/server.rb', line 56

def log(message)
  @err.puts(message)
  @err.flush
end

#send_response(response) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/theme_check/language_server/server.rb', line 46

def send_response(response)
  response_body = JSON.dump(response)
  log(response_body) if $DEBUG

  @out.write("Content-Length: #{response_body.size}\r\n")
  @out.write("\r\n")
  @out.write(response_body)
  @out.flush
end