Class: RubyLsp::Ree::ImportPackagesFormatter

Inherits:
BaseFormatter show all
Includes:
ReeLspUtils
Defined in:
lib/ruby_lsp/ruby_lsp_ree/formatters/import_packages_formatter.rb

Constant Summary

Constants included from ReeLspUtils

ReeLspUtils::Entry

Instance Method Summary collapse

Methods included from ReeLspUtils

#camelize, #find_local_file_path, #get_range_for_fn_insert, #get_ree_type, #get_uri_path, #package_name_from_spec_uri, #package_name_from_uri, #package_path_from_uri, #parameter_name, #path_from_package_folder, #signature_params_from_node, #spec_relative_file_path_from_uri, #underscore

Methods inherited from BaseFormatter

call, #initialize

Constructor Details

This class inherits a constructor from RubyLsp::Ree::BaseFormatter

Instance Method Details

#call(source, uri) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ruby_lsp/ruby_lsp_ree/formatters/import_packages_formatter.rb', line 9

def call(source, uri)
  return source unless @index

  current_package = package_name_from_uri(uri)
  parsed_doc = RubyLsp::Ree::ParsedDocumentBuilder.build_from_source(source, package_name: current_package)
  return source if !parsed_doc

  finder = ReeObjectFinder.new(@index)
  editor = RubyLsp::Ree::ReeSourceEditor.new(source)

  parsed_doc.link_nodes.select(&:object_name_type?).each do |link_node|
    next if finder.find_object_for_package(link_node.name, link_node.link_package_name)
      
    ree_objects = finder.find_objects(link_node.name)
    
    if ree_objects.size == 1
      editor.change_link_package(link_node, ree_objects.first.object_package, current_package)
    else
      send_message(link_node.name)
    end
  end

  editor.source
end