ruby-lsp-ree 0.1.2 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1104f2c78afb874d9277a4e2d1c8b5adaf925bdb4fb9abb23b08a9e5a27aff9
4
- data.tar.gz: 061f2b31a9aac045d279797b7561597db1825e396547b5afd94d6bfc4015af1e
3
+ metadata.gz: a1d126a7d0c8462f33b63113cf86ae134f8cb029da147273bdb2f8cb76cb448e
4
+ data.tar.gz: dbb25c53fc012b487a3ed9555ad470c10445603e808aa3f44442070b4fc57851
5
5
  SHA512:
6
- metadata.gz: 7f29b69bb720eadc44261c63719ca950cec24db996d0d4d83117c20c3a145bb6be8934420acb850ba92841feefe4985f0e0c1caa7129cd50a41a4419f3a2ca1e
7
- data.tar.gz: fea1f33dd0bcdfe401afe15304797fca57c254cf8472b34a8ef40d7f011d2bb60edb1010177129671fcbfc0f7ca69b212832c2c70ef8b8f125025a20be0ca17a
6
+ metadata.gz: 50d85fbda0c61e33709823c7e8b5f263d94eba2d6822b1e84f011ad0b058adf6d5766a5fe27b6613c537b2e36f878a8ef50ddf7fad7dd41cfd954011fe90c156
7
+ data.tar.gz: 66c76a82263258d76fcc7cc604e6aa499deb209ae80c6ae8a5bad1dd486f7ee70c9e0af896277c0cc01631ad99c91f5b5b827e18337b0d95e4d18622d1c2c389
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.0
data/CHANGELOG.md CHANGED
@@ -1,8 +1,26 @@
1
- ## [Unreleased]
1
+ ## [0.1.4] - 2025-02-25
2
2
 
3
- ## [0.1.0] - 2025-01-31
3
+ - autocompletion in spec files
4
+ - Add Link in spec files
5
+ - improved support of new files and unsaved documents
4
6
 
5
- - Initial release
7
+ ## [0.1.3] - 2025-02-21
8
+
9
+ - improved Go To Definition for ree object methods and imported constants
10
+ - support for :mapper objects
11
+ - support for :aggregate objects
12
+ - improved autocompletion for imported constants
13
+ - basic hover information for ree objects
14
+
15
+ ## [0.1.2] - 2025-02-14
16
+
17
+ - support for :bean objects
18
+ - Go To Definition for imported constants
19
+ - use current (not saved) version of the document in autocomplete
20
+ - use current (not saved) version of the document in definition
21
+ - increase autocomplete list limits (affects short functions)
22
+ - improved const autocomplete
23
+ - improved ree errors handling
6
24
 
7
25
  ## [0.1.1] - 2025-02-10
8
26
 
@@ -21,12 +39,8 @@
21
39
  - autocomplete for ree dao
22
40
  - autocomplete for dao filters
23
41
 
24
- ## [0.1.2] - 2025-02-14
42
+ ## [0.1.0] - 2025-01-31
25
43
 
26
- - support for :bean objects
27
- - Go To Definition for imported constants
28
- - use current (no saved) version of the document in autocomplete
29
- - use current (no saved) version of the document in definition
30
- - increase autocomplete list limits (affects short functions)
31
- - improved const autocomplete
32
- - improved ree errors handling
44
+ - Initial release
45
+
46
+ ## [Unreleased]
data/Gemfile CHANGED
@@ -6,3 +6,9 @@ source "https://rubygems.org"
6
6
  gemspec
7
7
 
8
8
  gem "rake", "~> 13.0"
9
+
10
+ group :test do
11
+ gem 'rspec'
12
+ gem 'ruby-lsp'
13
+ gem "sorbet-static-and-runtime"
14
+ end
data/Gemfile.lock CHANGED
@@ -1,12 +1,44 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-lsp-ree (0.1.2)
4
+ ruby-lsp-ree (0.1.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ diff-lcs (1.6.0)
10
+ language_server-protocol (3.17.0.4)
11
+ logger (1.6.6)
12
+ prism (1.3.0)
9
13
  rake (13.2.1)
14
+ rbs (3.8.1)
15
+ logger
16
+ rspec (3.13.0)
17
+ rspec-core (~> 3.13.0)
18
+ rspec-expectations (~> 3.13.0)
19
+ rspec-mocks (~> 3.13.0)
20
+ rspec-core (3.13.3)
21
+ rspec-support (~> 3.13.0)
22
+ rspec-expectations (3.13.3)
23
+ diff-lcs (>= 1.2.0, < 2.0)
24
+ rspec-support (~> 3.13.0)
25
+ rspec-mocks (3.13.2)
26
+ diff-lcs (>= 1.2.0, < 2.0)
27
+ rspec-support (~> 3.13.0)
28
+ rspec-support (3.13.2)
29
+ ruby-lsp (0.23.11)
30
+ language_server-protocol (~> 3.17.0)
31
+ prism (>= 1.2, < 2.0)
32
+ rbs (>= 3, < 4)
33
+ sorbet-runtime (>= 0.5.10782)
34
+ sorbet (0.5.11835)
35
+ sorbet-static (= 0.5.11835)
36
+ sorbet-runtime (0.5.11835)
37
+ sorbet-static (0.5.11835-universal-darwin)
38
+ sorbet-static (0.5.11835-x86_64-linux)
39
+ sorbet-static-and-runtime (0.5.11835)
40
+ sorbet (= 0.5.11835)
41
+ sorbet-runtime (= 0.5.11835)
10
42
 
11
43
  PLATFORMS
12
44
  x86_64-darwin-23
@@ -14,7 +46,10 @@ PLATFORMS
14
46
 
15
47
  DEPENDENCIES
16
48
  rake (~> 13.0)
49
+ rspec
50
+ ruby-lsp
17
51
  ruby-lsp-ree!
52
+ sorbet-static-and-runtime
18
53
 
19
54
  BUNDLED WITH
20
55
  2.6.3
data/Rakefile CHANGED
@@ -1,4 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
- task default: %i[]
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: %i[spec]
@@ -1,8 +1,9 @@
1
1
  require "ruby_lsp/addon"
2
- require_relative "definition"
3
- require_relative "completion"
2
+ require_relative "listeners/definition_listener"
3
+ require_relative "listeners/completion_listener"
4
+ require_relative "listeners/hover_listener"
4
5
  require_relative "ree_indexing_enhancement"
5
- require_relative "ree_lsp_utils"
6
+ require_relative "utils/ree_lsp_utils"
6
7
  require_relative "ree_formatter"
7
8
  require_relative "parsing/parsed_document_builder"
8
9
 
@@ -25,12 +26,17 @@ module RubyLsp
25
26
 
26
27
  def create_definition_listener(response_builder, uri, node_context, dispatcher)
27
28
  index = @global_state.index
28
- RubyLsp::Ree::Definition.new(response_builder, node_context, index, dispatcher, uri)
29
+ RubyLsp::Ree::DefinitionListener.new(response_builder, node_context, index, dispatcher, uri)
29
30
  end
30
31
 
31
32
  def create_completion_listener(response_builder, node_context, dispatcher, uri)
32
33
  index = @global_state.index
33
- RubyLsp::Ree::Completion.new(response_builder, node_context, index, dispatcher, uri)
34
+ RubyLsp::Ree::CompletionListener.new(response_builder, node_context, index, dispatcher, uri)
35
+ end
36
+
37
+ def create_hover_listener(response_builder, node_context, dispatcher)
38
+ index = @global_state.index
39
+ RubyLsp::Ree::HoverListener.new(response_builder, node_context, index, dispatcher)
34
40
  end
35
41
  end
36
42
  end
@@ -1,11 +1,44 @@
1
- require_relative "ree_lsp_utils"
1
+ require_relative "../utils/ree_lsp_utils"
2
+ require_relative "../ree_object_finder"
2
3
 
3
4
  module RubyLsp
4
5
  module Ree
5
- module CompletionUtils
6
+ class CompletionHandler
6
7
  include Requests::Support::Common
7
8
  include RubyLsp::Ree::ReeLspUtils
8
9
 
10
+ RECEIVER_OBJECT_TYPES = [:enum, :dao, :bean]
11
+ CANDIDATES_LIMIT = 100
12
+
13
+ def initialize(index, uri, node_context)
14
+ @index = index
15
+ @uri = uri
16
+ @node_context = node_context
17
+ @root_node = @node_context.instance_variable_get(:@nesting_nodes).first
18
+ @finder = ReeObjectFinder.new(@index)
19
+ end
20
+
21
+ def get_ree_receiver(receiver_node)
22
+ return if !receiver_node || !receiver_node.is_a?(Prism::CallNode)
23
+
24
+ @finder.find_objects_by_types(receiver_node.name.to_s, RECEIVER_OBJECT_TYPES).first
25
+ end
26
+
27
+ def get_ree_object_methods_completions_items(ree_receiver, receiver_node, node)
28
+ location = receiver_node.location
29
+
30
+ case @finder.object_type(ree_receiver)
31
+ when :enum
32
+ get_enum_values_completion_items(ree_receiver, location)
33
+ when :bean
34
+ get_bean_methods_completion_items(ree_receiver, location)
35
+ when :dao
36
+ get_dao_filters_completion_items(ree_receiver, location)
37
+ else
38
+ []
39
+ end
40
+ end
41
+
9
42
  def get_bean_methods_completion_items(bean_obj, location)
10
43
  bean_node = RubyLsp::Ree::ParsedDocumentBuilder.build_from_uri(bean_obj.uri, :bean)
11
44
 
@@ -107,34 +140,75 @@ module RubyLsp
107
140
  end
108
141
  end
109
142
 
110
- def get_class_name_completion_items(class_name_objects, parsed_doc, node, index, limit)
111
- class_name_objects.take(limit).map do |full_class_name|
112
- entry = index[full_class_name].first
113
- class_name = full_class_name.split('::').last
114
-
115
- package_name = package_name_from_uri(entry.uri)
116
- file_name = File.basename(entry.uri.to_s)
117
-
118
- label_details = Interface::CompletionItemLabelDetails.new(
119
- description: "from: :#{package_name}",
120
- detail: " #{file_name}"
121
- )
122
-
123
- Interface::CompletionItem.new(
124
- label: class_name,
125
- label_details: label_details,
126
- filter_text: class_name,
127
- text_edit: Interface::TextEdit.new(
128
- range: range_from_location(node.location),
129
- new_text: class_name,
130
- ),
131
- kind: Constant::CompletionItemKind::CLASS,
132
- additional_text_edits: get_additional_text_edits_for_constant(parsed_doc, class_name, package_name, entry)
133
- )
143
+ def get_class_name_completion_items(node)
144
+ node_name = node.name.to_s
145
+ class_name_objects = @finder.search_class_objects(node_name)
146
+
147
+ return [] if class_name_objects.size == 0
148
+
149
+ parsed_doc = RubyLsp::Ree::ParsedDocumentBuilder.build_from_ast(@root_node, @uri)
150
+
151
+ imported_consts = []
152
+ not_imported_consts = []
153
+
154
+ class_name_objects.take(CANDIDATES_LIMIT).each do |full_class_name|
155
+ entries = @index[full_class_name]
156
+
157
+ entries.each do |entry|
158
+ class_name = full_class_name.split('::').last
159
+ package_name = package_name_from_uri(entry.uri)
160
+ file_name = File.basename(entry.uri.to_s)
161
+
162
+ matched_import = parsed_doc.find_import_for_package(class_name, package_name)
163
+
164
+ if matched_import
165
+ label_details = Interface::CompletionItemLabelDetails.new(
166
+ description: "imported from: :#{package_name}",
167
+ detail: ""
168
+ )
169
+
170
+ imported_consts << Interface::CompletionItem.new(
171
+ label: class_name,
172
+ label_details: label_details,
173
+ filter_text: class_name,
174
+ text_edit: Interface::TextEdit.new(
175
+ range: range_from_location(node.location),
176
+ new_text: class_name,
177
+ ),
178
+ kind: Constant::CompletionItemKind::CLASS,
179
+ additional_text_edits: []
180
+ )
181
+ else
182
+ label_details = Interface::CompletionItemLabelDetails.new(
183
+ description: "from: :#{package_name}",
184
+ detail: " #{file_name}"
185
+ )
186
+
187
+ not_imported_consts << Interface::CompletionItem.new(
188
+ label: class_name,
189
+ label_details: label_details,
190
+ filter_text: class_name,
191
+ text_edit: Interface::TextEdit.new(
192
+ range: range_from_location(node.location),
193
+ new_text: class_name,
194
+ ),
195
+ kind: Constant::CompletionItemKind::CLASS,
196
+ additional_text_edits: get_additional_text_edits_for_constant(parsed_doc, class_name, package_name, entry)
197
+ )
198
+ end
199
+ end
134
200
  end
201
+
202
+ imported_consts + not_imported_consts
135
203
  end
136
204
 
137
- def get_ree_objects_completions_items(ree_objects, parsed_doc, node)
205
+ def get_ree_objects_completions_items(node)
206
+ ree_objects = @finder.search_objects(node.name.to_s, CANDIDATES_LIMIT)
207
+
208
+ return [] if ree_objects.size == 0
209
+
210
+ parsed_doc = RubyLsp::Ree::ParsedDocumentBuilder.build_from_ast(@root_node, @uri)
211
+
138
212
  ree_objects.map do |ree_object|
139
213
  ree_object_name = ree_object.name
140
214
  package_name = package_name_from_uri(ree_object.uri)
@@ -233,6 +307,8 @@ module RubyLsp
233
307
  end
234
308
 
235
309
  def get_additional_text_edits_for_method(parsed_doc, fn_name, package_name)
310
+ return [] unless parsed_doc
311
+
236
312
  if parsed_doc.includes_linked_object?(fn_name)
237
313
  return []
238
314
  end
@@ -254,6 +330,7 @@ module RubyLsp
254
330
  end
255
331
 
256
332
  range = get_range_for_fn_insert(parsed_doc, link_text)
333
+ return unless range
257
334
 
258
335
  [
259
336
  Interface::TextEdit.new(
@@ -1,30 +1,36 @@
1
- require_relative "ree_lsp_utils"
2
- require_relative "parsing/parsed_link_node"
1
+ require_relative "../utils/ree_lsp_utils"
2
+ require_relative "../ree_object_finder"
3
+ require_relative "../parsing/parsed_link_node"
4
+ require_relative "../parsing/parsed_document_builder"
3
5
 
4
6
  module RubyLsp
5
7
  module Ree
6
- class Definition
8
+ class DefinitionHandler
7
9
  include Requests::Support::Common
8
10
  include RubyLsp::Ree::ReeLspUtils
9
11
 
10
- def initialize(response_builder, node_context, index, dispatcher, uri)
11
- @response_builder = response_builder
12
- @node_context = node_context
13
- @nesting = node_context.nesting
12
+ def initialize(index, uri, node_context)
14
13
  @index = index
15
14
  @uri = uri
16
-
17
- dispatcher.register(self, :on_call_node_enter, :on_symbol_node_enter, :on_string_node_enter, :on_constant_read_node_enter)
15
+ @node_context = node_context
16
+ @finder = ReeObjectFinder.new(@index)
18
17
  end
19
18
 
20
- def on_constant_read_node_enter(node)
21
- link_nodes = if @node_context.parent.is_a?(Prism::CallNode)
19
+ def get_constant_definition_items(node)
20
+ result = []
21
+
22
+ link_nodes = if @node_context.parent.is_a?(Prism::CallNode) && @node_context.parent.name == :link
22
23
  # inside link node
23
24
  link_node = RubyLsp::Ree::ParsedLinkNode.new(@node_context.parent)
24
25
  link_node.parse_imports
25
26
  [link_node]
26
27
  else
27
- parsed_doc = RubyLsp::Ree::ParsedDocumentBuilder.build_from_ast(@node_context.parent, @uri)
28
+ parsed_doc = if @node_context.parent.is_a?(Prism::CallNode)
29
+ RubyLsp::Ree::ParsedDocumentBuilder.build_from_uri(@uri)
30
+ else
31
+ RubyLsp::Ree::ParsedDocumentBuilder.build_from_ast(@node_context.parent, @uri)
32
+ end
33
+
28
34
  parsed_doc.link_nodes
29
35
  end
30
36
 
@@ -48,7 +54,7 @@ module RubyLsp
48
54
  uri = method.uri.to_s
49
55
  end
50
56
 
51
- @response_builder << Interface::Location.new(
57
+ result << Interface::Location.new(
52
58
  uri: uri,
53
59
  range: Interface::Range.new(
54
60
  start: Interface::Position.new(line: 0, character: 0),
@@ -57,40 +63,46 @@ module RubyLsp
57
63
  )
58
64
  end
59
65
  end
66
+
67
+ result
60
68
  end
61
69
 
62
- def on_call_node_enter(node)
70
+ def get_ree_objects_definition_items(node)
63
71
  message = node.message
64
- return unless message
72
+ result = []
73
+
74
+ definition_item = ReeObjectFinder.new(@index).find_object(message)
75
+ return [] unless definition_item
65
76
 
66
- method = @index[message].detect{ !_1.location.nil? }
67
- return unless method
77
+ definition_uri = definition_item.uri.to_s
78
+ return [] unless definition_uri
68
79
 
69
- @response_builder << Interface::Location.new(
70
- uri: method.uri.to_s,
80
+ result << Interface::Location.new(
81
+ uri: definition_uri,
71
82
  range: Interface::Range.new(
72
83
  start: Interface::Position.new(line: 0, character: 0),
73
84
  end: Interface::Position.new(line: 0, character: 0),
74
85
  ),
75
86
  )
76
87
 
77
- nil
88
+ result
78
89
  end
79
90
 
80
- def on_symbol_node_enter(node)
91
+ def get_linked_object_definition_items(node)
92
+ result = []
81
93
  parent_node = @node_context.parent
82
- return unless parent_node.name == :link
94
+ return [] unless parent_node.name == :link
83
95
 
84
96
  link_node = RubyLsp::Ree::ParsedLinkNode.new(parent_node, package_name_from_uri(@uri))
85
97
  package_name = link_node.link_package_name
86
98
 
87
99
  method_candidates = @index[node.unescaped]
88
- return if !method_candidates || method_candidates.size == 0
100
+ return [] if !method_candidates || method_candidates.size == 0
89
101
 
90
102
  method = method_candidates.detect{ package_name_from_uri(_1.uri) == package_name }
91
- return unless method
103
+ return [] unless method
92
104
 
93
- @response_builder << Interface::Location.new(
105
+ result << Interface::Location.new(
94
106
  uri: method.uri.to_s,
95
107
  range: Interface::Range.new(
96
108
  start: Interface::Position.new(line: 0, character: 0),
@@ -98,23 +110,22 @@ module RubyLsp
98
110
  ),
99
111
  )
100
112
 
101
- nil
113
+ result
102
114
  end
103
115
 
104
- def on_string_node_enter(node)
116
+ def get_linked_filepath_definition_items(node)
117
+ result = []
105
118
  local_path = find_local_file_path(node.unescaped)
106
119
 
107
- if local_path
108
- @response_builder << Interface::Location.new(
109
- uri: File.join(Dir.pwd, local_path),
110
- range: Interface::Range.new(
111
- start: Interface::Position.new(line: 0, character: 0),
112
- end: Interface::Position.new(line: 0, character: 0),
113
- ),
114
- )
115
- end
120
+ return [] unless local_path
116
121
 
117
- nil
122
+ result << Interface::Location.new(
123
+ uri: File.join(Dir.pwd, local_path),
124
+ range: Interface::Range.new(
125
+ start: Interface::Position.new(line: 0, character: 0),
126
+ end: Interface::Position.new(line: 0, character: 0),
127
+ ),
128
+ )
118
129
  end
119
130
  end
120
131
  end
@@ -0,0 +1,49 @@
1
+ require_relative "../ree_object_finder"
2
+ require_relative "../parsing/parsed_document_builder"
3
+ require_relative "../parsing/parsed_link_node"
4
+ require_relative "../utils/ree_lsp_utils"
5
+
6
+ module RubyLsp
7
+ module Ree
8
+ class HoverHandler
9
+ include Requests::Support::Common
10
+ include RubyLsp::Ree::ReeLspUtils
11
+
12
+ def initialize(index, node_context)
13
+ @index = index
14
+ @node_context = node_context
15
+ @finder = ReeObjectFinder.new(@index)
16
+ end
17
+
18
+ def get_ree_object_hover_items(node)
19
+ ree_object = @finder.find_object(node.name.to_s)
20
+
21
+ return [] unless ree_object
22
+
23
+ documentation = <<~DOC
24
+ Ree object, type: :#{@finder.object_type(ree_object)}
25
+
26
+ usage: #{node.name.to_s}#{get_detail_string(ree_object)}
27
+
28
+ package: #{package_name_from_uri(ree_object.uri)}
29
+
30
+ file: #{path_from_package_folder(ree_object.uri)}
31
+ DOC
32
+
33
+ [documentation]
34
+ end
35
+
36
+ def get_detail_string(ree_object)
37
+ return '' if ree_object.signatures.size == 0
38
+
39
+ "(#{get_parameters_string(ree_object.signatures.first)})"
40
+ end
41
+
42
+ def get_parameters_string(signature)
43
+ return '' unless signature
44
+
45
+ signature.parameters.map(&:decorated_name).join(', ')
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,53 @@
1
+ require_relative "../handlers/completion_handler"
2
+
3
+ module RubyLsp
4
+ module Ree
5
+ class CompletionListener
6
+ include Requests::Support::Common
7
+
8
+ CHARS_COUNT = 1
9
+
10
+ def initialize(response_builder, node_context, index, dispatcher, uri)
11
+ @response_builder = response_builder
12
+ @handler = RubyLsp::Ree::CompletionHandler.new(index, uri, node_context)
13
+
14
+ dispatcher.register(self, :on_call_node_enter)
15
+ dispatcher.register(self, :on_constant_read_node_enter)
16
+ end
17
+
18
+ def on_constant_read_node_enter(node)
19
+ node_name = node.name.to_s
20
+ return if node_name.size < CHARS_COUNT
21
+
22
+ completion_items = @handler.get_class_name_completion_items(node)
23
+ put_items_into_response(completion_items)
24
+ rescue => e
25
+ $stderr.puts("error in completion listener(on_constant_read_node_enter): #{e.message} : #{e.backtrace.first}")
26
+ end
27
+
28
+ def on_call_node_enter(node)
29
+ completion_items = []
30
+ ree_receiver = @handler.get_ree_receiver(node.receiver)
31
+
32
+ if ree_receiver
33
+ completion_items = @handler.get_ree_object_methods_completions_items(ree_receiver, node.receiver, node)
34
+ else
35
+ return if node.receiver
36
+ return if node.name.to_s.size < CHARS_COUNT
37
+
38
+ completion_items = @handler.get_ree_objects_completions_items(node)
39
+ end
40
+
41
+ put_items_into_response(completion_items)
42
+ rescue => e
43
+ $stderr.puts("error in completion listener(on_call_node_enter): #{e.message} : #{e.backtrace.first}")
44
+ end
45
+
46
+ def put_items_into_response(items)
47
+ items.each do |item|
48
+ @response_builder << item
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,63 @@
1
+ require_relative "../handlers/definition_handler"
2
+
3
+ module RubyLsp
4
+ module Ree
5
+ class DefinitionListener
6
+ include Requests::Support::Common
7
+
8
+ def initialize(response_builder, node_context, index, dispatcher, uri)
9
+ @response_builder = response_builder
10
+ @handler = RubyLsp::Ree::DefinitionHandler.new(index, uri, node_context)
11
+
12
+ dispatcher.register(
13
+ self,
14
+ :on_call_node_enter,
15
+ :on_symbol_node_enter,
16
+ :on_string_node_enter,
17
+ :on_constant_read_node_enter
18
+ )
19
+ end
20
+
21
+ def on_constant_read_node_enter(node)
22
+ definition_items = @handler.get_constant_definition_items(node)
23
+ put_items_into_response(definition_items)
24
+ rescue => e
25
+ $stderr.puts("error in definition listener(on_constant_read_node_enter): #{e.message} : #{e.backtrace.first}")
26
+ end
27
+
28
+ def on_call_node_enter(node)
29
+ return unless node.message
30
+
31
+ if node.receiver
32
+ # ruby lsp handles such cases itself
33
+ return
34
+ else
35
+ definition_items = @handler.get_ree_objects_definition_items(node)
36
+ put_items_into_response(definition_items)
37
+ end
38
+ rescue => e
39
+ $stderr.puts("error in definition listener(on_call_node_enter): #{e.message} : #{e.backtrace.first}")
40
+ end
41
+
42
+ def on_symbol_node_enter(node)
43
+ definition_items = @handler.get_linked_object_definition_items(node)
44
+ put_items_into_response(definition_items)
45
+ rescue => e
46
+ $stderr.puts("error in definition listener(on_symbol_node_enter): #{e.message} : #{e.backtrace.first}")
47
+ end
48
+
49
+ def on_string_node_enter(node)
50
+ definition_items = @handler.get_linked_filepath_definition_items(node)
51
+ put_items_into_response(definition_items)
52
+ rescue => e
53
+ $stderr.puts("error in definition listener(on_string_node_enter): #{e.message} : #{e.backtrace.first}")
54
+ end
55
+
56
+ def put_items_into_response(items)
57
+ items.each do |item|
58
+ @response_builder << item
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end