ruby-lsp-ree 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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