Class: RubyLsp::Ree::CompletionHandler

Inherits:
Object
  • Object
show all
Includes:
Requests::Support::Common, ReeLspUtils
Defined in:
lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb

Constant Summary collapse

RECEIVER_OBJECT_TYPES =
[:enum, :dao, :bean, :async_bean]
CANDIDATES_LIMIT =
100

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

Constructor Details

#initialize(index, uri, node_context) ⇒ CompletionHandler

Returns a new instance of CompletionHandler.



15
16
17
18
19
20
21
22
23
# File 'lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb', line 15

def initialize(index, uri, node_context)
  @index = index
  @uri = uri
  @node_context = node_context
  @root_node = @node_context.instance_variable_get(:@nesting_nodes).first
  @finder = ReeObjectFinder.new(@index)
  @mapper = RubyLsp::Ree::CompletionItemsMapper.new(@index)
  @ree_context = RubyLsp::Ree::ReeContext.new(node_context)
end

Instance Method Details

#get_bean_methods_completion_items(bean_obj, location, node) ⇒ Object



46
47
48
49
# File 'lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb', line 46

def get_bean_methods_completion_items(bean_obj, location, node)
  bean_node = RubyLsp::Ree::ParsedDocumentBuilder.build_from_uri(bean_obj.uri, :bean)
  @mapper.map_ree_object_methods(bean_node.bean_methods, location, node, "method")
end

#get_class_name_completion_items(node) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb', line 62

def get_class_name_completion_items(node)
  node_name = node.name.to_s
  class_name_objects = @finder.search_class_objects(node_name)
  
  return [] if class_name_objects.size == 0

  parsed_doc = RubyLsp::Ree::ParsedDocumentBuilder.build_from_ast(@root_node, @uri)

  @mapper.map_class_name_objects(class_name_objects.take(CANDIDATES_LIMIT), node, parsed_doc,  @ree_context)
end

#get_dao_filters_completion_items(dao_obj, location, node) ⇒ Object



51
52
53
54
# File 'lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb', line 51

def get_dao_filters_completion_items(dao_obj, location, node)
  dao_node = RubyLsp::Ree::ParsedDocumentBuilder.build_from_uri(dao_obj.uri, :dao)
  @mapper.map_ree_object_methods(dao_node.filters, location, node, "filter")
end

#get_enum_values_completion_items(enum_obj, location, node) ⇒ Object



56
57
58
59
60
# File 'lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb', line 56

def get_enum_values_completion_items(enum_obj, location, node)
  enum_node = RubyLsp::Ree::ParsedDocumentBuilder.build_from_uri(enum_obj.uri, :enum)
  class_name = enum_node.full_class_name
  @mapper.map_ree_object_methods(enum_node.values, location, node, "from: #{class_name}")
end

#get_ree_object_methods_completions_items(ree_receiver, receiver_node, node) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb', line 31

def get_ree_object_methods_completions_items(ree_receiver, receiver_node, node)
  location = receiver_node.location

  case @finder.object_type(ree_receiver)
  when :enum
    get_enum_values_completion_items(ree_receiver, location, node)
  when :bean, :async_bean
    get_bean_methods_completion_items(ree_receiver, location, node)
  when :dao
    get_dao_filters_completion_items(ree_receiver, location, node)
  else
    []
  end
end

#get_ree_objects_completions_items(node) ⇒ Object



73
74
75
76
77
78
79
80
81
# File 'lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb', line 73

def get_ree_objects_completions_items(node)
  ree_objects = @finder.search_objects(node.name.to_s, CANDIDATES_LIMIT)

  return [] if ree_objects.size == 0
  
  parsed_doc = RubyLsp::Ree::ParsedDocumentBuilder.build_from_ast(@root_node, @uri)

  @mapper.map_ree_objects(ree_objects, node, parsed_doc)
end

#get_ree_receiver(receiver_node) ⇒ Object



25
26
27
28
29
# File 'lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb', line 25

def get_ree_receiver(receiver_node)
  return if !receiver_node || !receiver_node.is_a?(Prism::CallNode)

  @finder.find_objects_by_types(receiver_node.name.to_s, RECEIVER_OBJECT_TYPES).first
end