class Solargraph::LanguageServer::Message::Initialize

Public Instance Methods

process() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 9
def process
  bm = Benchmark.measure {
    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')
    # @todo Temporarily disabled
    # result[:capabilities].merge! static_code_action unless dynamic_registration_for?('textDocument', 'codeAction')
    set_result result
  }
  Solargraph.logger.unknown "Solargraph initialized (#{bm.real} seconds)"
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 142
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 67
def static_code_action
  {
    codeActionProvider: true,
    codeActionKinds: ["quickfix"]
  }
end
static_completion() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 58
def static_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
  {
    definitionProvider: true
  }
end
static_document_formatting() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 97
def static_document_formatting
  {
    documentFormattingProvider: true
  }
end
static_document_symbols() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 103
def static_document_symbols
  {
    documentSymbolProvider: true
  }
end
static_folding_range() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 133
def static_folding_range
  {
    foldingRangeProvider: true
  }
end
static_hover() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 91
def static_hover
  {
    hoverProvider: true
  }
end
static_on_type_formatting() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 82
def static_on_type_formatting
  {
    documentOnTypeFormattingProvider: {
      firstTriggerCharacter: '{',
      moreTriggerCharacter: ['(']
    }
  }
end
static_references() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 127
def static_references
  {
    referencesProvider: true
  }
end
static_rename() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 121
def static_rename
  {
    renameProvider: {prepareProvider: true}
  }
end
static_signature_help() click to toggle source
# File lib/solargraph/language_server/message/initialize.rb, line 74
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 51
def support_workspace_folders?
  params['capabilities'] &&
    params['capabilities']['workspace'] &&
    params['capabilities']['workspace']['workspaceFolders'] &&
    params['workspaceFolders']
end