class RubyLanguageServer::Server

Constants

Position

Attributes

io[RW]

Public Class Methods

new(mutex) click to toggle source
# File lib/ruby_language_server/server.rb, line 10
def initialize(mutex)
  @mutex = mutex
end

Public Instance Methods

on_initialize(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 14
def on_initialize(params)
  RubyLanguageServer.logger.info("on_initialize: #{params}")
  RubyLanguageServer::CodeFile.all # Just to warm up active_record.
  root_path = params['rootPath']
  root_uri = params['rootUri']
  @project_manager = ProjectManager.new(root_path, root_uri)
  @project_manager.scan_all_project_files(@mutex)
  gem_string = ENV.fetch('ADDITIONAL_GEMS', nil)
  gem_array = (gem_string.split(',').compact.map(&:strip).reject { |string| string == '' } if gem_string && !gem_string.empty?)
  @project_manager.install_additional_gems(gem_array)
  {
    capabilities: {
      textDocumentSync: 1,
      hoverProvider: true,
      signatureHelpProvider: {
        triggerCharacters: ['(', ',']
      },
      definitionProvider: true,
      referencesProvider: true,
      documentSymbolProvider: true,
      workspaceSymbolProvider: true,
      xworkspaceReferencesProvider: true,
      xdefinitionProvider: true,
      xdependenciesProvider: true,
      completionProvider: {
        resolveProvider: true,
        triggerCharacters: ['.', '::']
      },
      codeActionProvider: true,
      renameProvider: true,
      executeCommandProvider: {
        commands: []
      },
      xpackagesProvider: true
    }
  }
end
on_initialized(_hash) click to toggle source
# File lib/ruby_language_server/server.rb, line 52
def on_initialized(_hash)
  RubyLanguageServer.logger.info("RubyLanguageServer::VERSION #{RubyLanguageServer::VERSION}")
end
on_shutdown(_params) click to toggle source
# File lib/ruby_language_server/server.rb, line 116
def on_shutdown(_params)
  RubyLanguageServer.logger.info('on_shutdown')
end
on_textDocument_completion(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 107
def on_textDocument_completion(params)
  RubyLanguageServer.logger.info("on_textDocument_completion #{params}")
  uri = uri_from_params(params)
  position = postition_from_params(params)
  completions = @project_manager.completion_at(uri, position)
  RubyLanguageServer.logger.debug("completions: #{completions}")
  completions
end
on_textDocument_definition(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 79
def on_textDocument_definition(params)
  RubyLanguageServer.logger.debug("on_textDocument_definition #{params}")
  uri = uri_from_params(params)
  position = postition_from_params(params)
  @project_manager.possible_definitions(uri, position)
end
on_textDocument_didChange(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 99
def on_textDocument_didChange(params)
  uri = uri_from_params(params)
  RubyLanguageServer.logger.debug("on_textDocument_didChange #{uri}")
  content_changes = params['contentChanges']
  text = content_changes.first['text']
  send_diagnostics(uri, text)
end
on_textDocument_didOpen(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 91
def on_textDocument_didOpen(params)
  textDocument = params['textDocument']
  uri = textDocument['uri']
  RubyLanguageServer.logger.debug("on_textDocument_didOpen #{uri}")
  text = textDocument['text']
  send_diagnostics(uri, text)
end
on_textDocument_documentSymbol(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 68
def on_textDocument_documentSymbol(params)
  RubyLanguageServer.logger.debug('on_textDocument_documentSymbol')
  RubyLanguageServer.logger.debug(params)
  uri = uri_from_params(params)

  # {"kind":"module","line":4,"language":"Ruby","path":"(eval)","pattern":"module RubyLanguageServer","full_name":"RubyLanguageServer","name":"RubyLanguageServer"}
  symbols = @project_manager.tags_for_uri(uri)
  RubyLanguageServer.logger.debug("symbols #{symbols}")
  symbols
end
on_textDocument_hover(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 62
def on_textDocument_hover(params)
  RubyLanguageServer.logger.debug('on_textDocument_hover')
  RubyLanguageServer.logger.debug(params)
  {}
end
on_workspace_didChangeWatchedFiles(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 56
def on_workspace_didChangeWatchedFiles(params)
  RubyLanguageServer.logger.debug('on_workspace_didChangeWatchedFiles')
  RubyLanguageServer.logger.debug(params)
  {}
end
send_diagnostics(uri, text) click to toggle source
# File lib/ruby_language_server/server.rb, line 86
def send_diagnostics(uri, text)
  hash = @project_manager.update_document_content(uri, text)
  io.send_notification('textDocument/publishDiagnostics', uri: uri, diagnostics: hash)
end

Private Instance Methods

postition_from_params(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 129
def postition_from_params(params)
  position = params['position']
  Position.new((position['line']).to_i, position['character'].to_i)
end
uri_from_params(params) click to toggle source
# File lib/ruby_language_server/server.rb, line 122
def uri_from_params(params)
  textDocument = params['textDocument']
  textDocument['uri']
end