ruby-lsp-ree 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,19 +5,17 @@ class RubyLsp::Ree::ParsedDocument
5
5
 
6
6
  LINK_DSL_MODULE = 'Ree::LinkDSL'
7
7
 
8
- attr_reader :ast, :package_name, :class_node, :fn_node, :fn_block_node, :class_includes,
9
- :link_nodes, :values, :action_node, :action_block_node, :dao_node, :dao_block_node, :filters
8
+ attr_reader :ast, :package_name, :class_node, :fn_node, :class_includes,
9
+ :link_nodes, :values, :action_node, :dao_node, :filters,
10
+ :bean_node, :bean_methods, :mapper_node, :links_container_block_node, :aggregate_node
10
11
 
11
12
  def initialize(ast)
12
13
  @ast = ast
13
14
  end
14
15
 
15
16
  def links_container_node
16
- @fn_node || @action_node || @dao_node
17
- end
18
-
19
- def links_container_block_node
20
- @fn_block_node || @action_block_node || @dao_block_node
17
+ # TODO don't use separate node, use one field for all and additional type field: links_container_node_type
18
+ @fn_node || @action_node || @dao_node || @bean_node || @mapper_node || @aggregate_node
21
19
  end
22
20
 
23
21
  def includes_link_dsl?
@@ -32,8 +30,24 @@ class RubyLsp::Ree::ParsedDocument
32
30
  @link_nodes.map(&:name).include?(obj_name)
33
31
  end
34
32
 
33
+ def find_link_node(name)
34
+ @link_nodes.detect{ _1.name == name }
35
+ end
36
+
37
+ def find_link_with_imported_object(name)
38
+ @link_nodes.detect do |link_node|
39
+ link_node.imports.include?(name)
40
+ end
41
+ end
42
+
43
+ def find_import_for_package(name, package_name)
44
+ @link_nodes.detect do |link_node|
45
+ link_node.imports.include?(name) && link_node.link_package_name == package_name
46
+ end
47
+ end
48
+
35
49
  def has_blank_links_container?
36
- links_container_node && !links_container_block_node
50
+ links_container_node && !@links_container_block_node
37
51
  end
38
52
 
39
53
  def set_package_name(package_name)
@@ -48,21 +62,42 @@ class RubyLsp::Ree::ParsedDocument
48
62
  return unless class_node
49
63
 
50
64
  @fn_node ||= class_node.body.body.detect{ |node| node.name == :fn }
51
- @fn_block_node = @fn_node&.block
65
+ @links_container_block_node ||= @fn_node&.block
52
66
  end
53
67
 
54
68
  def parse_action_node
55
69
  return unless class_node
56
70
 
57
71
  @action_node ||= class_node.body.body.detect{ |node| node.name == :action }
58
- @action_block_node = @action_node&.block
72
+ @links_container_block_node ||= @action_node&.block
59
73
  end
60
74
 
61
75
  def parse_dao_node
62
76
  return unless class_node
63
77
 
64
78
  @dao_node ||= class_node.body.body.detect{ |node| node.name == :dao }
65
- @dao_block_node = @dao_node&.block
79
+ @links_container_block_node ||= @dao_node&.block
80
+ end
81
+
82
+ def parse_bean_node
83
+ return unless class_node
84
+
85
+ @bean_node ||= class_node.body.body.detect{ |node| node.name == :bean }
86
+ @links_container_block_node ||= @bean_node&.block
87
+ end
88
+
89
+ def parse_mapper_node
90
+ return unless class_node
91
+
92
+ @mapper_node ||= class_node.body.body.detect{ |node| node.name == :mapper }
93
+ @links_container_block_node ||= @mapper_node&.block
94
+ end
95
+
96
+ def parse_aggregate_node
97
+ return unless class_node
98
+
99
+ @aggregate_node ||= class_node.body.body.detect{ |node| node.name == :aggregate }
100
+ @links_container_block_node ||= @aggregate_node&.block
66
101
  end
67
102
 
68
103
  def parse_class_includes
@@ -81,8 +116,8 @@ class RubyLsp::Ree::ParsedDocument
81
116
  def parse_links
82
117
  return unless class_node
83
118
 
84
- nodes = if links_container_node && links_container_block_node.body
85
- links_container_block_node.body.body.select{ |node| node.name == :link }
119
+ nodes = if links_container_node && @links_container_block_node.body
120
+ @links_container_block_node.body.body.select{ |node| node.name == :link }
86
121
  elsif class_includes.any?{ _1.name == LINK_DSL_MODULE }
87
122
  class_node.body.body.select{ |node| node.name == :link }
88
123
  else
@@ -113,13 +148,25 @@ class RubyLsp::Ree::ParsedDocument
113
148
 
114
149
  end
115
150
 
151
+ def parse_bean_methods
152
+ return unless class_node
153
+
154
+ @bean_methods ||= class_node.body.body
155
+ .select{ _1.is_a?(Prism::DefNode) }
156
+ .map{ OpenStruct.new(name: _1.name.to_s, signatures: parse_signatures_from_params(_1.parameters)) }
157
+ end
158
+
116
159
  def parse_filter_signature(filter_node)
117
160
  return [] unless filter_node
118
161
 
119
162
  lambda_node = filter_node.arguments&.arguments[1]
120
163
  return [] unless lambda_node
121
164
 
122
- signature_params = signature_params_from_node(lambda_node.parameters.parameters)
165
+ parse_signatures_from_params(lambda_node.parameters.parameters)
166
+ end
167
+
168
+ def parse_signatures_from_params(parameters)
169
+ signature_params = signature_params_from_node(parameters)
123
170
  [RubyIndexer::Entry::Signature.new(signature_params)]
124
171
  end
125
172
 
@@ -13,6 +13,14 @@ class RubyLsp::Ree::ParsedDocumentBuilder
13
13
  document
14
14
  end
15
15
 
16
+ def self.build_from_ast(ast, uri, type = nil)
17
+ document = build_document(ast, type)
18
+
19
+ document.set_package_name(package_name_from_uri(uri))
20
+
21
+ document
22
+ end
23
+
16
24
  def self.build_from_source(source, type = nil)
17
25
  ast = Prism.parse(source).value
18
26
  build_document(ast, type)
@@ -24,6 +32,8 @@ class RubyLsp::Ree::ParsedDocumentBuilder
24
32
  build_enum_document(ast)
25
33
  when :dao
26
34
  build_dao_document(ast)
35
+ when :bean
36
+ build_bean_document(ast)
27
37
  else
28
38
  build_regular_document(ast)
29
39
  end
@@ -35,6 +45,10 @@ class RubyLsp::Ree::ParsedDocumentBuilder
35
45
  document.parse_class_node
36
46
  document.parse_fn_node
37
47
  document.parse_action_node
48
+ document.parse_bean_node
49
+ document.parse_dao_node
50
+ document.parse_mapper_node
51
+ document.parse_aggregate_node
38
52
  document.parse_class_includes
39
53
  document.parse_links
40
54
 
@@ -57,5 +71,14 @@ class RubyLsp::Ree::ParsedDocumentBuilder
57
71
  document.parse_filters
58
72
 
59
73
  document
60
- end
74
+ end
75
+
76
+ def self.build_bean_document(ast)
77
+ document = RubyLsp::Ree::ParsedDocument.new(ast)
78
+
79
+ document.parse_class_node
80
+ document.parse_bean_methods
81
+
82
+ document
83
+ end
61
84
  end
@@ -13,7 +13,12 @@ class RubyLsp::Ree::ParsedLinkNode
13
13
  end
14
14
 
15
15
  def link_package_name
16
- from_arg_value || document_package
16
+ case link_type
17
+ when :object_name
18
+ from_arg_value || document_package
19
+ when :file_path
20
+ @name.split('/').first
21
+ end
17
22
  end
18
23
 
19
24
  def location
@@ -30,9 +35,32 @@ class RubyLsp::Ree::ParsedLinkNode
30
35
  @from_param.value.unescaped
31
36
  end
32
37
 
33
- def parse_name
34
- name_arg_node = @node.arguments.arguments.first
38
+ def name_arg_node
39
+ @node.arguments.arguments.first
40
+ end
35
41
 
42
+ def link_type
43
+ return @link_type if @link_type
44
+
45
+ @link_type = case name_arg_node
46
+ when Prism::SymbolNode
47
+ :object_name
48
+ when Prism::StringNode
49
+ :file_path
50
+ else
51
+ nil
52
+ end
53
+ end
54
+
55
+ def file_path_type?
56
+ link_type == :file_path
57
+ end
58
+
59
+ def object_name_type?
60
+ link_type == :object_name
61
+ end
62
+
63
+ def parse_name
36
64
  case name_arg_node
37
65
  when Prism::SymbolNode
38
66
  name_arg_node.value
@@ -3,33 +3,31 @@ module RubyLsp
3
3
  class ReeFormatter
4
4
  include RubyLsp::Requests::Support::Formatter
5
5
  include RubyLsp::Ree::ReeLspUtils
6
-
6
+
7
7
  def initialize
8
8
  end
9
-
9
+
10
10
  def run_formatting(uri, document)
11
- $stderr.puts("run_formating")
12
-
13
11
  source = document.source
14
12
  sort_links(source)
15
13
  end
16
-
14
+
17
15
  private
18
-
16
+
19
17
  def sort_links(source)
20
18
  parsed_doc = RubyLsp::Ree::ParsedDocumentBuilder.build_from_source(source)
21
- return source if parsed_doc.link_nodes.size == 0
22
-
19
+ return source if !parsed_doc.link_nodes&.any?
20
+
23
21
  if parsed_doc.link_nodes.any?{ _1.location.start_line != _1.location.end_line }
24
22
  $stderr.puts("multiline link definitions, don't sort")
25
23
  return source
26
24
  end
27
-
25
+
28
26
  # sort link nodes
29
27
  sorted_link_nodes = parsed_doc.link_nodes.sort{ |a, b|
30
28
  a_name = a.node.arguments.arguments.first
31
29
  b_name = b.node.arguments.arguments.first
32
-
30
+
33
31
  if a_name.is_a?(Prism::SymbolNode) && !b_name.is_a?(Prism::SymbolNode)
34
32
  -1
35
33
  elsif b_name.is_a?(Prism::SymbolNode) && !a_name.is_a?(Prism::SymbolNode)
@@ -38,25 +36,25 @@ module RubyLsp
38
36
  a_name.unescaped <=> b_name.unescaped
39
37
  end
40
38
  }
41
-
39
+
42
40
  # check if no re-order
43
41
  if parsed_doc.link_nodes.map{ _1.node.arguments.arguments.first.unescaped } == sorted_link_nodes.map{ _1.node.arguments.arguments.first.unescaped }
44
42
  return source
45
43
  end
46
-
44
+
47
45
  # insert nodes to source
48
46
  link_lines = parsed_doc.link_nodes.map{ _1.location.start_line }
49
-
47
+
50
48
  source_lines = source.lines
51
-
49
+
52
50
  sorted_lines = sorted_link_nodes.map do |sorted_link|
53
51
  source_lines[sorted_link.location.start_line - 1]
54
52
  end
55
-
53
+
56
54
  link_lines.each_with_index do |link_line, index|
57
55
  source_lines[link_line - 1] = sorted_lines[index]
58
56
  end
59
-
57
+
60
58
  source_lines.join()
61
59
  end
62
60
  end
@@ -1,12 +1,12 @@
1
1
  require 'prism'
2
- require_relative "ree_lsp_utils"
2
+ require_relative "utils/ree_lsp_utils"
3
3
 
4
4
  module RubyLsp
5
5
  module Ree
6
6
  class ReeIndexingEnhancement < RubyIndexer::Enhancement
7
7
  include RubyLsp::Ree::ReeLspUtils
8
8
 
9
- REE_INDEXED_OBJECTS = [:fn, :enum, :action, :dao]
9
+ REE_INDEXED_OBJECTS = [:fn, :enum, :action, :dao, :bean, :mapper, :aggregate]
10
10
 
11
11
  def on_call_node_enter(node)
12
12
  return unless @listener.current_owner
@@ -39,11 +39,11 @@ module RubyLsp
39
39
  class_node = ast.statements.body.detect{ |node| node.is_a?(Prism::ClassNode) }
40
40
  return [] unless class_node
41
41
 
42
- call_node = class_node.body.body.detect{ |node| node.name == :call }
42
+ call_node = class_node.body.body.detect{ |node| node.respond_to?(:name) && node.name == :call }
43
43
  return [] unless call_node
44
-
44
+
45
45
  signature_params = signature_params_from_node(call_node.parameters)
46
-
46
+
47
47
  [RubyIndexer::Entry::Signature.new(signature_params)]
48
48
  end
49
49
 
@@ -1,33 +1,92 @@
1
1
  module RubyLsp
2
2
  module Ree
3
3
  class ReeObjectFinder
4
- MAX_LIMIT = 100
4
+ MAX_LIMIT = 1000
5
5
 
6
6
  REE_OBJECT_STRING = 'ree_object'
7
7
  ENUM_TYPE_STRING = 'type: :enum'
8
8
  DAO_TYPE_STRING = 'type: :dao'
9
+ BEAN_TYPE_STRING = 'type: :bean'
10
+ MAPPER_TYPE_STRING = 'type: :mapper'
11
+ AGGREGATE_TYPE_STRING = 'type: :aggregate'
9
12
 
10
- def self.search_objects(index, name, limit)
11
- index.prefix_search(name)
12
- .take(MAX_LIMIT).map(&:first)
13
+ def initialize(index)
14
+ @index = index
15
+ end
16
+
17
+ def search_objects(name, limit)
18
+ @index.prefix_search(name)
19
+ .take(MAX_LIMIT)
20
+ .flatten
13
21
  .select{ _1.comments }
14
22
  .select{ _1.comments.to_s.lines.first&.chomp == REE_OBJECT_STRING }
23
+ .sort_by{ _1.name.length }
15
24
  .take(limit)
16
25
  end
17
26
 
18
- def self.find_enum(index, name)
19
- objects_by_name = index[name]
27
+ def search_class_objects(name)
28
+ @index
29
+ .names
30
+ .select{ _1.split('::').last[0...name.size] == name}
31
+ end
32
+
33
+ def search_classes(name)
34
+ keys = search_class_objects(name)
35
+ @index.instance_variable_get(:@entries).values_at(*keys)
36
+ end
37
+
38
+ def find_object(name)
39
+ objects_by_name = @index[name]
40
+ return unless objects_by_name
41
+
42
+ objects_by_name.detect{ _1.comments.to_s.lines.first&.chomp == REE_OBJECT_STRING }
43
+ end
44
+
45
+ def find_objects_by_types(name, types)
46
+ objects_by_name = @index[name]
47
+ return [] unless objects_by_name
48
+
49
+ objects_by_name.select{ types.include?(object_type(_1)) }
50
+ end
51
+
52
+ def find_enum(name)
53
+ objects_by_name = @index[name]
20
54
  return unless objects_by_name
21
55
 
22
56
  objects_by_name.detect{ _1.comments.lines[1]&.chomp == ENUM_TYPE_STRING }
23
57
  end
24
58
 
25
- def self.find_dao(index, name)
26
- objects_by_name = index[name]
59
+ def find_dao(name)
60
+ objects_by_name = @index[name]
27
61
  return unless objects_by_name
28
62
 
29
63
  objects_by_name.detect{ _1.comments.lines[1]&.chomp == DAO_TYPE_STRING }
30
64
  end
65
+
66
+ def find_bean(index, name)
67
+ objects_by_name = @index[name]
68
+ return unless objects_by_name
69
+
70
+ objects_by_name.detect{ _1.comments.lines[1]&.chomp == BEAN_TYPE_STRING }
71
+ end
72
+
73
+ def object_type(ree_object)
74
+ # TODO rewrite to use string split
75
+ case ree_object.comments.lines[1]&.chomp
76
+ when DAO_TYPE_STRING
77
+ :dao
78
+ when BEAN_TYPE_STRING
79
+ :bean
80
+ when ENUM_TYPE_STRING
81
+ :enum
82
+ when MAPPER_TYPE_STRING
83
+ :mapper
84
+ when AGGREGATE_TYPE_STRING
85
+ :aggregate
86
+ else
87
+ nil
88
+ end
89
+ end
31
90
  end
32
91
  end
33
92
  end
@@ -3,16 +3,27 @@ module RubyLsp
3
3
  module ReeLspUtils
4
4
  Entry = RubyIndexer::Entry
5
5
 
6
+ def find_local_file_path(file_path)
7
+ file_name = file_path + ".rb"
8
+ Dir[File.join('**', file_name)].first
9
+ end
10
+
6
11
  def package_name_from_uri(uri)
7
12
  uri_parts = uri.to_s.split('/')
8
- package_index = uri_parts.find_index('package') + 1
9
- uri_parts[package_index]
13
+
14
+ package_folder_index = uri_parts.find_index('package')
15
+ return unless package_folder_index
16
+
17
+ uri_parts[package_folder_index + 1]
10
18
  end
11
19
 
12
- def path_from_package(uri)
13
- uri_parts = uri.chomp(File.extname(uri)).split('/')
14
- pack_folder_index = uri_parts.index('package')
15
- uri_parts.drop(pack_folder_index+1).join('/')
20
+ def path_from_package_folder(uri)
21
+ uri_parts = uri.to_s.chomp(File.extname(uri)).split('/')
22
+
23
+ package_folder_index = uri_parts.index('package')
24
+ return unless package_folder_index
25
+
26
+ uri_parts.drop(package_folder_index+1).join('/')
16
27
  end
17
28
 
18
29
  def get_ree_type(ree_object)
@@ -38,6 +49,8 @@ module RubyLsp
38
49
  elsif parsed_doc.includes_link_dsl?
39
50
  fn_line = parsed_doc.link_nodes.first.location.start_line - 1
40
51
  position = parsed_doc.link_nodes.first.location.start_column
52
+ else
53
+ return nil
41
54
  end
42
55
 
43
56
  Interface::Range.new(
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Ruby
4
- module Lsp
5
- module Ree
6
- VERSION = "0.1.1"
7
- end
3
+ module RubyLsp
4
+ module Ree
5
+ VERSION = "0.1.3"
8
6
  end
9
7
  end
data/ruby-lsp-ree.gemspec CHANGED
@@ -4,7 +4,7 @@ require_relative "lib/ruby_lsp_ree/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "ruby-lsp-ree"
7
- spec.version = Ruby::Lsp::Ree::VERSION
7
+ spec.version = RubyLsp::Ree::VERSION
8
8
  spec.authors = ["Ruslan Gatiyatov"]
9
9
  spec.email = ["ruslan.gatiyatov@gmail.com"]
10
10
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lsp-ree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-02-10 00:00:00.000000000 Z
11
+ date: 2025-02-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A Ruby LSP addon that adds extra editor functionality for Ree applications
14
14
  email:
@@ -17,6 +17,7 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
+ - ".ruby-version"
20
21
  - CHANGELOG.md
21
22
  - CODE_OF_CONDUCT.md
22
23
  - Gemfile
@@ -25,16 +26,17 @@ files:
25
26
  - README.md
26
27
  - Rakefile
27
28
  - lib/ruby_lsp/ruby_lsp_ree/addon.rb
28
- - lib/ruby_lsp/ruby_lsp_ree/completion.rb
29
- - lib/ruby_lsp/ruby_lsp_ree/completion_utils.rb
30
- - lib/ruby_lsp/ruby_lsp_ree/definition.rb
29
+ - lib/ruby_lsp/ruby_lsp_ree/handlers/completion_handler.rb
30
+ - lib/ruby_lsp/ruby_lsp_ree/listeners/completion_listener.rb
31
+ - lib/ruby_lsp/ruby_lsp_ree/listeners/definition_listener.rb
32
+ - lib/ruby_lsp/ruby_lsp_ree/listeners/hover_listener.rb
31
33
  - lib/ruby_lsp/ruby_lsp_ree/parsing/parsed_document.rb
32
34
  - lib/ruby_lsp/ruby_lsp_ree/parsing/parsed_document_builder.rb
33
35
  - lib/ruby_lsp/ruby_lsp_ree/parsing/parsed_link_node.rb
34
36
  - lib/ruby_lsp/ruby_lsp_ree/ree_formatter.rb
35
37
  - lib/ruby_lsp/ruby_lsp_ree/ree_indexing_enhancement.rb
36
- - lib/ruby_lsp/ruby_lsp_ree/ree_lsp_utils.rb
37
38
  - lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb
39
+ - lib/ruby_lsp/ruby_lsp_ree/utils/ree_lsp_utils.rb
38
40
  - lib/ruby_lsp_ree.rb
39
41
  - lib/ruby_lsp_ree/version.rb
40
42
  - ruby-lsp-ree.gemspec
@@ -61,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
63
  - !ruby/object:Gem::Version
62
64
  version: '0'
63
65
  requirements: []
64
- rubygems_version: 3.4.1
66
+ rubygems_version: 3.5.3
65
67
  signing_key:
66
68
  specification_version: 4
67
69
  summary: Ruby LSP addon for Ree framework.
@@ -1,90 +0,0 @@
1
- require_relative "ree_lsp_utils"
2
- require_relative "completion_utils"
3
- require_relative "ree_object_finder"
4
-
5
- module RubyLsp
6
- module Ree
7
- class Completion
8
- include Requests::Support::Common
9
- include RubyLsp::Ree::ReeLspUtils
10
- include RubyLsp::Ree::CompletionUtils
11
-
12
- CHARS_COUNT = 3
13
- CANDIDATES_LIMIT = 20
14
-
15
- def initialize(response_builder, node_context, index, dispatcher, uri)
16
- @response_builder = response_builder
17
- @index = index
18
- @uri = uri
19
- @node_context = node_context
20
-
21
- dispatcher.register(self, :on_call_node_enter)
22
- dispatcher.register(self, :on_constant_read_node_enter)
23
- end
24
-
25
- def on_constant_read_node_enter(node)
26
- node_name = node.name.to_s
27
- return if node_name.size < CHARS_COUNT
28
-
29
- class_name_objects = @index.instance_variable_get(:@entries).keys.select{ _1.split('::').last[0...node_name.size] == node_name}
30
- return if class_name_objects.size == 0
31
-
32
- parsed_doc = RubyLsp::Ree::ParsedDocumentBuilder.build_from_uri(@uri)
33
-
34
- completion_items = get_class_name_completion_items(class_name_objects, parsed_doc, node, @index, CANDIDATES_LIMIT)
35
- puts_items_into_response(completion_items)
36
- end
37
-
38
- def on_call_node_enter(node)
39
- if receiver_is_enum?(node)
40
- return enum_value_completion(node)
41
- end
42
-
43
- if receiver_is_dao?(node)
44
- return dao_filter_completion(node)
45
- end
46
-
47
- return if node.receiver
48
- return if node.name.to_s.size < CHARS_COUNT
49
-
50
- ree_objects = ReeObjectFinder.search_objects(@index, node.name.to_s, CANDIDATES_LIMIT)
51
- return if ree_objects.size == 0
52
-
53
- parsed_doc = RubyLsp::Ree::ParsedDocumentBuilder.build_from_uri(@uri)
54
-
55
- completion_items = get_ree_objects_completions_items(ree_objects, parsed_doc, node)
56
- puts_items_into_response(completion_items)
57
- end
58
-
59
- def receiver_is_enum?(node)
60
- node.receiver && node.receiver.is_a?(Prism::CallNode) && ReeObjectFinder.find_enum(@index, node.receiver.name.to_s)
61
- end
62
-
63
- def receiver_is_dao?(node)
64
- node.receiver && node.receiver.is_a?(Prism::CallNode) && ReeObjectFinder.find_dao(@index, node.receiver.name.to_s)
65
- end
66
-
67
- def enum_value_completion(node)
68
- enum_obj = ReeObjectFinder.find_enum(@index, node.receiver.name.to_s)
69
- location = node.receiver.location
70
-
71
- completion_items = get_enum_values_completion_items(enum_obj, location)
72
- puts_items_into_response(completion_items)
73
- end
74
-
75
- def dao_filter_completion(node)
76
- dao_obj = ReeObjectFinder.find_dao(@index, node.receiver.name.to_s)
77
- location = node.receiver.location
78
-
79
- completion_items = get_dao_filters_completion_items(dao_obj, location)
80
- puts_items_into_response(completion_items)
81
- end
82
-
83
- def puts_items_into_response(items)
84
- items.each do |item|
85
- @response_builder << item
86
- end
87
- end
88
- end
89
- end
90
- end