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
        }
      }
    }
  }
  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 151
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 64
def static_code_action
  {
    codeActionProvider: true,
    codeActionKinds: ["quickfix"]
  }
end
static_completion() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 54
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 115
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 95
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 102
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 135
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 142
def static_highlights
  {
    documentHighlightProvider: true
  }
end
static_hover() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 88
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 79
def static_on_type_formatting
  {
    documentOnTypeFormattingProvider: {
      firstTriggerCharacter: '{',
      moreTriggerCharacter: ['(']
    }
  }
end
static_references() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 128
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 122
def static_rename
  {
    renameProvider: {prepareProvider: true}
  }
end
static_signature_help() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 71
def static_signature_help
  {
    signatureHelpProvider: {
      triggerCharacters: ['(', ',']
    }
  }
end
static_workspace_symbols() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 109
def static_workspace_symbols
  {
    workspaceSymbolProvider: true
  }
end
support_workspace_folders?() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 47
def support_workspace_folders?
  params['capabilities'] &&
    params['capabilities']['workspace'] &&
    params['capabilities']['workspace']['workspaceFolders'] &&
    params['workspaceFolders']
end