ruby-lsp-ree 0.1.16 → 0.1.17
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/lib/ruby_lsp/ruby_lsp_ree/formatters/missing_imports_formatter.rb +32 -21
- data/lib/ruby_lsp/ruby_lsp_ree/parsing/body_parsers/call_objects_parser.rb +37 -10
- data/lib/ruby_lsp/ruby_lsp_ree/parsing/parsed_class_document.rb +2 -6
- data/lib/ruby_lsp/ruby_lsp_ree/parsing/parsed_method_node.rb +7 -0
- data/lib/ruby_lsp/ruby_lsp_ree/ree_object_finder.rb +29 -0
- data/lib/ruby_lsp/ruby_lsp_ree/ree_source_editor.rb +3 -4
- data/lib/ruby_lsp_ree/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 385dfd53ada066f3fbbe41421c4b425773d26e70fd129a68a43d623c77840597
|
4
|
+
data.tar.gz: 1f9d2120db749bb2bf71a56653143d847dad3463fcc1a7528b790be2ea5e667e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 110bcd5a8efdc990f09b8c62c0448799e4573187d630da481390594f5544137c7445971bb3936aed2c1bc76c638843d8084fcbe0c3dac2fe4fb26fe04f08ce6e
|
7
|
+
data.tar.gz: c2f53768271f71890342e40dfd7762102b7b63323f4c68386a3503847ecd15635ad2adfe338f030ec410f1d46d944206faaa20f5c158d9c769a4031a40fe1f2a
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -17,16 +17,12 @@ module RubyLsp
|
|
17
17
|
|
18
18
|
current_package = package_name_from_uri(uri)
|
19
19
|
|
20
|
-
fn_calls = parsed_doc.parse_fn_calls
|
21
|
-
filtered_fn_calls = filter_fn_calls(parsed_doc, fn_calls)
|
22
|
-
objects_to_add = filtered_fn_calls.map{ |fn_call|
|
23
|
-
finder.find_object(fn_call.name.to_s)
|
24
|
-
}.compact
|
25
20
|
|
26
|
-
|
27
|
-
|
28
|
-
objects_to_add
|
29
|
-
finder.
|
21
|
+
method_calls = parsed_doc.parse_method_calls
|
22
|
+
filtered_method_calls = filter_method_calls(parsed_doc, method_calls)
|
23
|
+
objects_to_add = filtered_method_calls.map{ |fn_call|
|
24
|
+
ree_objects = finder.find_objects(fn_call.name.to_s)
|
25
|
+
choose_object_to_add(ree_objects, current_package)
|
30
26
|
}.compact
|
31
27
|
|
32
28
|
objects_to_add.uniq!{ |obj| obj.name }
|
@@ -39,25 +35,40 @@ module RubyLsp
|
|
39
35
|
|
40
36
|
private
|
41
37
|
|
42
|
-
def
|
38
|
+
def filter_method_calls(parsed_doc, method_calls)
|
43
39
|
parsed_doc.parse_instance_methods
|
44
40
|
|
45
|
-
|
46
|
-
|
47
|
-
}
|
48
|
-
end
|
49
|
-
|
50
|
-
def filter_bean_calls(parsed_doc, bean_calls)
|
51
|
-
bean_calls.select do |bean_call|
|
52
|
-
if !bean_call.method_name
|
41
|
+
method_calls.select do |method_call|
|
42
|
+
if !method_call.method_name
|
53
43
|
true
|
44
|
+
elsif parsed_doc.doc_instance_methods.map(&:name).include?(method_call.name)
|
45
|
+
false
|
54
46
|
else
|
55
|
-
method_obj = parsed_doc.doc_instance_methods.detect{ _1.name ==
|
56
|
-
local_variables = method_obj.parse_local_variables
|
57
|
-
|
47
|
+
method_obj = parsed_doc.doc_instance_methods.detect{ _1.name == method_call.method_name }
|
48
|
+
local_variables = method_obj.parse_local_variables.map(&:name)
|
49
|
+
method_params = method_obj.param_names
|
50
|
+
|
51
|
+
!local_variables.include?(method_call.name) && !method_params.include?(method_call.name)
|
58
52
|
end
|
59
53
|
end
|
60
54
|
end
|
55
|
+
|
56
|
+
def choose_object_to_add(ree_objects, current_package)
|
57
|
+
return if !ree_objects || ree_objects.size == 0
|
58
|
+
return ree_objects.first if ree_objects.size == 1
|
59
|
+
|
60
|
+
current_package_object = ree_objects.detect{ _1.object_package == current_package }
|
61
|
+
return current_package_object if current_package_object
|
62
|
+
|
63
|
+
package_names = ree_objects.map(&:object_package)
|
64
|
+
if package_names.sort == ['ree_date', 'ree_datetime'].sort
|
65
|
+
return ree_objects.detect{ _1.object_package == 'ree_datetime' }
|
66
|
+
end
|
67
|
+
|
68
|
+
ree_object = ree_objects.first
|
69
|
+
ree_object.set_package!('FILL_PACKAGE')
|
70
|
+
ree_object
|
71
|
+
end
|
61
72
|
end
|
62
73
|
end
|
63
74
|
end
|
@@ -52,24 +52,51 @@ class RubyLsp::Ree::CallObjectsParser
|
|
52
52
|
|
53
53
|
def parse_body_call_objects(node_body)
|
54
54
|
call_objects = []
|
55
|
-
|
55
|
+
|
56
56
|
node_body.each do |node|
|
57
57
|
if node.is_a?(Prism::CallNode)
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
58
|
+
if node.receiver
|
59
|
+
receiver = get_first_receiver(node)
|
60
|
+
|
61
|
+
if receiver.is_a?(Prism::CallNode)
|
62
|
+
call_objects += parse_body_call_objects([receiver])
|
63
|
+
end
|
64
|
+
else
|
65
|
+
call_objects << CallObject.new(name: node.name, type: :method_call)
|
66
|
+
end
|
67
|
+
|
68
|
+
call_objects += parse_call_objects_from_args(node.arguments)
|
69
|
+
else
|
70
|
+
if node.respond_to?(:elements)
|
71
|
+
call_objects += parse_body_call_objects(node.elements)
|
72
|
+
end
|
73
|
+
|
74
|
+
if node.respond_to?(:predicate)
|
75
|
+
call_objects += parse_body_call_objects([node.predicate])
|
76
|
+
end
|
77
|
+
|
78
|
+
if node.respond_to?(:statements)
|
79
|
+
call_objects += parse_body_call_objects(node.statements.body)
|
80
|
+
end
|
81
|
+
|
82
|
+
if node.respond_to?(:block) && node.block && node.block.is_a?(Prism::BlockNode)
|
83
|
+
call_objects += parse_body_call_objects(get_method_body(node.block))
|
84
|
+
end
|
85
|
+
|
86
|
+
if node.respond_to?(:value) && node.value
|
87
|
+
call_objects += parse_body_call_objects([node.value])
|
88
|
+
end
|
67
89
|
end
|
68
90
|
end
|
69
91
|
|
70
92
|
call_objects
|
71
93
|
end
|
72
94
|
|
95
|
+
def parse_call_objects_from_args(node_arguments)
|
96
|
+
return [] if !node_arguments || !node_arguments.arguments
|
97
|
+
parse_body_call_objects(node_arguments.arguments)
|
98
|
+
end
|
99
|
+
|
73
100
|
def parse_body_call_expressions(node_body)
|
74
101
|
call_expressions = []
|
75
102
|
|
@@ -205,12 +205,8 @@ class RubyLsp::Ree::ParsedClassDocument < RubyLsp::Ree::ParsedBaseDocument
|
|
205
205
|
.map(&:name)
|
206
206
|
end
|
207
207
|
|
208
|
-
def
|
209
|
-
RubyLsp::Ree::CallObjectsParser.new(self).class_call_objects
|
210
|
-
end
|
211
|
-
|
212
|
-
def parse_bean_calls
|
213
|
-
RubyLsp::Ree::CallObjectsParser.new(self).class_call_objects.select{ _1.receiver_name }
|
208
|
+
def parse_method_calls
|
209
|
+
RubyLsp::Ree::CallObjectsParser.new(self).class_call_objects
|
214
210
|
end
|
215
211
|
|
216
212
|
def class_name
|
@@ -13,6 +13,13 @@ class RubyLsp::Ree::ParsedMethodNode
|
|
13
13
|
@method_node.name
|
14
14
|
end
|
15
15
|
|
16
|
+
def param_names
|
17
|
+
@method_node.parameters.requireds.map(&:name) +
|
18
|
+
@method_node.parameters.keywords.map(&:name) +
|
19
|
+
[@method_node.parameters.rest&.name] +
|
20
|
+
[@method_node.parameters.keyword_rest&.name]
|
21
|
+
end
|
22
|
+
|
16
23
|
def has_contract?
|
17
24
|
!!@contract_node
|
18
25
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'delegate'
|
1
2
|
require_relative "utils/ree_lsp_utils"
|
2
3
|
|
3
4
|
module RubyLsp
|
@@ -9,6 +10,20 @@ module RubyLsp
|
|
9
10
|
|
10
11
|
REE_OBJECT_STRING = 'ree_object'
|
11
12
|
|
13
|
+
class ReeObjectDecorator < SimpleDelegator
|
14
|
+
include RubyLsp::Ree::ReeLspUtils
|
15
|
+
|
16
|
+
def object_package
|
17
|
+
return @package_name if @package_name
|
18
|
+
|
19
|
+
package_name_from_uri(uri)
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_package!(package_name)
|
23
|
+
@package_name = package_name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
12
27
|
def initialize(index)
|
13
28
|
@index = index
|
14
29
|
end
|
@@ -41,6 +56,14 @@ module RubyLsp
|
|
41
56
|
objects_by_name.detect{ _1.comments.to_s.lines.first&.chomp == REE_OBJECT_STRING }
|
42
57
|
end
|
43
58
|
|
59
|
+
def find_objects(name)
|
60
|
+
objects_by_name = @index[name]
|
61
|
+
return unless objects_by_name
|
62
|
+
|
63
|
+
ree_objects = objects_by_name.select{ _1.comments.to_s.lines.first&.chomp == REE_OBJECT_STRING }
|
64
|
+
decorate_objects(ree_objects)
|
65
|
+
end
|
66
|
+
|
44
67
|
def find_object_for_package(name, package_name)
|
45
68
|
objects_by_name = @index[name]
|
46
69
|
return unless objects_by_name
|
@@ -65,6 +88,12 @@ module RubyLsp
|
|
65
88
|
def object_documentation(ree_object)
|
66
89
|
ree_object.comments.lines[2..-1].join("\n").chomp
|
67
90
|
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
def decorate_objects(ree_objects)
|
95
|
+
ree_objects.map{ ReeObjectDecorator.new(_1) }
|
96
|
+
end
|
68
97
|
end
|
69
98
|
end
|
70
99
|
end
|
@@ -68,12 +68,11 @@ module RubyLsp
|
|
68
68
|
new_text = ''
|
69
69
|
|
70
70
|
ree_objects.each do |ree_object|
|
71
|
-
|
72
|
-
|
73
|
-
link_text = if current_package == object_package
|
71
|
+
link_text = if current_package == ree_object.object_package
|
74
72
|
"\s\slink :#{ree_object.name}"
|
75
73
|
else
|
76
|
-
|
74
|
+
package_str = ree_object.object_package == 'FILL_PACKAGE' ? 'FILL_PACKAGE' : ":#{ree_object.object_package}"
|
75
|
+
"\s\slink :#{ree_object.name}, from: #{package_str}"
|
77
76
|
end
|
78
77
|
|
79
78
|
if parsed_doc.links_container_node
|
data/lib/ruby_lsp_ree/version.rb
CHANGED
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.
|
4
|
+
version: 0.1.17
|
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-04-
|
11
|
+
date: 2025-04-28 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:
|