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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/prism/merge/version.rb +3 -4
- data/lib/prism/merge.rb +491 -87
- data/lib/prism-merge.rb +3 -4
- data.tar.gz.sig +0 -0
- metadata +26 -271
- metadata.gz.sig +0 -0
- data/CHANGELOG.md +0 -416
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -227
- data/FUNDING.md +0 -74
- data/LICENSE.txt +0 -21
- data/README.md +0 -1586
- data/REEK +0 -0
- data/RUBOCOP.md +0 -71
- data/SECURITY.md +0 -21
- data/lib/prism/merge/comment/block.rb +0 -73
- data/lib/prism/merge/comment/line.rb +0 -102
- data/lib/prism/merge/comment/parser.rb +0 -103
- data/lib/prism/merge/comment.rb +0 -21
- data/lib/prism/merge/debug_logger.rb +0 -37
- data/lib/prism/merge/file_analysis.rb +0 -570
- data/lib/prism/merge/freeze_node.rb +0 -150
- data/lib/prism/merge/merge_result.rb +0 -219
- data/lib/prism/merge/method_match_refiner.rb +0 -194
- data/lib/prism/merge/smart_merger.rb +0 -1224
- data/sig/prism/merge.rbs +0 -397
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 902102ab969c44cede8cc8c5cf97022b6caf931dedb5ec7f8b2d2067701af29f
|
|
4
|
+
data.tar.gz: 4627a5bb8d4796811861babba6c33d95d37e038cb44599d75aa9e6adaef9fc88
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6ace90f0e92a7cfa017539ccbbd99eab1473267c77e4c463be258d2fadf612357078c560f18b740aece5bbc371b814748d7a52f91f56edd3461a545d37e07c37
|
|
7
|
+
data.tar.gz: d3444d2696679cfbc6962f1f9445d996c72e0598e233f9316eb2063cc94ed4703620db52743acafdeb4b118de6f97f0f27a58dafc139895b323573bbe15909dd
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/lib/prism/merge/version.rb
CHANGED
|
@@ -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
|
-
|
|
8
|
-
VERSION = "2.0.4"
|
|
6
|
+
VERSION = "7.0.0"
|
|
9
7
|
end
|
|
10
|
-
|
|
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 "
|
|
6
|
-
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
96
|
-
|
|
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
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
require "prism/merge"
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "prism/merge"
|
data.tar.gz.sig
CHANGED
|
Binary file
|