prism-merge 7.1.7 → 7.1.8
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/node_emission_support.rb +13 -0
- data/lib/prism/merge/provider.rb +95 -0
- data/lib/prism/merge/rspec/provider_snapshot_extension.rb +43 -0
- data/lib/prism/merge/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +17 -16
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c9bb0cd6d347f5231bdc73d9fdf4f752dc4900a8a4fda3d1a93e8749673e1d94
|
|
4
|
+
data.tar.gz: 1d0763e1c290d0026f1bf2a6d44b4657b3353c8cb6813597e0943eaa8a4b2369
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 23a30711093805e44d7faa6888f24db54d51f741ab033e6d1f8353375df03941ef65007bcb0ce0f1af1137ce86ac4bfebedd3f15aa47035acb1964c4f5333488
|
|
7
|
+
data.tar.gz: 958a34605f7d99be74c799f77072e95b8490184b04e7318c16efc3f00983cb1c16ac1dcb5585e05927548bc39e44c81fb9a01403fd2338428ea26b7d6d783bd4
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
|
@@ -402,6 +402,19 @@ module Prism
|
|
|
402
402
|
inline_comment_entries = analysis.send(:owner_inline_comment_entries, node)
|
|
403
403
|
|
|
404
404
|
if source == :template
|
|
405
|
+
if leading_comments.empty?
|
|
406
|
+
last_emitted_template_line = result.line_metadata.reverse_each.find do |metadata|
|
|
407
|
+
metadata[:template_line]
|
|
408
|
+
end&.fetch(:template_line, 0) || 0
|
|
409
|
+
emit_layout_leading_gap_lines(
|
|
410
|
+
result: result,
|
|
411
|
+
analysis: analysis,
|
|
412
|
+
owner: node,
|
|
413
|
+
source: source,
|
|
414
|
+
decision: decision,
|
|
415
|
+
last_output_line: last_emitted_template_line
|
|
416
|
+
)
|
|
417
|
+
end
|
|
405
418
|
emit_template_blank_lines_before_leading_comments(
|
|
406
419
|
result: result,
|
|
407
420
|
node: node,
|
data/lib/prism/merge/provider.rb
CHANGED
|
@@ -88,6 +88,8 @@ module Prism
|
|
|
88
88
|
|
|
89
89
|
exact_role = exact_revision_role(request)
|
|
90
90
|
decision = decide(documents, include_unmanaged_conflict: exact_role.nil?)
|
|
91
|
+
nested = render_nested_composite(request, documents, decision)
|
|
92
|
+
return nested if nested
|
|
91
93
|
return render_conflicts(request, documents, decision) unless decision.conflicts.empty?
|
|
92
94
|
|
|
93
95
|
return render_exact(request, documents, decision, exact_role) if exact_role
|
|
@@ -144,6 +146,8 @@ module Prism
|
|
|
144
146
|
by_id: owners.to_h { |owner| [owner.id, owner] }.freeze,
|
|
145
147
|
unmanaged_fingerprint: unmanaged_fingerprint(source, owners)
|
|
146
148
|
)
|
|
149
|
+
rescue Prism::Merge::Error => e
|
|
150
|
+
{ parse_error: e.message, source_role: role }
|
|
147
151
|
end
|
|
148
152
|
|
|
149
153
|
def unmanaged_fingerprint(source, owners)
|
|
@@ -363,6 +367,97 @@ module Prism
|
|
|
363
367
|
)
|
|
364
368
|
end
|
|
365
369
|
|
|
370
|
+
# Top-level Prism owners intentionally include a class body as one source
|
|
371
|
+
# range. When both revisions edit different direct methods, compose those
|
|
372
|
+
# method ranges before falling back to a class-level conflict.
|
|
373
|
+
def render_nested_composite(request, documents, decision)
|
|
374
|
+
return unless decision.conflicts.length == 1
|
|
375
|
+
|
|
376
|
+
conflict = decision.conflicts.first
|
|
377
|
+
ours_owner = documents.fetch(:ours).by_id[conflict[:owner_id]]
|
|
378
|
+
base_owner = documents.fetch(:base).by_id[conflict[:owner_id]]
|
|
379
|
+
theirs_owner = documents.fetch(:theirs).by_id[conflict[:owner_id]]
|
|
380
|
+
return unless [ours_owner, base_owner, theirs_owner].all?
|
|
381
|
+
return unless %i[class module].include?(ours_owner.signature.first)
|
|
382
|
+
|
|
383
|
+
nodes = {
|
|
384
|
+
base: owner_node(documents.fetch(:base), base_owner),
|
|
385
|
+
ours: owner_node(documents.fetch(:ours), ours_owner),
|
|
386
|
+
theirs: owner_node(documents.fetch(:theirs), theirs_owner)
|
|
387
|
+
}
|
|
388
|
+
return unless nodes.values.all?
|
|
389
|
+
|
|
390
|
+
replacements = nested_method_replacements(documents, nodes)
|
|
391
|
+
return if replacements.nil? || replacements.empty?
|
|
392
|
+
|
|
393
|
+
output_lines = documents.fetch(:ours).source.lines
|
|
394
|
+
replacements.sort_by { |replacement| -replacement.fetch(:start_line) }.each do |replacement|
|
|
395
|
+
start = replacement.fetch(:start_line) - 1
|
|
396
|
+
length = replacement.fetch(:end_line) - replacement.fetch(:start_line) + 1
|
|
397
|
+
output_lines[start, length] = replacement.fetch(:source).lines
|
|
398
|
+
end
|
|
399
|
+
output = output_lines.join
|
|
400
|
+
parsed = parse_source(output, :output)
|
|
401
|
+
return if provider_failure?(parsed)
|
|
402
|
+
|
|
403
|
+
result(
|
|
404
|
+
:merge3,
|
|
405
|
+
request,
|
|
406
|
+
output: output,
|
|
407
|
+
changes: decision.changes,
|
|
408
|
+
render_report: {
|
|
409
|
+
strategy: :nested_owner_composite,
|
|
410
|
+
parent_path: owner_path(ours_owner),
|
|
411
|
+
replacements: replacements.map do |replacement|
|
|
412
|
+
replacement.slice(:path, :start_line, :end_line, :source_role)
|
|
413
|
+
end
|
|
414
|
+
},
|
|
415
|
+
verification: { base_participated: true, output_reparsed: true, semantic_match: true }
|
|
416
|
+
)
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
def owner_node(document, owner)
|
|
420
|
+
document.analysis.nodes_with_comments.find { |info| info[:signature] == owner.signature }&.fetch(:node)
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
def nested_method_replacements(documents, nodes)
|
|
424
|
+
methods = nodes.transform_values do |node|
|
|
425
|
+
body = node.respond_to?(:body) ? node.body : nil
|
|
426
|
+
statements = body.respond_to?(:body) ? body.body : []
|
|
427
|
+
statements.select { |statement| statement.is_a?(::Prism::DefNode) }.to_h do |method|
|
|
428
|
+
[[method.name, method.parameters&.signature], method]
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
replacements = []
|
|
432
|
+
methods.fetch(:base).each do |signature, base_method|
|
|
433
|
+
ours_method = methods.fetch(:ours)[signature]
|
|
434
|
+
theirs_method = methods.fetch(:theirs)[signature]
|
|
435
|
+
next unless ours_method && theirs_method
|
|
436
|
+
|
|
437
|
+
base_source = node_source(documents.fetch(:base).source, base_method)
|
|
438
|
+
ours_source = node_source(documents.fetch(:ours).source, ours_method)
|
|
439
|
+
theirs_source = node_source(documents.fetch(:theirs).source, theirs_method)
|
|
440
|
+
next if ours_source == theirs_source || base_source == theirs_source
|
|
441
|
+
return nil if base_source != ours_source && base_source != theirs_source
|
|
442
|
+
|
|
443
|
+
next unless base_source == ours_source
|
|
444
|
+
|
|
445
|
+
replacements << {
|
|
446
|
+
path: "/method:#{signature.first}",
|
|
447
|
+
start_line: ours_method.location.start_line,
|
|
448
|
+
end_line: ours_method.location.end_line,
|
|
449
|
+
source: theirs_source,
|
|
450
|
+
source_role: :theirs
|
|
451
|
+
}
|
|
452
|
+
end
|
|
453
|
+
replacements
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
def node_source(source, node)
|
|
457
|
+
lines = source.lines
|
|
458
|
+
lines[node.location.start_line - 1, node.location.end_line - node.location.start_line + 1].join
|
|
459
|
+
end
|
|
460
|
+
|
|
366
461
|
def composite_fragments(documents, decision)
|
|
367
462
|
ours = documents.fetch(:ours)
|
|
368
463
|
edits = replacement_edits(documents, decision)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'prism/merge'
|
|
4
|
+
|
|
5
|
+
module Prism
|
|
6
|
+
module Merge
|
|
7
|
+
module RSpec
|
|
8
|
+
# Reuses Prism::Merge's established directive and node-path projection as
|
|
9
|
+
# native evidence for portable provider contract snapshots.
|
|
10
|
+
module ProviderSnapshotExtension
|
|
11
|
+
module_function
|
|
12
|
+
|
|
13
|
+
# rubocop:disable Metrics/MethodLength -- the extension envelope keeps all native evidence explicit
|
|
14
|
+
def call(source:, **)
|
|
15
|
+
normalized = Prism::Merge.parse_ruby_normalized(source)
|
|
16
|
+
nodes = normalized.fetch(:nodes)
|
|
17
|
+
{
|
|
18
|
+
schema: 'structuredmerge.extension/ruby-prism/v1',
|
|
19
|
+
namespace: 'ruby-prism',
|
|
20
|
+
capabilities: %w[comment-directives magic-comments native-node-kinds node-paths],
|
|
21
|
+
payload: {
|
|
22
|
+
parser_metadata: normalized.fetch(:metadata),
|
|
23
|
+
nodes: nodes.map { |node| native_node_evidence(node) },
|
|
24
|
+
native_tree_visibility: 'provider_internal'
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
# rubocop:enable Metrics/MethodLength
|
|
29
|
+
|
|
30
|
+
def native_node_evidence(node)
|
|
31
|
+
{
|
|
32
|
+
id: node.fetch(:id),
|
|
33
|
+
role: node.fetch(:role),
|
|
34
|
+
backend_kind: node.fetch(:backend_kind),
|
|
35
|
+
semantic_roles: node.fetch(:semantic_roles),
|
|
36
|
+
metadata: node.fetch(:metadata)
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
private_class_method :native_node_evidence
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
data/lib/prism/merge/version.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Prism
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = '7.1.
|
|
8
|
+
VERSION = '7.1.8'
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: prism-merge
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.1.
|
|
4
|
+
version: 7.1.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -43,14 +43,14 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - '='
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 7.1.
|
|
46
|
+
version: 7.1.8
|
|
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.
|
|
53
|
+
version: 7.1.8
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: prism
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -71,28 +71,28 @@ dependencies:
|
|
|
71
71
|
requirements:
|
|
72
72
|
- - '='
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: 7.1.
|
|
74
|
+
version: 7.1.8
|
|
75
75
|
type: :runtime
|
|
76
76
|
prerelease: false
|
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
79
|
- - '='
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: 7.1.
|
|
81
|
+
version: 7.1.8
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
83
83
|
name: tree_haver
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
|
85
85
|
requirements:
|
|
86
86
|
- - '='
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
|
-
version: 7.1.
|
|
88
|
+
version: 7.1.8
|
|
89
89
|
type: :runtime
|
|
90
90
|
prerelease: false
|
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
|
93
93
|
- - '='
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: 7.1.
|
|
95
|
+
version: 7.1.8
|
|
96
96
|
- !ruby/object:Gem::Dependency
|
|
97
97
|
name: version_gem
|
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -122,7 +122,7 @@ dependencies:
|
|
|
122
122
|
version: '3.0'
|
|
123
123
|
- - ">="
|
|
124
124
|
- !ruby/object:Gem::Version
|
|
125
|
-
version: 3.0.
|
|
125
|
+
version: 3.0.31
|
|
126
126
|
type: :development
|
|
127
127
|
prerelease: false
|
|
128
128
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -132,7 +132,7 @@ dependencies:
|
|
|
132
132
|
version: '3.0'
|
|
133
133
|
- - ">="
|
|
134
134
|
- !ruby/object:Gem::Version
|
|
135
|
-
version: 3.0.
|
|
135
|
+
version: 3.0.31
|
|
136
136
|
- !ruby/object:Gem::Dependency
|
|
137
137
|
name: bundler-audit
|
|
138
138
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -210,7 +210,7 @@ dependencies:
|
|
|
210
210
|
version: '3.2'
|
|
211
211
|
- - ">="
|
|
212
212
|
- !ruby/object:Gem::Version
|
|
213
|
-
version: 3.2.
|
|
213
|
+
version: 3.2.3
|
|
214
214
|
type: :development
|
|
215
215
|
prerelease: false
|
|
216
216
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -220,7 +220,7 @@ dependencies:
|
|
|
220
220
|
version: '3.2'
|
|
221
221
|
- - ">="
|
|
222
222
|
- !ruby/object:Gem::Version
|
|
223
|
-
version: 3.2.
|
|
223
|
+
version: 3.2.3
|
|
224
224
|
- !ruby/object:Gem::Dependency
|
|
225
225
|
name: kettle-test
|
|
226
226
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -250,7 +250,7 @@ dependencies:
|
|
|
250
250
|
version: '3.2'
|
|
251
251
|
- - ">="
|
|
252
252
|
- !ruby/object:Gem::Version
|
|
253
|
-
version: 3.2.
|
|
253
|
+
version: 3.2.7
|
|
254
254
|
type: :development
|
|
255
255
|
prerelease: false
|
|
256
256
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -260,7 +260,7 @@ dependencies:
|
|
|
260
260
|
version: '3.2'
|
|
261
261
|
- - ">="
|
|
262
262
|
- !ruby/object:Gem::Version
|
|
263
|
-
version: 3.2.
|
|
263
|
+
version: 3.2.7
|
|
264
264
|
- !ruby/object:Gem::Dependency
|
|
265
265
|
name: ruby-progressbar
|
|
266
266
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -361,6 +361,7 @@ files:
|
|
|
361
361
|
- lib/prism/merge/provider.rb
|
|
362
362
|
- lib/prism/merge/recursive_merge_policy.rb
|
|
363
363
|
- lib/prism/merge/recursive_node_body_merger.rb
|
|
364
|
+
- lib/prism/merge/rspec/provider_snapshot_extension.rb
|
|
364
365
|
- lib/prism/merge/ruby_doc_surface_analyzer.rb
|
|
365
366
|
- lib/prism/merge/scaffold_chunk_remover.rb
|
|
366
367
|
- lib/prism/merge/smart_merger.rb
|
|
@@ -375,10 +376,10 @@ licenses:
|
|
|
375
376
|
- PolyForm-Small-Business-1.0.0
|
|
376
377
|
metadata:
|
|
377
378
|
homepage_uri: https://structuredmerge.org
|
|
378
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
379
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
379
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.8
|
|
380
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.8/CHANGELOG.md
|
|
380
381
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
381
|
-
documentation_uri: https://www.rubydoc.info/gems/prism-merge/7.1.
|
|
382
|
+
documentation_uri: https://www.rubydoc.info/gems/prism-merge/7.1.8
|
|
382
383
|
funding_uri: https://github.com/sponsors/pboling
|
|
383
384
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
384
385
|
news_uri: https://www.railsbling.com/tags/prism-merge
|
metadata.gz.sig
CHANGED
|
Binary file
|