# File typeprof-0.21.2/lib/typeprof/lsp.rb, line 64 def initialize(server, uri, text, version) @server = server @uri = uri @text = text @version = version @sigs = nil @last_analysis_cancel_token = nil @analysis_queue = Queue.new @analysis_thread = Thread.new do loop do work = @analysis_queue.pop begin work.call rescue Exception puts "Rescued exception:" puts $!.full_message puts end end end # analyze synchronously to respond the first codeLens request res, def_table, caller_table = self.analyze(uri, text) on_text_changed_analysis(res, def_table, caller_table) end
# File typeprof-0.21.2/lib/typeprof/lsp.rb, line 98 def apply_changes(changes, version) @definition_table = nil text = @text.empty? ? [] : @text.lines changes.each do |change| case change in { range: { start: { line: start_row, character: start_col }, end: { line: end_row , character: end_col } }, text: change_text, } else raise end text << "" if start_row == text.size text << "" if end_row == text.size if start_row == end_row text[start_row][start_col...end_col] = change_text else text[start_row][start_col..] = "" text[end_row][...end_col] = "" change_text = change_text.lines case change_text.size when 0 text[start_row] += text[end_row] text[start_row + 1 .. end_row] = [] when 1 text[start_row] += change_text.first + text[end_row] text[start_row + 1 .. end_row] = [] else text[start_row] += change_text.shift text[end_row].prepend(change_text.pop) text[start_row + 1 ... end_row - 1] = change_text end end end