ruby-merge 7.1.3 → 7.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +1 -1
- data/lib/ruby/merge/block_binding_support.rb +22 -0
- data/lib/ruby/merge/block_directive_detector.rb +220 -0
- data/lib/ruby/merge/doc_comment_support.rb +101 -0
- data/lib/ruby/merge/gemspec_support.rb +33 -0
- data/lib/ruby/merge/magic_comment_support.rb +132 -0
- data/lib/ruby/merge/method_similarity.rb +81 -0
- data/lib/ruby/merge/nocov_node_base.rb +79 -0
- data/lib/ruby/merge/nocov_wrapper_base.rb +46 -0
- data/lib/ruby/merge/rescue_semantics.rb +219 -0
- data/lib/ruby/merge/scaffold_chunk_support.rb +75 -0
- data/lib/ruby/merge/signature_support.rb +98 -0
- data/lib/ruby/merge/version.rb +1 -1
- data/lib/ruby/merge.rb +113 -30
- data/sig/ruby/merge.rbs +0 -13
- data.tar.gz.sig +0 -0
- metadata +27 -31
- metadata.gz.sig +0 -0
- data/lib/ruby/merge/provider.rb +0 -77
data/lib/ruby/merge.rb
CHANGED
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'digest'
|
|
4
|
-
require 'prism/merge'
|
|
5
4
|
require 'tree_haver'
|
|
6
5
|
require 'ast/merge'
|
|
7
6
|
require_relative 'merge/version'
|
|
7
|
+
require_relative 'merge/block_directive_detector'
|
|
8
|
+
require_relative 'merge/block_binding_support'
|
|
9
|
+
require_relative 'merge/doc_comment_support'
|
|
10
|
+
require_relative 'merge/gemspec_support'
|
|
11
|
+
require_relative 'merge/magic_comment_support'
|
|
12
|
+
require_relative 'merge/method_similarity'
|
|
13
|
+
require_relative 'merge/nocov_node_base'
|
|
14
|
+
require_relative 'merge/nocov_wrapper_base'
|
|
15
|
+
require_relative 'merge/rescue_semantics'
|
|
16
|
+
require_relative 'merge/scaffold_chunk_support'
|
|
17
|
+
require_relative 'merge/signature_support'
|
|
8
18
|
|
|
9
19
|
module Ruby
|
|
20
|
+
# Public Ruby parser-family substrate for Structured Merge.
|
|
21
|
+
#
|
|
22
|
+
# The adapter deliberately keeps parser capability reporting, ownership
|
|
23
|
+
# discovery, merge planning, and source reconstruction together. Splitting
|
|
24
|
+
# those phases to satisfy generic size metrics would obscure the contract
|
|
25
|
+
# they implement and make provider behavior harder to audit.
|
|
26
|
+
# rubocop:disable Metrics/AbcSize, Metrics/BlockLength, Metrics/BlockNesting
|
|
27
|
+
# rubocop:disable Metrics/ClassLength, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
|
28
|
+
# rubocop:disable Metrics/ModuleLength, Metrics/PerceivedComplexity
|
|
29
|
+
# rubocop:disable Style/MultilineBlockChain
|
|
10
30
|
module Merge
|
|
11
31
|
extend self
|
|
12
32
|
include Ast::Merge::SourceRegionReportSupport
|
|
@@ -29,7 +49,11 @@ module Ruby
|
|
|
29
49
|
REQUIRE_PATTERN = /^\s*require(?:_relative)?\s+["']([^"']+)["']/
|
|
30
50
|
CLASS_PATTERN = /^\s*class\s+([A-Z]\w*(?:::\w+)*)/
|
|
31
51
|
MODULE_PATTERN = /^\s*module\s+([A-Z]\w*(?:::\w+)*)/
|
|
32
|
-
DEF_PATTERN = %r{
|
|
52
|
+
DEF_PATTERN = %r{
|
|
53
|
+
^\s*def\s+
|
|
54
|
+
((?:self\.)?)
|
|
55
|
+
([a-zA-Z_]\w*[!?=]?|\[\]=?|\+@|-@|\*\*|<<|>>|<=>|===|==|=~|!~|!=|[+\-*/%&|^<>]=?|[!~`])
|
|
56
|
+
}x
|
|
33
57
|
CONSTANT_ASSIGNMENT_PATTERN = /^(\s*)([A-Z]\w*)\s*=/
|
|
34
58
|
CONSTANT_HASH_ASSIGNMENT_PATTERN = /^(\s*)([A-Z]\w*)\s*=\s*\{/
|
|
35
59
|
|
|
@@ -155,13 +179,16 @@ module Ruby
|
|
|
155
179
|
template_methods = ruby_method_projection(template_source, revision: 'template')
|
|
156
180
|
destination_methods = ruby_method_projection(destination_source, revision: 'destination')
|
|
157
181
|
destination_by_signature = destination_methods.to_h { |entry| [entry[:signature], entry] }
|
|
158
|
-
template_signatures = template_methods
|
|
182
|
+
template_signatures = template_methods
|
|
183
|
+
.map { |entry| entry[:signature] }
|
|
184
|
+
.to_h { |signature| [signature, true] }
|
|
159
185
|
|
|
160
186
|
matches = template_methods.filter_map do |template_entry|
|
|
161
187
|
destination_entry = destination_by_signature[template_entry[:signature]]
|
|
162
188
|
next unless destination_entry
|
|
163
189
|
|
|
164
|
-
moved = template_entry[:index] != destination_entry[:index] ||
|
|
190
|
+
moved = template_entry[:index] != destination_entry[:index] ||
|
|
191
|
+
template_entry[:parent_path] != destination_entry[:parent_path]
|
|
165
192
|
Ast::Merge::MoveDetectionMatch.new(
|
|
166
193
|
from_path: template_entry[:path],
|
|
167
194
|
to_path: destination_entry[:path],
|
|
@@ -174,7 +201,13 @@ module Ruby
|
|
|
174
201
|
from_index: template_entry[:index],
|
|
175
202
|
to_index: destination_entry[:index],
|
|
176
203
|
confidence: moved ? 0.98 : 0.9,
|
|
177
|
-
diagnostics: [
|
|
204
|
+
diagnostics: [
|
|
205
|
+
if moved
|
|
206
|
+
'same Ruby method signature observed at a different sibling position'
|
|
207
|
+
else
|
|
208
|
+
'same Ruby method signature observed at the same sibling position'
|
|
209
|
+
end
|
|
210
|
+
]
|
|
178
211
|
)
|
|
179
212
|
end
|
|
180
213
|
|
|
@@ -197,7 +230,9 @@ module Ruby
|
|
|
197
230
|
unmatched_to: destination_methods.reject do |entry|
|
|
198
231
|
template_signatures[entry[:signature]]
|
|
199
232
|
end.map { |entry| entry[:path] },
|
|
200
|
-
diagnostics: [
|
|
233
|
+
diagnostics: [
|
|
234
|
+
'Ruby method move detection uses generic move-detection matching over receiver-aware method projections'
|
|
235
|
+
]
|
|
201
236
|
).to_h
|
|
202
237
|
end
|
|
203
238
|
|
|
@@ -232,12 +267,15 @@ module Ruby
|
|
|
232
267
|
template_declarations_by_key = template_declarations.to_h { |entry| [entry[:merge_key], entry] }
|
|
233
268
|
intra_owner_merges = ruby_intra_owner_merge_plan(template_declarations, destination_declarations)
|
|
234
269
|
namespace_conflicts = ruby_namespace_form_conflicts(template_declarations, destination_declarations)
|
|
235
|
-
|
|
270
|
+
namespace_equivalence_available = TreeHaver::BackendRegistry.tag_available?(
|
|
271
|
+
:tslp_ruby_namespace_form_equivalence
|
|
272
|
+
)
|
|
273
|
+
unless namespace_conflicts.empty? || namespace_equivalence_available
|
|
236
274
|
conflicts = namespace_conflicts.join(', ')
|
|
237
275
|
return unsupported_feature_result(
|
|
238
276
|
'ruby-merge cannot reconcile equivalent Ruby namespace declaration forms with the active TSLP records: ' \
|
|
239
|
-
"#{conflicts}. Use
|
|
240
|
-
'records to tree-sitter-language-pack.'
|
|
277
|
+
"#{conflicts}. Use a native Ruby provider for native Ruby merging, or report missing Ruby namespace " \
|
|
278
|
+
'ownership records to tree-sitter-language-pack.'
|
|
241
279
|
)
|
|
242
280
|
end
|
|
243
281
|
if !namespace_conflicts.empty? && TreeHaver::BackendRegistry.tag_available?(:tslp_ruby_namespace_form_equivalence)
|
|
@@ -413,7 +451,8 @@ module Ruby
|
|
|
413
451
|
{
|
|
414
452
|
severity: 'info',
|
|
415
453
|
category: 'source_owner_identity_matching',
|
|
416
|
-
message: 'Ruby source-owner matching reports confidence per match and uses ordered structural pairing
|
|
454
|
+
message: 'Ruby source-owner matching reports confidence per match and uses ordered structural pairing ' \
|
|
455
|
+
'for duplicate identities.'
|
|
417
456
|
}
|
|
418
457
|
]
|
|
419
458
|
}
|
|
@@ -637,7 +676,11 @@ module Ruby
|
|
|
637
676
|
{
|
|
638
677
|
severity: owners_preserved ? 'info' : 'error',
|
|
639
678
|
category: owners_preserved ? 'formatter_adapter_accepted' : 'formatter_adapter_rejected',
|
|
640
|
-
message: owners_preserved
|
|
679
|
+
message: if owners_preserved
|
|
680
|
+
'Ruby formatter adapter preserved owner identity, conflict scope, and validation semantics.'
|
|
681
|
+
else
|
|
682
|
+
'Ruby formatter adapter changed owner identity and cannot be accepted as a semantic merge.'
|
|
683
|
+
end
|
|
641
684
|
}
|
|
642
685
|
]
|
|
643
686
|
}
|
|
@@ -683,7 +726,12 @@ module Ruby
|
|
|
683
726
|
{
|
|
684
727
|
severity: reconstruction_risk ? 'warning' : 'info',
|
|
685
728
|
category: reconstruction_risk ? 'ast_node_reconstruction_risk' : 'ast_node_merge_candidate',
|
|
686
|
-
message: reconstruction_risk
|
|
729
|
+
message: if reconstruction_risk
|
|
730
|
+
'Ruby AST-node merge candidate has ambiguous whitespace, comment, or marker ' \
|
|
731
|
+
'reconstruction boundaries.'
|
|
732
|
+
else
|
|
733
|
+
'Ruby AST-node merge candidate can be considered when owner-level fallback would be too blunt.'
|
|
734
|
+
end
|
|
687
735
|
}
|
|
688
736
|
]
|
|
689
737
|
}
|
|
@@ -805,7 +853,12 @@ module Ruby
|
|
|
805
853
|
{
|
|
806
854
|
severity: widened ? 'error' : 'info',
|
|
807
855
|
category: widened ? 'fallback_scope_widening_rejected' : 'fallback_scope_accepted',
|
|
808
|
-
message: widened
|
|
856
|
+
message: if widened
|
|
857
|
+
"Ruby fallback cannot widen from #{declared_scope} to #{requested_scope} without an " \
|
|
858
|
+
'explicit policy.'
|
|
859
|
+
else
|
|
860
|
+
'Ruby fallback scope is within the declared policy.'
|
|
861
|
+
end
|
|
809
862
|
}
|
|
810
863
|
]
|
|
811
864
|
}
|
|
@@ -946,7 +999,8 @@ module Ruby
|
|
|
946
999
|
{
|
|
947
1000
|
severity: 'info',
|
|
948
1001
|
category: 'ruby_rename_detection',
|
|
949
|
-
message: 'Ruby rename detection is explicit and reports clean same-parent method renames
|
|
1002
|
+
message: 'Ruby rename detection is explicit and reports clean same-parent method renames ' \
|
|
1003
|
+
'by normalized body hash.'
|
|
950
1004
|
}
|
|
951
1005
|
]
|
|
952
1006
|
end,
|
|
@@ -1051,7 +1105,8 @@ module Ruby
|
|
|
1051
1105
|
{
|
|
1052
1106
|
severity: 'info',
|
|
1053
1107
|
category: 'ruby_cross_container_method_move',
|
|
1054
|
-
message: 'Ruby detected same-signature method movement across containers while preserving
|
|
1108
|
+
message: 'Ruby detected same-signature method movement across containers while preserving ' \
|
|
1109
|
+
'destination order.'
|
|
1055
1110
|
}
|
|
1056
1111
|
]
|
|
1057
1112
|
end
|
|
@@ -1152,7 +1207,13 @@ module Ruby
|
|
|
1152
1207
|
execution = Array(replay_bundle[:reviewed_nested_executions]).find { |entry| entry[:family] == 'ruby' }
|
|
1153
1208
|
unless execution
|
|
1154
1209
|
return { ok: false,
|
|
1155
|
-
diagnostics: [
|
|
1210
|
+
diagnostics: [
|
|
1211
|
+
{
|
|
1212
|
+
severity: 'error',
|
|
1213
|
+
category: 'configuration_error',
|
|
1214
|
+
message: 'review replay bundle does not include a reviewed nested execution for ruby.'
|
|
1215
|
+
}
|
|
1216
|
+
], policies: [] }
|
|
1156
1217
|
end
|
|
1157
1218
|
|
|
1158
1219
|
merge_ruby_with_reviewed_nested_outputs(
|
|
@@ -1169,7 +1230,13 @@ module Ruby
|
|
|
1169
1230
|
execution = Array(review_state[:reviewed_nested_executions]).find { |entry| entry[:family] == 'ruby' }
|
|
1170
1231
|
unless execution
|
|
1171
1232
|
return { ok: false,
|
|
1172
|
-
diagnostics: [
|
|
1233
|
+
diagnostics: [
|
|
1234
|
+
{
|
|
1235
|
+
severity: 'error',
|
|
1236
|
+
category: 'configuration_error',
|
|
1237
|
+
message: 'review state does not include a reviewed nested execution for ruby.'
|
|
1238
|
+
}
|
|
1239
|
+
], policies: [] }
|
|
1173
1240
|
end
|
|
1174
1241
|
|
|
1175
1242
|
merge_ruby_with_reviewed_nested_outputs(
|
|
@@ -1186,7 +1253,9 @@ module Ruby
|
|
|
1186
1253
|
replay_bundle, import_error = Ast::Merge.import_review_replay_bundle_envelope(envelope)
|
|
1187
1254
|
if import_error
|
|
1188
1255
|
return { ok: false,
|
|
1189
|
-
diagnostics: [
|
|
1256
|
+
diagnostics: [
|
|
1257
|
+
{ severity: 'error', category: import_error[:category], message: import_error[:message] }
|
|
1258
|
+
], policies: [] }
|
|
1190
1259
|
end
|
|
1191
1260
|
|
|
1192
1261
|
merge_ruby_with_reviewed_nested_outputs_from_replay_bundle(
|
|
@@ -1202,7 +1271,9 @@ module Ruby
|
|
|
1202
1271
|
review_state, import_error = Ast::Merge.import_conformance_manifest_review_state_envelope(envelope)
|
|
1203
1272
|
if import_error
|
|
1204
1273
|
return { ok: false,
|
|
1205
|
-
diagnostics: [
|
|
1274
|
+
diagnostics: [
|
|
1275
|
+
{ severity: 'error', category: import_error[:category], message: import_error[:message] }
|
|
1276
|
+
], policies: [] }
|
|
1206
1277
|
end
|
|
1207
1278
|
|
|
1208
1279
|
merge_ruby_with_reviewed_nested_outputs_from_review_state(
|
|
@@ -1505,7 +1576,9 @@ module Ruby
|
|
|
1505
1576
|
unsupported_lines = ruby_tslp_unsupported_top_level_lines(source, process_analysis)
|
|
1506
1577
|
unless unsupported_lines.empty?
|
|
1507
1578
|
return unsupported_feature_result(
|
|
1508
|
-
"ruby-merge can only merge TSLP-record-backed top-level Ruby declarations and imports; #{role} has
|
|
1579
|
+
"ruby-merge can only merge TSLP-record-backed top-level Ruby declarations and imports; #{role} has " \
|
|
1580
|
+
"unsupported top-level content on line(s) #{unsupported_lines.join(', ')}. Use a native Ruby provider " \
|
|
1581
|
+
'for native Ruby merging, or report missing Ruby process records to tree-sitter-language-pack.'
|
|
1509
1582
|
)
|
|
1510
1583
|
end
|
|
1511
1584
|
|
|
@@ -1956,13 +2029,16 @@ module Ruby
|
|
|
1956
2029
|
severity: 'warning',
|
|
1957
2030
|
category: 'ruby_method_shadowing',
|
|
1958
2031
|
path: "#{entry[:owner_path]}/methods/#{entry[:method_signature]}",
|
|
1959
|
-
message: "Ruby method #{entry[:method_signature]} is defined #{entry[:shadowed_count] + 1} times in
|
|
2032
|
+
message: "Ruby method #{entry[:method_signature]} is defined #{entry[:shadowed_count] + 1} times in " \
|
|
2033
|
+
"#{entry[:owner_path]}; the last definition shadows earlier definitions."
|
|
1960
2034
|
}
|
|
1961
2035
|
end
|
|
1962
2036
|
end
|
|
1963
2037
|
|
|
1964
2038
|
def direct_method_shadowing(declaration_entry)
|
|
1965
|
-
grouped = direct_body_method_entries(declaration_entry[:text])
|
|
2039
|
+
grouped = direct_body_method_entries(declaration_entry[:text])
|
|
2040
|
+
.each_with_index
|
|
2041
|
+
.group_by do |(method_entry, _index)|
|
|
1966
2042
|
method_entry[:signature]
|
|
1967
2043
|
end
|
|
1968
2044
|
|
|
@@ -2087,9 +2163,8 @@ module Ruby
|
|
|
2087
2163
|
template_match = template_text.match(/\A(\s*[A-Z]\w*\s*=\s*)\[(.*)\]\z/)
|
|
2088
2164
|
destination_match = destination_text.match(/\A(\s*[A-Z]\w*\s*=\s*)\[(.*)\]\z/)
|
|
2089
2165
|
unless template_match && destination_match
|
|
2090
|
-
return merge_percent_array_constant_text(template_text,
|
|
2091
|
-
|
|
2092
|
-
destination_text)
|
|
2166
|
+
return merge_percent_array_constant_text(template_text, destination_text) ||
|
|
2167
|
+
merge_multiline_array_constant_text(template_text, destination_text)
|
|
2093
2168
|
end
|
|
2094
2169
|
|
|
2095
2170
|
destination_elements = split_ruby_array_elements(destination_match[2])
|
|
@@ -2266,7 +2341,11 @@ module Ruby
|
|
|
2266
2341
|
if declaration
|
|
2267
2342
|
start_index = pending_comments.first || index
|
|
2268
2343
|
finish_index = ruby_block_finish_index(lines, index)
|
|
2269
|
-
address = declaration[:kind] == 'def'
|
|
2344
|
+
address = if declaration[:kind] == 'def'
|
|
2345
|
+
"/methods/#{declaration[:name]}"
|
|
2346
|
+
else
|
|
2347
|
+
"/declarations/#{declaration[:name]}"
|
|
2348
|
+
end
|
|
2270
2349
|
owner = {
|
|
2271
2350
|
region_id: "#{declaration[:kind] == 'def' ? 'method' : 'declaration'}:#{declaration[:name]}",
|
|
2272
2351
|
region_kind: 'owner',
|
|
@@ -2280,8 +2359,9 @@ module Ruby
|
|
|
2280
2359
|
declaration_span: source_report_line_span(index, finish_index),
|
|
2281
2360
|
content: source_report_region_content(lines, start_index, finish_index)
|
|
2282
2361
|
}
|
|
2283
|
-
|
|
2284
|
-
|
|
2362
|
+
if %w[class module].include?(declaration[:kind])
|
|
2363
|
+
owner[:child_regions] = container_child_source_regions(lines, declaration, index, finish_index)
|
|
2364
|
+
end
|
|
2285
2365
|
attached_comments = source_attached_comment_regions_for_report(
|
|
2286
2366
|
lines: lines,
|
|
2287
2367
|
start_index: start_index,
|
|
@@ -2379,6 +2459,7 @@ module Ruby
|
|
|
2379
2459
|
RubyHashPair = Struct.new(:key, :key_source, :delimiter, :value, keyword_init: true)
|
|
2380
2460
|
RubyScalarNode = Struct.new(:source, keyword_init: true)
|
|
2381
2461
|
|
|
2462
|
+
# Projects Ruby hash literals into source-preserving merge nodes.
|
|
2382
2463
|
class RubyHashLiteralProjector
|
|
2383
2464
|
def initialize(source)
|
|
2384
2465
|
@source = source.to_s
|
|
@@ -3129,12 +3210,14 @@ module Ruby
|
|
|
3129
3210
|
:collect_ruby_declaration_entries,
|
|
3130
3211
|
:unsupported_feature_result
|
|
3131
3212
|
)
|
|
3213
|
+
# rubocop:enable Style/MultilineBlockChain
|
|
3214
|
+
# rubocop:enable Metrics/ModuleLength, Metrics/PerceivedComplexity
|
|
3215
|
+
# rubocop:enable Metrics/ClassLength, Metrics/CyclomaticComplexity, Metrics/MethodLength
|
|
3216
|
+
# rubocop:enable Metrics/AbcSize, Metrics/BlockLength, Metrics/BlockNesting
|
|
3132
3217
|
end
|
|
3133
3218
|
end
|
|
3134
3219
|
|
|
3135
3220
|
Ruby::Merge.register_backend!
|
|
3136
|
-
require_relative 'merge/provider'
|
|
3137
|
-
Ruby::Merge.register_provider!
|
|
3138
3221
|
|
|
3139
3222
|
TreeHaver::BackendRegistry.register_tag(
|
|
3140
3223
|
:tslp_ruby_import_records,
|
data/sig/ruby/merge.rbs
CHANGED
|
@@ -1,18 +1,5 @@
|
|
|
1
1
|
module Ruby
|
|
2
2
|
module Merge
|
|
3
|
-
class Provider
|
|
4
|
-
def provider_id: () -> String
|
|
5
|
-
def family: () -> String
|
|
6
|
-
def capabilities: () -> Hash[Symbol, untyped]
|
|
7
|
-
def analyze: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
8
|
-
def diff2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
9
|
-
def merge2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
10
|
-
def merge3: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.merge_provider: () -> Provider
|
|
14
|
-
def self.register_provider!: (?replace: bool) -> untyped
|
|
15
|
-
|
|
16
3
|
module Version
|
|
17
4
|
VERSION: String
|
|
18
5
|
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ruby-merge
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.1.
|
|
4
|
+
version: 7.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -43,42 +43,28 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - '='
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 7.1.
|
|
46
|
+
version: 7.1.4
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - '='
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 7.1.
|
|
54
|
-
- !ruby/object:Gem::Dependency
|
|
55
|
-
name: prism-merge
|
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
|
57
|
-
requirements:
|
|
58
|
-
- - '='
|
|
59
|
-
- !ruby/object:Gem::Version
|
|
60
|
-
version: 7.1.3
|
|
61
|
-
type: :runtime
|
|
62
|
-
prerelease: false
|
|
63
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
-
requirements:
|
|
65
|
-
- - '='
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version: 7.1.3
|
|
53
|
+
version: 7.1.4
|
|
68
54
|
- !ruby/object:Gem::Dependency
|
|
69
55
|
name: tree_haver
|
|
70
56
|
requirement: !ruby/object:Gem::Requirement
|
|
71
57
|
requirements:
|
|
72
58
|
- - '='
|
|
73
59
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: 7.1.
|
|
60
|
+
version: 7.1.4
|
|
75
61
|
type: :runtime
|
|
76
62
|
prerelease: false
|
|
77
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
64
|
requirements:
|
|
79
65
|
- - '='
|
|
80
66
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: 7.1.
|
|
67
|
+
version: 7.1.4
|
|
82
68
|
- !ruby/object:Gem::Dependency
|
|
83
69
|
name: version_gem
|
|
84
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -108,7 +94,7 @@ dependencies:
|
|
|
108
94
|
version: '3.0'
|
|
109
95
|
- - ">="
|
|
110
96
|
- !ruby/object:Gem::Version
|
|
111
|
-
version: 3.0.
|
|
97
|
+
version: 3.0.7
|
|
112
98
|
type: :development
|
|
113
99
|
prerelease: false
|
|
114
100
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -118,7 +104,7 @@ dependencies:
|
|
|
118
104
|
version: '3.0'
|
|
119
105
|
- - ">="
|
|
120
106
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: 3.0.
|
|
107
|
+
version: 3.0.7
|
|
122
108
|
- !ruby/object:Gem::Dependency
|
|
123
109
|
name: bundler-audit
|
|
124
110
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -216,7 +202,7 @@ dependencies:
|
|
|
216
202
|
version: '2.0'
|
|
217
203
|
- - ">="
|
|
218
204
|
- !ruby/object:Gem::Version
|
|
219
|
-
version: 2.0.
|
|
205
|
+
version: 2.0.20
|
|
220
206
|
type: :development
|
|
221
207
|
prerelease: false
|
|
222
208
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -226,7 +212,7 @@ dependencies:
|
|
|
226
212
|
version: '2.0'
|
|
227
213
|
- - ">="
|
|
228
214
|
- !ruby/object:Gem::Version
|
|
229
|
-
version: 2.0.
|
|
215
|
+
version: 2.0.20
|
|
230
216
|
- !ruby/object:Gem::Dependency
|
|
231
217
|
name: turbo_tests2
|
|
232
218
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -236,7 +222,7 @@ dependencies:
|
|
|
236
222
|
version: '3.2'
|
|
237
223
|
- - ">="
|
|
238
224
|
- !ruby/object:Gem::Version
|
|
239
|
-
version: 3.2.
|
|
225
|
+
version: 3.2.6
|
|
240
226
|
type: :development
|
|
241
227
|
prerelease: false
|
|
242
228
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -246,7 +232,7 @@ dependencies:
|
|
|
246
232
|
version: '3.2'
|
|
247
233
|
- - ">="
|
|
248
234
|
- !ruby/object:Gem::Version
|
|
249
|
-
version: 3.2.
|
|
235
|
+
version: 3.2.6
|
|
250
236
|
- !ruby/object:Gem::Dependency
|
|
251
237
|
name: ruby-progressbar
|
|
252
238
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -290,7 +276,7 @@ dependencies:
|
|
|
290
276
|
version: '2.0'
|
|
291
277
|
- - ">="
|
|
292
278
|
- !ruby/object:Gem::Version
|
|
293
|
-
version: 2.0.
|
|
279
|
+
version: 2.0.12
|
|
294
280
|
type: :development
|
|
295
281
|
prerelease: false
|
|
296
282
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -300,7 +286,7 @@ dependencies:
|
|
|
300
286
|
version: '2.0'
|
|
301
287
|
- - ">="
|
|
302
288
|
- !ruby/object:Gem::Version
|
|
303
|
-
version: 2.0.
|
|
289
|
+
version: 2.0.12
|
|
304
290
|
description: "☯️ Tree-sitter-backed Ruby family substrate for Structured Merge."
|
|
305
291
|
email:
|
|
306
292
|
- floss@galtzo.com
|
|
@@ -312,7 +298,17 @@ files:
|
|
|
312
298
|
- README.md
|
|
313
299
|
- lib/ruby-merge.rb
|
|
314
300
|
- lib/ruby/merge.rb
|
|
315
|
-
- lib/ruby/merge/
|
|
301
|
+
- lib/ruby/merge/block_binding_support.rb
|
|
302
|
+
- lib/ruby/merge/block_directive_detector.rb
|
|
303
|
+
- lib/ruby/merge/doc_comment_support.rb
|
|
304
|
+
- lib/ruby/merge/gemspec_support.rb
|
|
305
|
+
- lib/ruby/merge/magic_comment_support.rb
|
|
306
|
+
- lib/ruby/merge/method_similarity.rb
|
|
307
|
+
- lib/ruby/merge/nocov_node_base.rb
|
|
308
|
+
- lib/ruby/merge/nocov_wrapper_base.rb
|
|
309
|
+
- lib/ruby/merge/rescue_semantics.rb
|
|
310
|
+
- lib/ruby/merge/scaffold_chunk_support.rb
|
|
311
|
+
- lib/ruby/merge/signature_support.rb
|
|
316
312
|
- lib/ruby/merge/version.rb
|
|
317
313
|
- sig/ruby/merge.rbs
|
|
318
314
|
homepage: https://github.com/structuredmerge/structuredmerge-ruby
|
|
@@ -321,10 +317,10 @@ licenses:
|
|
|
321
317
|
- PolyForm-Small-Business-1.0.0
|
|
322
318
|
metadata:
|
|
323
319
|
homepage_uri: https://structuredmerge.org
|
|
324
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
325
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
320
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.4
|
|
321
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.4/CHANGELOG.md
|
|
326
322
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
327
|
-
documentation_uri: https://www.rubydoc.info/gems/ruby-merge/7.1.
|
|
323
|
+
documentation_uri: https://www.rubydoc.info/gems/ruby-merge/7.1.4
|
|
328
324
|
funding_uri: https://github.com/sponsors/pboling
|
|
329
325
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
330
326
|
news_uri: https://www.railsbling.com/tags/ruby-merge
|
metadata.gz.sig
CHANGED
|
Binary file
|
data/lib/ruby/merge/provider.rb
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Ruby
|
|
4
|
-
# Portable Ruby workflow integration.
|
|
5
|
-
module Merge
|
|
6
|
-
# Ruby workflow selector delegating source-preserving operations to Prism.
|
|
7
|
-
class Provider
|
|
8
|
-
BACKEND = :prism
|
|
9
|
-
DELEGATED_PROVIDER_ID = 'ruby.ruby.prism'
|
|
10
|
-
DEFAULT_PROFILE = :source_preserving
|
|
11
|
-
|
|
12
|
-
def provider_id = 'ruby.ruby'
|
|
13
|
-
def family = 'ruby'
|
|
14
|
-
|
|
15
|
-
def capabilities
|
|
16
|
-
{
|
|
17
|
-
operations: Ast::Merge::ProviderContract::OPERATIONS,
|
|
18
|
-
dialects: %i[ruby],
|
|
19
|
-
backends: [BACKEND],
|
|
20
|
-
profiles: [DEFAULT_PROFILE],
|
|
21
|
-
role: :workflow,
|
|
22
|
-
source_preservation: Prism::Merge.merge_provider.capabilities.fetch(:source_preservation)
|
|
23
|
-
}.freeze
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
Ast::Merge::ProviderContract::OPERATIONS.each do |operation|
|
|
27
|
-
define_method(operation) do |request|
|
|
28
|
-
delegated = Ast::Merge.dispatch_provider(operation, delegated_request(request))
|
|
29
|
-
delegated.merge(provider: workflow_identity(request, delegated))
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
def delegated_request(request)
|
|
36
|
-
request.merge(
|
|
37
|
-
provider_id: DELEGATED_PROVIDER_ID,
|
|
38
|
-
family: :ruby,
|
|
39
|
-
dialect: :ruby,
|
|
40
|
-
backend: BACKEND,
|
|
41
|
-
profile_id: DEFAULT_PROFILE
|
|
42
|
-
)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def workflow_identity(request, delegated)
|
|
46
|
-
{
|
|
47
|
-
provider_id: provider_id,
|
|
48
|
-
family: family,
|
|
49
|
-
dialect: request[:dialect] || :ruby,
|
|
50
|
-
backend: request[:backend] || BACKEND,
|
|
51
|
-
package: PACKAGE_NAME,
|
|
52
|
-
package_version: Ruby::Merge::Version::VERSION,
|
|
53
|
-
delegated_provider: delegated_identity(delegated.fetch(:provider))
|
|
54
|
-
}
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def delegated_identity(identity)
|
|
58
|
-
{
|
|
59
|
-
provider_id: identity.fetch(:provider_id),
|
|
60
|
-
backend: identity.fetch(:backend),
|
|
61
|
-
package: identity[:package],
|
|
62
|
-
package_version: identity[:package_version]
|
|
63
|
-
}.compact
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
class << self
|
|
68
|
-
def merge_provider
|
|
69
|
-
@merge_provider ||= Provider.new
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def register_provider!(replace: false)
|
|
73
|
-
Ast::Merge.register_provider(merge_provider, replace: replace)
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|