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
|