class Spoom::Cli::LSP
Public Instance Methods
defs(file, line, col)
click to toggle source
TODO: options, filter, limit, kind etc.. filter rbi
# File lib/spoom/cli/lsp.rb, line 53 def defs(file, line, col) run do |client| res = client.definitions(to_uri(file), line.to_i, col.to_i) say("Definitions for `#{file}:#{line}:#{col}`:") symbol_printer.print_list(res) end end
find(query)
click to toggle source
TODO: options, filter, limit, kind etc.. filter rbi
# File lib/spoom/cli/lsp.rb, line 63 def find(query) run do |client| res = client.symbols(query).reject { |symbol| symbol.location.uri.start_with?("https") } say("Symbols matching `#{query}`:") symbol_printer.print_objects(res) end end
hover(file, line, col)
click to toggle source
TODO: options, filter, limit, kind etc.. filter rbi
# File lib/spoom/cli/lsp.rb, line 39 def hover(file, line, col) run do |client| res = client.hover(to_uri(file), line.to_i, col.to_i) say("Hovering `#{file}:#{line}:#{col}`:") if res symbol_printer.print_object(res) else say("<no data>") end end end
list()
click to toggle source
TODO: options, filter, limit, kind etc.. filter rbi
# File lib/spoom/cli/lsp.rb, line 25 def list run do |client| printer = symbol_printer Dir["**/*.rb"].each do |file| res = client.document_symbols(to_uri(file)) next if res.empty? say("Symbols from `#{file}`:") printer.print_objects(res) end end end
lsp_client()
click to toggle source
# File lib/spoom/cli/lsp.rb, line 112 def lsp_client in_sorbet_project! path = exec_path client = Spoom::LSP::Client.new( Spoom::Sorbet::BIN_PATH, "--lsp", "--enable-all-experimental-lsp-features", "--disable-watchman", path: path ) client.open(File.expand_path(path)) client end
refs(file, line, col)
click to toggle source
TODO: options, filter, limit, kind etc.. filter rbi
# File lib/spoom/cli/lsp.rb, line 83 def refs(file, line, col) run do |client| res = client.references(to_uri(file), line.to_i, col.to_i) say("References to `#{file}:#{line}:#{col}`:") symbol_printer.print_list(res) end end
run(&block)
click to toggle source
# File lib/spoom/cli/lsp.rb, line 134 def run(&block) client = lsp_client block.call(client) rescue Spoom::LSP::Error::Diagnostics => err say_error("Sorbet returned typechecking errors for `#{symbol_printer.clean_uri(err.uri)}`") err.diagnostics.each do |d| say_error("#{d.message} (#{d.code})", status: " #{d.range}") end exit(1) rescue Spoom::LSP::Error::BadHeaders => err say_error("Sorbet didn't answer correctly (#{err.message})") exit(1) rescue Spoom::LSP::Error => err say_error(err.message) exit(1) ensure begin client&.close rescue # We can't do much if Sorbet refuse to close. # We kill the parent process and let the child be killed. exit(1) end end
show()
click to toggle source
# File lib/spoom/cli/lsp.rb, line 16 def show in_sorbet_project! lsp = lsp_client # TODO: run interactive mode puts lsp end
sigs(file, line, col)
click to toggle source
TODO: options, filter, limit, kind etc.. filter rbi
# File lib/spoom/cli/lsp.rb, line 93 def sigs(file, line, col) run do |client| res = client.signatures(to_uri(file), line.to_i, col.to_i) say("Signature for `#{file}:#{line}:#{col}`:") symbol_printer.print_list(res) end end
symbol_printer()
click to toggle source
# File lib/spoom/cli/lsp.rb, line 126 def symbol_printer Spoom::LSP::SymbolPrinter.new( indent_level: 2, colors: options[:color], prefix: "file://#{File.expand_path(exec_path)}" ) end
symbols(file)
click to toggle source
TODO: options, filter, limit, kind etc.. filter rbi
# File lib/spoom/cli/lsp.rb, line 73 def symbols(file) run do |client| res = client.document_symbols(to_uri(file)) say("Symbols from `#{file}`:") symbol_printer.print_objects(res) end end
to_uri(path)
click to toggle source
# File lib/spoom/cli/lsp.rb, line 159 def to_uri(path) "file://" + File.join(File.expand_path(exec_path), path) end
types(file, line, col)
click to toggle source
TODO: options, filter, limit, kind etc.. filter rbi
# File lib/spoom/cli/lsp.rb, line 103 def types(file, line, col) run do |client| res = client.type_definitions(to_uri(file), line.to_i, col.to_i) say("Type for `#{file}:#{line}:#{col}`:") symbol_printer.print_list(res) end end