@@ -20,66 +20,51 @@ def initialize(input: $stdin, output: $stdout)
2020 @output = output . binmode
2121 end
2222
23+ # rubocop:disable Layout/LineLength
2324 def run
2425 store =
2526 Hash . new do |hash , uri |
26- hash [ uri ] = File . binread ( CGI . unescape ( URI . parse ( uri ) . path ) )
27+ filepath = CGI . unescape ( URI . parse ( uri ) . path )
28+ File . exist? ( filepath ) ? ( hash [ uri ] = File . read ( filepath ) ) : nil
2729 end
2830
2931 while ( headers = input . gets ( "\r \n \r \n " ) )
3032 source = input . read ( headers [ /Content-Length: (\d +)/i , 1 ] . to_i )
3133 request = JSON . parse ( source , symbolize_names : true )
3234
35+ # stree-ignore
3336 case request
3437 in { method : "initialize" , id : }
3538 store . clear
3639 write ( id : id , result : { capabilities : capabilities } )
37- in method : "initialized"
40+ in { method : "initialized" }
3841 # ignored
39- in method : "shutdown" # tolerate missing ID to be a good citizen
42+ in { method : "shutdown" } # tolerate missing ID to be a good citizen
4043 store . clear
4144 write ( id : request [ :id ] , result : { } )
4245 return
43- in {
44- method : "textDocument/didChange" ,
45- params : { textDocument : { uri : } , contentChanges : [ { text : } , *] }
46- }
46+ in { method : "textDocument/didChange" , params : { textDocument : { uri : } , contentChanges : [ { text : } , *] } }
4747 store [ uri ] = text
48- in {
49- method : "textDocument/didOpen" ,
50- params : { textDocument : { uri :, text : } }
51- }
48+ in { method : "textDocument/didOpen" , params : { textDocument : { uri :, text : } } }
5249 store [ uri ] = text
53- in {
54- method : "textDocument/didClose" , params : { textDocument : { uri : } }
55- }
50+ in { method : "textDocument/didClose" , params : { textDocument : { uri : } } }
5651 store . delete ( uri )
57- in {
58- method : "textDocument/formatting" ,
59- id :,
60- params : { textDocument : { uri : } }
61- }
62- write ( id : id , result : [ format ( store [ uri ] ) ] )
63- in {
64- # official RPC in LSP spec 3.17
65- method : "textDocument/inlayHint" ,
66- id :,
67- params : { textDocument : { uri : } }
68- }
69- write ( id : id , result : inlay_hints ( store [ uri ] ) )
70- in {
71- method : "syntaxTree/visualizing" ,
72- id :,
73- params : { textDocument : { uri : } }
74- }
52+ in { method : "textDocument/formatting" , id :, params : { textDocument : { uri : } } }
53+ contents = store [ uri ]
54+ write ( id : id , result : contents ? [ format ( store [ uri ] ) ] : nil )
55+ in { method : "textDocument/inlayHint" , id :, params : { textDocument : { uri : } } }
56+ contents = store [ uri ]
57+ write ( id : id , result : contents ? inlay_hints ( store [ uri ] ) : nil )
58+ in { method : "syntaxTree/visualizing" , id :, params : { textDocument : { uri : } } }
7559 write ( id : id , result : PP . pp ( SyntaxTree . parse ( store [ uri ] ) , +"" ) )
76- in method : %r{\$ /.+}
60+ in { method : %r{\$ /.+} }
7761 # ignored
7862 else
7963 raise ArgumentError , "Unhandled: #{ request } "
8064 end
8165 end
8266 end
67+ # rubocop:enable Layout/LineLength
8368
8469 private
8570
0 commit comments