Class: Yoda::Server::SignatureProvider
- Inherits:
-
Object
- Object
- Yoda::Server::SignatureProvider
- Defined in:
- lib/yoda/server/signature_provider.rb
Instance Attribute Summary collapse
-
#session ⇒ Object
readonly
Returns the value of attribute session.
Instance Method Summary collapse
- #create_signature_help(functions) ⇒ Object
- #create_signature_info(signature) ⇒ Object
-
#initialize(session) ⇒ SignatureProvider
constructor
A new instance of SignatureProvider.
- #provide(uri, position) ⇒ Object
Constructor Details
#initialize(session) ⇒ SignatureProvider
Returns a new instance of SignatureProvider.
7 8 9 |
# File 'lib/yoda/server/signature_provider.rb', line 7 def initialize(session) @session = session end |
Instance Attribute Details
#session ⇒ Object (readonly)
Returns the value of attribute session.
4 5 6 |
# File 'lib/yoda/server/signature_provider.rb', line 4 def session @session end |
Instance Method Details
#create_signature_help(functions) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/yoda/server/signature_provider.rb', line 25 def create_signature_help(functions) signatures = functions.map { |func| Model::Descriptions::FunctionDescription.new(func) } LSP::Interface::SignatureHelp.new( signatures: signatures.map { |signature| create_signature_info(signature) }, ) end |
#create_signature_info(signature) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/yoda/server/signature_provider.rb', line 33 def create_signature_info(signature) LSP::Interface::SignatureInformation.new( label: signature.title.to_s, documentation: signature.to_markdown, parameters: signature.parameter_names.map do |parameter| LSP::Interface::ParameterInformation.new( label: parameter, ) end, ) end |
#provide(uri, position) ⇒ Object
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/yoda/server/signature_provider.rb', line 13 def provide(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 |