class Yoda::Server::Providers::Signature

Public Class Methods

provider_method() click to toggle source
# File lib/yoda/server/providers/signature.rb, line 5
def self.provider_method
  :'textDocument/signatureHelp'
end

Public Instance Methods

provide(params) click to toggle source

@param params [Hash]

# File lib/yoda/server/providers/signature.rb, line 10
def provide(params)
  calculate(params[:text_document][:uri], params[:position])
end
timeout() click to toggle source
# File lib/yoda/server/providers/signature.rb, line 14
def timeout
  10
end

Private Instance Methods

calculate(uri, position) click to toggle source

@params uri [String] @params position [{Symbol => Integer}]

# File lib/yoda/server/providers/signature.rb, line 22
def calculate(uri, position)
  source = session.file_store.get(uri)
  location = Parsing::Location.of_language_server_protocol_position(line: position[:line], character: position[:character])
  cut_source = Parsing::SourceCutter.new(source, location).error_recovered_source

  signature_worker = Evaluation::SignatureDiscovery.new(session.registry, cut_source, location)

  functions = signature_worker.method_candidates
  create_signature_help(functions)
end
create_signature_help(functions) click to toggle source

@param code_objects [Array<Model::FunctionSignatures::Base>]

# File lib/yoda/server/providers/signature.rb, line 34
def create_signature_help(functions)
  signatures = functions.map { |func| Model::Descriptions::FunctionDescription.new(func) }
  LanguageServer::Protocol::Interface::SignatureHelp.new(
    signatures: signatures.map { |signature| create_signature_info(signature) },
  )
end
create_signature_info(signature) click to toggle source

@param signature [Evaluation::Descriptions::FunctionDescription]

# File lib/yoda/server/providers/signature.rb, line 42
def create_signature_info(signature)
  LanguageServer::Protocol::Interface::SignatureInformation.new(
    label: signature.title.to_s,
    documentation: signature.to_markdown,
    parameters: signature.parameter_names.map do |parameter|
      LanguageServer::Protocol::Interface::ParameterInformation.new(
        label: parameter,
      )
    end,
  )
end