prism-merge 2.0.4 → 7.0.0

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: 025344bcf44324e19df2d0519fc8f935a0c51c1236d2299407ca52ec406e6a13
4
- data.tar.gz: a3f1a6fe2a2ede10fa8c5072268bd384a850d9cbd8e2e95a206e39158e426ec4
3
+ metadata.gz: 902102ab969c44cede8cc8c5cf97022b6caf931dedb5ec7f8b2d2067701af29f
4
+ data.tar.gz: 4627a5bb8d4796811861babba6c33d95d37e038cb44599d75aa9e6adaef9fc88
5
5
  SHA512:
6
- metadata.gz: e2e182168a6014be8e7d3c8ad2130886e63938ac2e7543675a323284cd7cae73667d4b0309b3faa4ae778c241c0b22dc58f03a50d37431f71e0ed9381fdbdd31
7
- data.tar.gz: 5ec2df827e3bd5f749fdd26576f145f0244f37fa167aa85d101a2fd538fc4b88683c74497bb43e7ae366287b44ca1a39c8afc2ca7fc35bbb219c92c17efe5b20
6
+ metadata.gz: 6ace90f0e92a7cfa017539ccbbd99eab1473267c77e4c463be258d2fadf612357078c560f18b740aece5bbc371b814748d7a52f91f56edd3461a545d37e07c37
7
+ data.tar.gz: d3444d2696679cfbc6962f1f9445d996c72e0598e233f9316eb2063cc94ed4703620db52743acafdeb4b118de6f97f0f27a58dafc139895b323573bbe15909dd
checksums.yaml.gz.sig CHANGED
Binary file
@@ -2,11 +2,10 @@
2
2
 
3
3
  module Prism
4
4
  module Merge
5
- # Version information for Prism::Merge
6
5
  module Version
7
- # Current version of the prism-merge gem
8
- VERSION = "2.0.4"
6
+ VERSION = "7.0.0"
9
7
  end
10
- VERSION = Version::VERSION # traditional location
8
+
9
+ VERSION = Version::VERSION
11
10
  end
12
11
  end
data/lib/prism/merge.rb CHANGED
@@ -1,97 +1,501 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # External gems
4
3
  require "prism"
5
- require "version_gem"
6
- require "set"
7
-
8
- # Shared merge infrastructure
9
- require "ast/merge"
10
-
11
- # This gem
12
- require_relative "merge/version"
13
-
14
- # Prism::Merge provides a generic Ruby file smart merge system using Prism AST analysis.
15
- # It intelligently merges template and destination Ruby files by identifying matching
16
- # sections (anchors) and resolving differences (boundaries) using structural signatures.
17
- #
18
- # @example Basic usage
19
- # template = File.read("template.rb")
20
- # destination = File.read("destination.rb")
21
- # merger = Prism::Merge::SmartMerger.new(template, destination)
22
- # result = merger.merge
23
- #
24
- # @example With debug information
25
- # merger = Prism::Merge::SmartMerger.new(template, destination)
26
- # debug_result = merger.merge_with_debug
27
- # puts debug_result[:debug]
28
- # puts debug_result[:statistics]
4
+ require "ruby-merge"
5
+
29
6
  module Prism
30
- # Smart merge system for Ruby files using Prism AST analysis.
31
- # Provides intelligent merging by understanding Ruby code structure
32
- # rather than treating files as plain text.
33
- #
34
- # @see SmartMerger Main entry point for merge operations
35
- # @see FileAnalysis Parses and analyzes Ruby source files
36
- # @see MergeResult Tracks merged content and decisions
37
7
  module Merge
38
- # Base error class for Prism::Merge
39
- # Inherits from Ast::Merge::Error for consistency across merge gems.
40
- class Error < Ast::Merge::Error; end
41
-
42
- # Raised when a Ruby file has parsing errors.
43
- # Inherits from Ast::Merge::ParseError for consistency across merge gems.
44
- # Provides Prism-specific `parse_result` attribute.
45
- class ParseError < Ast::Merge::ParseError
46
- # @return [Prism::ParseResult, nil] The Prism parse result containing error details
47
- attr_reader :parse_result
48
-
49
- # @param message [String, nil] Error message (auto-generated if nil)
50
- # @param errors [Array] Array of error objects (for base class compatibility)
51
- # @param content [String, nil] The Ruby source that failed to parse
52
- # @param parse_result [Prism::ParseResult, nil] Parse result with error information
53
- def initialize(message = nil, errors: [], content: nil, parse_result: nil)
54
- @parse_result = parse_result
55
- # If we have a parse_result, use its errors
56
- effective_errors = parse_result&.errors || errors
57
- super(message, errors: effective_errors, content: content)
8
+ extend self
9
+
10
+ PACKAGE_NAME = "prism-merge"
11
+ BACKEND_REFERENCE = TreeHaver::BackendReference.new(id: "prism", family: "native").freeze
12
+ TreeHaver::BackendRegistry.register(BACKEND_REFERENCE)
13
+
14
+ def ruby_feature_profile
15
+ Ruby::Merge.ruby_feature_profile
16
+ end
17
+
18
+ def available_ruby_backends
19
+ [BACKEND_REFERENCE]
20
+ end
21
+
22
+ def ruby_backend_feature_profile(backend: nil)
23
+ requested = backend.to_s.empty? ? BACKEND_REFERENCE.id : backend.to_s
24
+ return unsupported_feature_result("Unsupported Ruby backend #{requested}.") unless requested == BACKEND_REFERENCE.id
25
+
26
+ ruby_feature_profile.merge(backend: BACKEND_REFERENCE.id, backend_ref: BACKEND_REFERENCE.to_h)
27
+ end
28
+
29
+ def ruby_plan_context(backend: nil)
30
+ profile = ruby_backend_feature_profile(backend: backend)
31
+ return profile if profile[:ok] == false
32
+
33
+ {
34
+ family_profile: ruby_feature_profile,
35
+ feature_profile: {
36
+ backend: profile[:backend],
37
+ supports_dialects: true,
38
+ supported_policies: profile[:supported_policies]
39
+ }
40
+ }
41
+ end
42
+
43
+ def ruby_structured_edit_provider_profile
44
+ {
45
+ package: PACKAGE_NAME,
46
+ backend: BACKEND_REFERENCE.id,
47
+ structured_edit_profile: {
48
+ family: "ruby",
49
+ structure_profile: Ast::Merge.structured_edit_structure_profile(
50
+ owner_scope: "shared_default",
51
+ owner_selector: "line_bound_statements",
52
+ owner_selector_family: "line_oriented",
53
+ known_owner_selector: true,
54
+ supported_comment_regions: ["leading"],
55
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
56
+ ),
57
+ selection_profile: Ast::Merge.structured_edit_selection_profile(
58
+ owner_scope: "shared_default",
59
+ owner_selector: "line_bound_statements",
60
+ owner_selector_family: "line_oriented",
61
+ selector_kind: "comment_region_owned_owner",
62
+ selection_intent: "comment_anchored_owner",
63
+ selection_intent_family: "comment_anchor",
64
+ known_selection_intent: true,
65
+ comment_region: "leading",
66
+ include_trailing_gap: true,
67
+ comment_anchored: true,
68
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
69
+ ),
70
+ match_profile: Ast::Merge.structured_edit_match_profile(
71
+ start_boundary: "comment_region_start",
72
+ start_boundary_family: "comment_anchor",
73
+ known_start_boundary: true,
74
+ end_boundary: "owner_end_plus_trailing_gap",
75
+ end_boundary_family: "gap_extension",
76
+ known_end_boundary: true,
77
+ payload_kind: "comment_owned_body",
78
+ payload_family: "comment_owned",
79
+ known_payload_kind: true,
80
+ comment_anchored: true,
81
+ trailing_gap_extended: true,
82
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
83
+ )
84
+ }
85
+ }
86
+ end
87
+
88
+ def ruby_structured_edit_request_projection
89
+ {
90
+ package: PACKAGE_NAME,
91
+ backend: BACKEND_REFERENCE.id,
92
+ structured_edit_request: Ast::Merge.structured_edit_request(
93
+ operation_kind: "replace",
94
+ content: "class App\n # managed snippet\n old_call\nend\n",
95
+ source_label: "source",
96
+ target_selector: "managed_snippet",
97
+ target_selector_family: "comment_anchor",
98
+ target_selection: Ast::Merge.structured_edit_target_selection(
99
+ selector_kind: "comment_region_owned_owner",
100
+ selection_intent: "comment_anchored_owner",
101
+ selection_intent_family: "comment_anchor",
102
+ known_selection_intent: true,
103
+ comment_region: "leading",
104
+ include_trailing_gap: true,
105
+ comment_anchored: true,
106
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
107
+ ),
108
+ target_match: Ast::Merge.structured_edit_target_match(
109
+ start_boundary: "comment_region_start",
110
+ start_boundary_family: "comment_anchor",
111
+ known_start_boundary: true,
112
+ end_boundary: "owner_end_plus_trailing_gap",
113
+ end_boundary_family: "gap_extension",
114
+ known_end_boundary: true,
115
+ payload_kind: "comment_owned_body",
116
+ payload_family: "comment_owned",
117
+ known_payload_kind: true,
118
+ comment_anchored: true,
119
+ trailing_gap_extended: true,
120
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
121
+ ),
122
+ payload_text: "new_call\n",
123
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
124
+ )
125
+ }
126
+ end
127
+
128
+ def ruby_structured_edit_result_projection
129
+ {
130
+ package: PACKAGE_NAME,
131
+ backend: BACKEND_REFERENCE.id,
132
+ structured_edit_result: Ast::Merge.structured_edit_result(
133
+ operation_kind: "replace",
134
+ updated_content: "class App\n # managed snippet\n new_call\nend\n",
135
+ changed: true,
136
+ captured_text: "old_call\n",
137
+ match_count: 1,
138
+ operation_profile: Ast::Merge.structured_edit_operation_profile(
139
+ operation_kind: "replace",
140
+ operation_family: "rewrite",
141
+ known_operation_kind: true,
142
+ source_requirement: "required",
143
+ destination_requirement: "none",
144
+ replacement_source: "explicit_text",
145
+ captures_source_text: true,
146
+ supports_if_missing: false,
147
+ metadata: { source: "legacy_crispr_reference" }
148
+ ),
149
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
150
+ )
151
+ }
152
+ end
153
+
154
+ def ruby_structured_edit_application_projection
155
+ {
156
+ package: PACKAGE_NAME,
157
+ backend: BACKEND_REFERENCE.id,
158
+ structured_edit_application: Ast::Merge.structured_edit_application(
159
+ request: ruby_structured_edit_request_projection[:structured_edit_request],
160
+ result: ruby_structured_edit_result_projection[:structured_edit_result],
161
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
162
+ )
163
+ }
164
+ end
165
+
166
+ def ruby_structured_edit_execution_report_projection
167
+ {
168
+ package: PACKAGE_NAME,
169
+ backend: BACKEND_REFERENCE.id,
170
+ structured_edit_execution_report: Ast::Merge.structured_edit_execution_report(
171
+ application: ruby_structured_edit_application_projection[:structured_edit_application],
172
+ provider_family: "ruby",
173
+ provider_backend: BACKEND_REFERENCE.id,
174
+ diagnostics: [
175
+ {
176
+ severity: "warning",
177
+ category: "assumed_default",
178
+ message: "using managed snippet fallback selection."
179
+ }
180
+ ],
181
+ metadata: { source: "legacy_crispr_reference" }
182
+ )
183
+ }
184
+ end
185
+
186
+ def ruby_structured_edit_batch_request_projection
187
+ content = "class App\n # managed snippet\n old_call\n\n anchor_call\n\n # obsolete snippet\n obsolete_call\nend\n"
188
+ {
189
+ package: PACKAGE_NAME,
190
+ backend: BACKEND_REFERENCE.id,
191
+ structured_edit_batch_request: Ast::Merge.structured_edit_batch_request(
192
+ requests: [
193
+ Ast::Merge.structured_edit_request(
194
+ operation_kind: "replace",
195
+ content: content,
196
+ source_label: "source",
197
+ target_selector: "managed_snippet",
198
+ target_selector_family: "comment_anchor",
199
+ payload_text: "new_call\n",
200
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
201
+ ),
202
+ Ast::Merge.structured_edit_request(
203
+ operation_kind: "insert",
204
+ content: content,
205
+ source_label: "source",
206
+ destination_selector: "after_anchor_call",
207
+ destination_selector_family: "gap_preserving_statement",
208
+ payload_text: "inserted_call\n",
209
+ if_missing: "append",
210
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
211
+ ),
212
+ Ast::Merge.structured_edit_request(
213
+ operation_kind: "delete",
214
+ content: content,
215
+ source_label: "source",
216
+ target_selector: "obsolete_snippet",
217
+ target_selector_family: "comment_anchor",
218
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
219
+ )
220
+ ],
221
+ metadata: { batch_label: "ruby_prism_triad", source: "legacy_crispr_reference" }
222
+ )
223
+ }
224
+ end
225
+
226
+ def ruby_structured_edit_batch_report_projection
227
+ content = "class App\n # managed snippet\n old_call\n\n anchor_call\n\n # obsolete snippet\n obsolete_call\nend\n"
228
+ {
229
+ package: PACKAGE_NAME,
230
+ backend: BACKEND_REFERENCE.id,
231
+ structured_edit_batch_report: Ast::Merge.structured_edit_batch_report(
232
+ reports: [
233
+ Ast::Merge.structured_edit_execution_report(
234
+ application: Ast::Merge.structured_edit_application(
235
+ request: Ast::Merge.structured_edit_request(
236
+ operation_kind: "replace",
237
+ content: content,
238
+ source_label: "source",
239
+ target_selector: "managed_snippet",
240
+ target_selector_family: "comment_anchor",
241
+ payload_text: "new_call\n",
242
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
243
+ ),
244
+ result: Ast::Merge.structured_edit_result(
245
+ operation_kind: "replace",
246
+ updated_content: "class App\n # managed snippet\n new_call\n\n anchor_call\n\n # obsolete snippet\n obsolete_call\nend\n",
247
+ changed: true,
248
+ captured_text: "old_call\n",
249
+ match_count: 1,
250
+ operation_profile: Ast::Merge.structured_edit_operation_profile(
251
+ operation_kind: "replace",
252
+ operation_family: "rewrite",
253
+ known_operation_kind: true,
254
+ source_requirement: "required",
255
+ destination_requirement: "none",
256
+ replacement_source: "explicit_text",
257
+ captures_source_text: true,
258
+ supports_if_missing: false,
259
+ metadata: { source: "legacy_crispr_reference" }
260
+ ),
261
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
262
+ ),
263
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
264
+ ),
265
+ provider_family: "ruby",
266
+ provider_backend: BACKEND_REFERENCE.id,
267
+ diagnostics: [],
268
+ metadata: { source: "legacy_crispr_reference" }
269
+ ),
270
+ Ast::Merge.structured_edit_execution_report(
271
+ application: Ast::Merge.structured_edit_application(
272
+ request: Ast::Merge.structured_edit_request(
273
+ operation_kind: "insert",
274
+ content: content,
275
+ source_label: "source",
276
+ destination_selector: "after_anchor_call",
277
+ destination_selector_family: "gap_preserving_statement",
278
+ payload_text: "inserted_call\n",
279
+ if_missing: "append",
280
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
281
+ ),
282
+ result: Ast::Merge.structured_edit_result(
283
+ operation_kind: "insert",
284
+ updated_content: "class App\n # managed snippet\n old_call\n\n anchor_call\n inserted_call\n\n # obsolete snippet\n obsolete_call\nend\n",
285
+ changed: true,
286
+ operation_profile: Ast::Merge.structured_edit_operation_profile(
287
+ operation_kind: "insert",
288
+ operation_family: "insertion",
289
+ known_operation_kind: true,
290
+ source_requirement: "none",
291
+ destination_requirement: "optional",
292
+ replacement_source: "explicit_text",
293
+ captures_source_text: false,
294
+ supports_if_missing: true,
295
+ metadata: { source: "legacy_crispr_reference" }
296
+ ),
297
+ destination_profile: Ast::Merge.structured_edit_destination_profile(
298
+ resolution_kind: "selector",
299
+ resolution_source: "destination_selector",
300
+ anchor_boundary: "after",
301
+ resolution_family: "anchored",
302
+ resolution_source_family: "selector",
303
+ anchor_boundary_family: "gap_preserving_statement",
304
+ known_resolution_kind: true,
305
+ known_resolution_source: true,
306
+ known_anchor_boundary: true,
307
+ used_if_missing: false,
308
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
309
+ ),
310
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
311
+ ),
312
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
313
+ ),
314
+ provider_family: "ruby",
315
+ provider_backend: BACKEND_REFERENCE.id,
316
+ diagnostics: [],
317
+ metadata: { source: "legacy_crispr_reference" }
318
+ ),
319
+ Ast::Merge.structured_edit_execution_report(
320
+ application: Ast::Merge.structured_edit_application(
321
+ request: Ast::Merge.structured_edit_request(
322
+ operation_kind: "delete",
323
+ content: content,
324
+ source_label: "source",
325
+ target_selector: "obsolete_snippet",
326
+ target_selector_family: "comment_anchor",
327
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
328
+ ),
329
+ result: Ast::Merge.structured_edit_result(
330
+ operation_kind: "delete",
331
+ updated_content: "class App\n # managed snippet\n old_call\n\n anchor_call\nend\n",
332
+ changed: true,
333
+ captured_text: "obsolete_call\n",
334
+ match_count: 1,
335
+ operation_profile: Ast::Merge.structured_edit_operation_profile(
336
+ operation_kind: "delete",
337
+ operation_family: "removal",
338
+ known_operation_kind: true,
339
+ source_requirement: "required",
340
+ destination_requirement: "none",
341
+ replacement_source: "none",
342
+ captures_source_text: true,
343
+ supports_if_missing: false,
344
+ metadata: { source: "legacy_crispr_reference" }
345
+ ),
346
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
347
+ ),
348
+ metadata: { family: "ruby", provider: BACKEND_REFERENCE.id, source: "legacy_crispr_reference" }
349
+ ),
350
+ provider_family: "ruby",
351
+ provider_backend: BACKEND_REFERENCE.id,
352
+ diagnostics: [],
353
+ metadata: { source: "legacy_crispr_reference" }
354
+ )
355
+ ],
356
+ diagnostics: [
357
+ {
358
+ severity: "info",
359
+ category: "assumed_default",
360
+ message: "ruby batch preserved request ordering."
361
+ }
362
+ ],
363
+ metadata: { batch_label: "ruby_prism_triad", source: "legacy_crispr_reference" }
364
+ )
365
+ }
366
+ end
367
+
368
+ def parse_ruby(source, dialect, backend: nil)
369
+ requested = backend.to_s.empty? ? BACKEND_REFERENCE.id : backend.to_s
370
+ return unsupported_feature_result("Unsupported Ruby dialect #{dialect}.") unless dialect == "ruby"
371
+ return unsupported_feature_result("Unsupported Ruby backend #{requested}.") unless requested == BACKEND_REFERENCE.id
372
+
373
+ result = ::Prism.parse(source)
374
+ unless result.success?
375
+ return {
376
+ ok: false,
377
+ diagnostics: result.errors.map do |error|
378
+ { severity: "error", category: "parse_error", message: error.message }
379
+ end,
380
+ policies: []
381
+ }
58
382
  end
383
+
384
+ {
385
+ ok: true,
386
+ diagnostics: [],
387
+ analysis: Ruby::Merge.analyze_ruby_document(source),
388
+ policies: []
389
+ }
59
390
  end
60
391
 
61
- # Raised when the template file has syntax errors.
62
- #
63
- # @example Handling template parse errors
64
- # begin
65
- # merger = SmartMerger.new(template, destination)
66
- # result = merger.merge
67
- # rescue TemplateParseError => e
68
- # puts "Template syntax error: #{e.message}"
69
- # e.errors.each { |error| puts " #{error.message}" }
70
- # end
71
- class TemplateParseError < ParseError; end
72
-
73
- # Raised when the destination file has syntax errors.
74
- #
75
- # @example Handling destination parse errors
76
- # begin
77
- # merger = SmartMerger.new(template, destination)
78
- # result = merger.merge
79
- # rescue DestinationParseError => e
80
- # puts "Destination syntax error: #{e.message}"
81
- # e.errors.each { |error| puts " #{error.message}" }
82
- # end
83
- class DestinationParseError < ParseError; end
84
-
85
- autoload :Comment, "prism/merge/comment"
86
- autoload :DebugLogger, "prism/merge/debug_logger"
87
- autoload :FreezeNode, "prism/merge/freeze_node"
88
- autoload :FileAnalysis, "prism/merge/file_analysis"
89
- autoload :MergeResult, "prism/merge/merge_result"
90
- autoload :SmartMerger, "prism/merge/smart_merger"
91
- autoload :MethodMatchRefiner, "prism/merge/method_match_refiner"
92
- end
93
- end
392
+ def match_ruby_owners(template, destination)
393
+ Ruby::Merge.match_ruby_owners(template, destination)
394
+ end
395
+
396
+ def merge_ruby(template_source, destination_source, dialect, backend: nil)
397
+ requested = backend.to_s.empty? ? BACKEND_REFERENCE.id : backend.to_s
398
+ return unsupported_feature_result("Unsupported Ruby backend #{requested}.") unless requested == BACKEND_REFERENCE.id
399
+
400
+ Ruby::Merge.merge_ruby(template_source, destination_source, dialect)
401
+ end
402
+
403
+ def merge_ruby_with_reviewed_nested_outputs(template_source, destination_source, dialect, review_state, applied_children, backend: nil)
404
+ requested = backend.to_s.empty? ? BACKEND_REFERENCE.id : backend.to_s
405
+ return unsupported_feature_result("Unsupported Ruby backend #{requested}.") unless requested == BACKEND_REFERENCE.id
406
+
407
+ Ruby::Merge.merge_ruby_with_reviewed_nested_outputs(
408
+ template_source,
409
+ destination_source,
410
+ dialect,
411
+ review_state,
412
+ applied_children
413
+ )
414
+ end
415
+
416
+ def merge_ruby_with_reviewed_nested_outputs_from_replay_bundle(template_source, destination_source, dialect, replay_bundle, backend: nil)
417
+ requested = backend.to_s.empty? ? BACKEND_REFERENCE.id : backend.to_s
418
+ return unsupported_feature_result("Unsupported Ruby backend #{requested}.") unless requested == BACKEND_REFERENCE.id
419
+
420
+ Ruby::Merge.merge_ruby_with_reviewed_nested_outputs_from_replay_bundle(
421
+ template_source,
422
+ destination_source,
423
+ dialect,
424
+ replay_bundle
425
+ )
426
+ end
427
+
428
+ def merge_ruby_with_reviewed_nested_outputs_from_replay_bundle_envelope(template_source, destination_source, dialect, envelope, backend: nil)
429
+ requested = backend.to_s.empty? ? BACKEND_REFERENCE.id : backend.to_s
430
+ return unsupported_feature_result("Unsupported Ruby backend #{requested}.") unless requested == BACKEND_REFERENCE.id
431
+
432
+ Ruby::Merge.merge_ruby_with_reviewed_nested_outputs_from_replay_bundle_envelope(
433
+ template_source,
434
+ destination_source,
435
+ dialect,
436
+ envelope
437
+ )
438
+ end
439
+
440
+ def merge_ruby_with_reviewed_nested_outputs_from_review_state(template_source, destination_source, dialect, review_state, backend: nil)
441
+ requested = backend.to_s.empty? ? BACKEND_REFERENCE.id : backend.to_s
442
+ return unsupported_feature_result("Unsupported Ruby backend #{requested}.") unless requested == BACKEND_REFERENCE.id
443
+
444
+ Ruby::Merge.merge_ruby_with_reviewed_nested_outputs_from_review_state(
445
+ template_source,
446
+ destination_source,
447
+ dialect,
448
+ review_state
449
+ )
450
+ end
451
+
452
+ def merge_ruby_with_reviewed_nested_outputs_from_review_state_envelope(template_source, destination_source, dialect, envelope, backend: nil)
453
+ requested = backend.to_s.empty? ? BACKEND_REFERENCE.id : backend.to_s
454
+ return unsupported_feature_result("Unsupported Ruby backend #{requested}.") unless requested == BACKEND_REFERENCE.id
455
+
456
+ Ruby::Merge.merge_ruby_with_reviewed_nested_outputs_from_review_state_envelope(
457
+ template_source,
458
+ destination_source,
459
+ dialect,
460
+ envelope
461
+ )
462
+ end
94
463
 
95
- Prism::Merge::Version.class_eval do
96
- extend VersionGem::Basic
464
+ def ruby_discovered_surfaces(analysis)
465
+ Ruby::Merge.ruby_discovered_surfaces(analysis)
466
+ end
467
+
468
+ def ruby_delegated_child_operations(analysis, parent_operation_id: "ruby-document-0")
469
+ Ruby::Merge.ruby_delegated_child_operations(analysis, parent_operation_id: parent_operation_id)
470
+ end
471
+
472
+ def unsupported_feature_result(message)
473
+ Ruby::Merge.unsupported_feature_result(message)
474
+ end
475
+
476
+ module_function(
477
+ :ruby_feature_profile,
478
+ :available_ruby_backends,
479
+ :ruby_backend_feature_profile,
480
+ :ruby_plan_context,
481
+ :ruby_structured_edit_provider_profile,
482
+ :ruby_structured_edit_request_projection,
483
+ :ruby_structured_edit_result_projection,
484
+ :ruby_structured_edit_application_projection,
485
+ :ruby_structured_edit_execution_report_projection,
486
+ :ruby_structured_edit_batch_request_projection,
487
+ :ruby_structured_edit_batch_report_projection,
488
+ :parse_ruby,
489
+ :match_ruby_owners,
490
+ :merge_ruby,
491
+ :merge_ruby_with_reviewed_nested_outputs,
492
+ :merge_ruby_with_reviewed_nested_outputs_from_replay_bundle,
493
+ :merge_ruby_with_reviewed_nested_outputs_from_replay_bundle_envelope,
494
+ :merge_ruby_with_reviewed_nested_outputs_from_review_state,
495
+ :merge_ruby_with_reviewed_nested_outputs_from_review_state_envelope,
496
+ :ruby_discovered_surfaces,
497
+ :ruby_delegated_child_operations,
498
+ :unsupported_feature_result
499
+ )
500
+ end
97
501
  end
data/lib/prism-merge.rb CHANGED
@@ -1,4 +1,3 @@
1
- # For technical reasons, if we move to Zeitwerk, this cannot be require_relative.
2
- # See: https://github.com/fxn/zeitwerk#for_gem_extension
3
- # Hook for other libraries to load this library (e.g. via bundler)
4
- require "prism/merge"
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "prism/merge"
data.tar.gz.sig CHANGED
Binary file