ruby-lsp-ree 0.1.20 → 0.1.21
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/sync_dao_columns_formatter.rb +27 -0
- data/lib/ruby_lsp/ruby_lsp_ree/parsing/parsed_dao_document.rb +4 -0
- data/lib/ruby_lsp/ruby_lsp_ree/parsing/parsed_link_node.rb +19 -11
- data/lib/ruby_lsp/ruby_lsp_ree/ree_source_editor.rb +16 -6
- 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: 3f11e82aca2c43fe42fb37077f3bc8590c5c68e06c13d9068c6872ae859faaad
|
4
|
+
data.tar.gz: 07fa4705541847c82764e5c4e27c13b190c240e63c12bb86a98fd49577be6090
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7bc67742989ee60af3e3b9f4dd38b44183522e86d7b8f1af90c255edb10179086e55255312fd80abf7306af37d318f0e8343f6183926ffb424288ff479fce4f
|
7
|
+
data.tar.gz: 593ebeac60988a3a9f9db7137d99a313b07d7ebd6385e7e3a566c93960a7ebfd803ce1fccef8d595b12ecd53c5e22a3afa41b4fad279d8de49870ffa9a1c4737
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative 'base_formatter'
|
2
|
+
require_relative '../ree_source_editor'
|
2
3
|
|
3
4
|
module RubyLsp
|
4
5
|
module Ree
|
@@ -17,6 +18,8 @@ module RubyLsp
|
|
17
18
|
return source unless parsed_doc.includes_dao_dsl?
|
18
19
|
return source unless parsed_doc.has_schema?
|
19
20
|
|
21
|
+
source = deduplicate_dao_fields(parsed_doc, source)
|
22
|
+
|
20
23
|
dao_folder_index = path_parts.index('dao')
|
21
24
|
entities_folder = path_parts.take(dao_folder_index).join('/') + '/entities'
|
22
25
|
|
@@ -71,6 +74,30 @@ module RubyLsp
|
|
71
74
|
|
72
75
|
File.write(entity_path, source_lines.join)
|
73
76
|
end
|
77
|
+
|
78
|
+
def deduplicate_dao_fields(parsed_doc, source)
|
79
|
+
grouped_fields = parsed_doc.dao_fields.group_by(&:name)
|
80
|
+
uniq_fields = []
|
81
|
+
fields_to_remove = []
|
82
|
+
|
83
|
+
grouped_fields.each do |name, fields|
|
84
|
+
uniq_fields << fields.first
|
85
|
+
if fields.size > 1
|
86
|
+
fields_to_remove += fields[1..-1]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
return source if fields_to_remove.size == 0
|
91
|
+
|
92
|
+
parsed_doc.set_dao_fields(uniq_fields)
|
93
|
+
editor = RubyLsp::Ree::ReeSourceEditor.new(source)
|
94
|
+
|
95
|
+
fields_to_remove.each do |field|
|
96
|
+
editor.remove_dao_field(field)
|
97
|
+
end
|
98
|
+
|
99
|
+
editor.source
|
100
|
+
end
|
74
101
|
end
|
75
102
|
end
|
76
103
|
end
|
@@ -5,6 +5,7 @@ class RubyLsp::Ree::ParsedLinkNode
|
|
5
5
|
|
6
6
|
FROM_ARG_KEY = 'from'
|
7
7
|
IMPORT_ARG_KEY = 'import'
|
8
|
+
AS_ARG_KEY = 'as'
|
8
9
|
|
9
10
|
class ImportItem
|
10
11
|
attr_reader :name, :original_name
|
@@ -44,6 +45,11 @@ class RubyLsp::Ree::ParsedLinkNode
|
|
44
45
|
@node.location
|
45
46
|
end
|
46
47
|
|
48
|
+
def usage_name
|
49
|
+
return @alias_name if @alias_name
|
50
|
+
@name
|
51
|
+
end
|
52
|
+
|
47
53
|
def from_arg_value
|
48
54
|
return unless @from_param
|
49
55
|
|
@@ -75,17 +81,6 @@ class RubyLsp::Ree::ParsedLinkNode
|
|
75
81
|
link_type == :object_name
|
76
82
|
end
|
77
83
|
|
78
|
-
def parse_name
|
79
|
-
case name_arg_node
|
80
|
-
when Prism::SymbolNode
|
81
|
-
name_arg_node.value
|
82
|
-
when Prism::StringNode
|
83
|
-
name_arg_node.unescaped
|
84
|
-
else
|
85
|
-
""
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
84
|
def parse_imports
|
90
85
|
@import_items ||= get_import_items
|
91
86
|
end
|
@@ -123,12 +118,25 @@ class RubyLsp::Ree::ParsedLinkNode
|
|
123
118
|
|
124
119
|
private
|
125
120
|
|
121
|
+
def parse_name
|
122
|
+
case name_arg_node
|
123
|
+
when Prism::SymbolNode
|
124
|
+
name_arg_node.value
|
125
|
+
when Prism::StringNode
|
126
|
+
name_arg_node.unescaped
|
127
|
+
else
|
128
|
+
""
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
126
132
|
def parse_params
|
127
133
|
@kw_args = @node.arguments.arguments.detect{ |arg| arg.is_a?(Prism::KeywordHashNode) }
|
128
134
|
@from_param = nil
|
129
135
|
return unless @kw_args
|
130
136
|
|
131
137
|
@from_param = @kw_args.elements.detect{ _1.key.unescaped == FROM_ARG_KEY }
|
138
|
+
@as_param = @kw_args.elements.detect{ _1.key.unescaped == AS_ARG_KEY }
|
139
|
+
@alias_name = @as_param ? @as_param.value.unescaped : nil
|
132
140
|
end
|
133
141
|
|
134
142
|
def last_arg
|
@@ -15,7 +15,7 @@ module RubyLsp
|
|
15
15
|
|
16
16
|
def contains_link_usage?(link_node)
|
17
17
|
source_lines_except_link = source_lines[0...(link_node.location.start_line-1)] + source_lines[(link_node.location.end_line)..-1]
|
18
|
-
source_lines_except_link.any?{ |source_line| source_line.match?(/\W#{link_node.
|
18
|
+
source_lines_except_link.any?{ |source_line| source_line.match?(/\W#{link_node.usage_name}\W/)}
|
19
19
|
end
|
20
20
|
|
21
21
|
def contains_link_import_usage?(link_node, link_import)
|
@@ -24,7 +24,7 @@ module RubyLsp
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def remove_link(link_node)
|
27
|
-
|
27
|
+
set_empty_lines_for_location!(link_node.location)
|
28
28
|
end
|
29
29
|
|
30
30
|
def remove_link_imports(link_node, link_imports)
|
@@ -58,10 +58,8 @@ module RubyLsp
|
|
58
58
|
set_empty_lines!(link_container_start_line+1, link_container_end_line)
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
62
|
-
(
|
63
|
-
source_lines[i] = ''
|
64
|
-
end
|
61
|
+
def remove_dao_field(field)
|
62
|
+
set_empty_lines_for_location!(field.location)
|
65
63
|
end
|
66
64
|
|
67
65
|
def add_links(parsed_doc, ree_objects, current_package)
|
@@ -127,6 +125,18 @@ module RubyLsp
|
|
127
125
|
source_lines[line] = source_lines[line][0..start_column] + ", from: :#{new_package}" + source_lines[line][start_column+1..-1]
|
128
126
|
end
|
129
127
|
end
|
128
|
+
|
129
|
+
private
|
130
|
+
|
131
|
+
def set_empty_lines_for_location!(location)
|
132
|
+
set_empty_lines!(location.start_line-1, location.end_line-1)
|
133
|
+
end
|
134
|
+
|
135
|
+
def set_empty_lines!(start_line, end_line)
|
136
|
+
(start_line .. end_line).each do |i|
|
137
|
+
source_lines[i] = ''
|
138
|
+
end
|
139
|
+
end
|
130
140
|
end
|
131
141
|
end
|
132
142
|
end
|
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.21
|
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-05-
|
11
|
+
date: 2025-05-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:
|