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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46e3cdb9ee36b1b88e20d71c218ce355571da9aa6d405dfe0dcd879e1b37a5ef
4
- data.tar.gz: a668bef693a29e639c6acb57f1a8ad2415d630242a2eecc04ff188f3d2fd93f4
3
+ metadata.gz: 3f11e82aca2c43fe42fb37077f3bc8590c5c68e06c13d9068c6872ae859faaad
4
+ data.tar.gz: 07fa4705541847c82764e5c4e27c13b190c240e63c12bb86a98fd49577be6090
5
5
  SHA512:
6
- metadata.gz: bad0e641f6076ceb9544c0e159598a64e44343e890bddb627603d3ba9c0124b6a654f271e5599bc8e045ab7fac117b1844ce25bac5b6d2c4bb1b8457587b43b4
7
- data.tar.gz: 8e691510c967c4788bc3ba9636571644a611bbe909a8e17f1cab4ea140f81f0878f346e0523f7d0020ae3d007248e402a21be3ab4afa201eb7d328afd1c79160
6
+ metadata.gz: b7bc67742989ee60af3e3b9f4dd38b44183522e86d7b8f1af90c255edb10179086e55255312fd80abf7306af37d318f0e8343f6183926ffb424288ff479fce4f
7
+ data.tar.gz: 593ebeac60988a3a9f9db7137d99a313b07d7ebd6385e7e3a566c93960a7ebfd803ce1fccef8d595b12ecd53c5e22a3afa41b4fad279d8de49870ffa9a1c4737
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.1.21] - 2025-05-21
2
+
3
+ - formatter: deduplicate dao columns
4
+ - unused links formatter: handle link aliases
5
+
1
6
  ## [0.1.20] - 2025-05-15
2
7
 
3
8
  - formatter: add missing columns to entities
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-lsp-ree (0.1.20)
4
+ ruby-lsp-ree (0.1.21)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -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
@@ -32,6 +32,10 @@ class RubyLsp::Ree::ParsedDaoDocument < RubyLsp::Ree::ParsedClassDocument
32
32
  @schema_node.arguments.arguments.first.name.to_s
33
33
  end
34
34
 
35
+ def set_dao_fields(fields)
36
+ @dao_fields = fields
37
+ end
38
+
35
39
  private
36
40
 
37
41
  def parse_dao_fields
@@ -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.name}\W/)}
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
- set_empty_lines!(link_node.location.start_line-1, link_node.location.end_line-1)
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 set_empty_lines!(start_line, end_line)
62
- (start_line .. end_line).each do |i|
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RubyLsp
4
4
  module Ree
5
- VERSION = "0.1.20"
5
+ VERSION = "0.1.21"
6
6
  end
7
7
  end
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.20
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-16 00:00:00.000000000 Z
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: