class Solargraph::LanguageServer::Message::Initialize

Public Instance Methods

process() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 7
def process
  host.configure params['initializationOptions']
  host.client_capabilities = params['capabilities']
  if support_workspace_folders?
    host.prepare_folders params['workspaceFolders']
  elsif params['rootUri']
    host.prepare UriHelpers.uri_to_file(params['rootUri'])
  else
    host.prepare params['rootPath']
  end
  result = {
    capabilities: {
      textDocumentSync: 2, # @todo What should this be?
      workspace: {
        workspaceFolders: {
          supported: true,
          changeNotifications: true
        }
      }
    }
  }
  # FIXME: lsp default is utf-16, may have different position
  result[:capabilities][:positionEncoding] = "utf-32" if params.dig("capabilities", "general", "positionEncodings")&.include?("utf-32")
  result[:capabilities].merge! static_completion unless dynamic_registration_for?('textDocument', 'completion')
  result[:capabilities].merge! static_signature_help unless dynamic_registration_for?('textDocument', 'signatureHelp')
  # result[:capabilities].merge! static_on_type_formatting unless dynamic_registration_for?('textDocument', 'onTypeFormatting')
  result[:capabilities].merge! static_hover unless dynamic_registration_for?('textDocument', 'hover')
  result[:capabilities].merge! static_document_formatting unless dynamic_registration_for?('textDocument', 'formatting')
  result[:capabilities].merge! static_document_symbols unless dynamic_registration_for?('textDocument', 'documentSymbol')
  result[:capabilities].merge! static_definitions unless dynamic_registration_for?('textDocument', 'definition')
  result[:capabilities].merge! static_rename unless dynamic_registration_for?('textDocument', 'rename')
  result[:capabilities].merge! static_references unless dynamic_registration_for?('textDocument', 'references')
  result[:capabilities].merge! static_workspace_symbols unless dynamic_registration_for?('workspace', 'symbol')
  result[:capabilities].merge! static_folding_range unless dynamic_registration_for?('textDocument', 'foldingRange')
  result[:capabilities].merge! static_highlights unless dynamic_registration_for?('textDocument', 'documentHighlight')
  # @todo Temporarily disabled
  # result[:capabilities].merge! static_code_action unless dynamic_registration_for?('textDocument', 'codeAction')
  set_result result
end

Private Instance Methods

dynamic_registration_for?(section, capability) click to toggle source

@param section [String] @param capability [String] @return [Boolean]

# File lib/solargraph/language_server/message/initialize.rb, line 153
def dynamic_registration_for? section, capability
  result = (params['capabilities'] &&
    params['capabilities'][section] &&
    params['capabilities'][section][capability] &&
    params['capabilities'][section][capability]['dynamicRegistration'])
  host.allow_registration("#{section}/#{capability}") if result
  result
end
static_code_action() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 66
def static_code_action
  {
    codeActionProvider: true,
    codeActionKinds: ["quickfix"]
  }
end
static_completion() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 56
def static_completion
  return {} unless host.options['completion']
  {
    completionProvider: {
      resolveProvider: true,
      triggerCharacters: ['.', ':', '@']
    }
  }
end
static_definitions() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 117
def static_definitions
  return {} unless host.options['definitions']
  {
    definitionProvider: true
  }
end
static_document_formatting() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 97
def static_document_formatting
  return {} unless host.options['formatting']
  {
    documentFormattingProvider: true
  }
end
static_document_symbols() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 104
def static_document_symbols
  return {} unless host.options['symbols']
  {
    documentSymbolProvider: true
  }
end
static_folding_range() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 137
def static_folding_range
  return {} unless host.options['folding']
  {
    foldingRangeProvider: true
  }
end
static_highlights() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 144
def static_highlights
  {
    documentHighlightProvider: true
  }
end
static_hover() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 90
def static_hover
  return {} unless host.options['hover']
  {
    hoverProvider: true
  }
end
static_on_type_formatting() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 81
def static_on_type_formatting
  {
    documentOnTypeFormattingProvider: {
      firstTriggerCharacter: '{',
      moreTriggerCharacter: ['(']
    }
  }
end
static_references() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 130
def static_references
  return {} unless host.options['references']
  {
    referencesProvider: true
  }
end
static_rename() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 124
def static_rename
  {
    renameProvider: {prepareProvider: true}
  }
end
static_signature_help() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 73
def static_signature_help
  {
    signatureHelpProvider: {
      triggerCharacters: ['(', ',']
    }
  }
end
static_workspace_symbols() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 111
def static_workspace_symbols
  {
    workspaceSymbolProvider: true
  }
end
support_workspace_folders?() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 49
def support_workspace_folders?
  params['capabilities'] &&
    params['capabilities']['workspace'] &&
    params['capabilities']['workspace']['workspaceFolders'] &&
    params['workspaceFolders']
end