Class: RubyLsp::Ree::ReeObjectFinder

Inherits:
Object
  • Object
show all
Includes:
ReeLspUtils
Defined in:
lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb

Defined Under Namespace

Classes: ReeObjectDecorator

Constant Summary collapse

MAX_LIMIT =
1000
REE_OBJECT_STRING =
'ree_object'

Constants included from ReeLspUtils

RubyLsp::Ree::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) ⇒ ReeObjectFinder

Returns a new instance of ReeObjectFinder.



27
28
29
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 27

def initialize(index)
  @index = index
end

Instance Method Details

#find_classes(name) ⇒ Object



52
53
54
55
56
57
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 52

def find_classes(name)
  keys = @index
    .names
    .select{ _1.split('::').last == name}
  @index.instance_variable_get(:@entries).values_at(*keys)
end

#find_object(name) ⇒ Object



59
60
61
62
63
64
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 59

def find_object(name)
  objects_by_name = @index[name]
  return unless objects_by_name

  objects_by_name.detect{ _1.comments.to_s.lines.first&.chomp == REE_OBJECT_STRING }
end

#find_object_for_package(name, package_name) ⇒ Object



74
75
76
77
78
79
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 74

def find_object_for_package(name, package_name)
  objects_by_name = @index[name]
  return unless objects_by_name

  objects_by_name.detect{ _1.comments.to_s.lines.first&.chomp == REE_OBJECT_STRING && package_name_from_uri(_1.uri) == package_name }
end

#find_objects(name) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 66

def find_objects(name)
  objects_by_name = @index[name]
  return [] unless objects_by_name

  ree_objects = objects_by_name.select{ _1.comments.to_s.lines.first&.chomp == REE_OBJECT_STRING }
  decorate_objects(ree_objects)
end

#find_objects_by_types(name, types) ⇒ Object



81
82
83
84
85
86
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 81

def find_objects_by_types(name, types)
  objects_by_name = @index[name]
  return [] unless objects_by_name

  objects_by_name.select{ types.include?(object_type(_1)) }
end

#object_documentation(ree_object) ⇒ Object



95
96
97
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 95

def object_documentation(ree_object)
  ree_object.comments.lines[2..-1].join("\n").chomp
end

#object_type(ree_object) ⇒ Object



88
89
90
91
92
93
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 88

def object_type(ree_object)
  type_str = ree_object.comments.lines[1]&.chomp
  return unless type_str
    
  type_str.split(' ').last[1..-1].to_sym
end

#search_class_objects(name) ⇒ Object



41
42
43
44
45
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 41

def search_class_objects(name)
  @index
    .names
    .select{ _1.split('::').last[0...name.size] == name}
end

#search_classes(name) ⇒ Object



47
48
49
50
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 47

def search_classes(name)
  keys = search_class_objects(name)
  @index.instance_variable_get(:@entries).values_at(*keys)
end

#search_objects(name, limit) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb', line 31

def search_objects(name, limit)
  @index.prefix_search(name)
    .take(MAX_LIMIT)
    .flatten
    .select{ _1.comments }
    .select{ _1.comments.to_s.lines.first&.chomp == REE_OBJECT_STRING }
    .sort_by{ _1.name.length }
    .take(limit)
end