rbs-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/rbs/merge/file_analysis.rb +20 -0
- data/lib/rbs/merge/native_projection.rb +30 -0
- data/lib/rbs/merge/node_wrapper.rb +2 -4
- data/lib/rbs/merge/provider.rb +136 -59
- data/lib/rbs/merge/rspec/provider_snapshot_extension.rb +27 -0
- data/lib/rbs/merge/version.rb +1 -1
- data/lib/rbs/merge.rb +1 -0
- data.tar.gz.sig +0 -0
- metadata +16 -14
- 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: 12a8609c7be9157285536e84ae81c325ab55b0dd08197827a15c711fab58f502
|
|
4
|
+
data.tar.gz: ef2c73cd839f30ceb61dc6a7ac00ec168c1567213292170387b6a3b45cfdbece
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 21751b3837a50f050196ff6967e79ba4ddc21281df519eb21ed65598aa3a40affa2cdeb66a9325e2be6fd9801d5671c3fe0d609a0d2f5427ce400337422190b8
|
|
7
|
+
data.tar.gz: e0993267f337c11e3e84269fd543625170630f78e78ca7e27e476125a80bc254694c29d1cc28346873691a32fe4dcc4bde096528cfcc00f2638ec99ca4b3de4e
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
|
@@ -360,11 +360,31 @@ module Rbs
|
|
|
360
360
|
|
|
361
361
|
# Check for parse errors in the tree
|
|
362
362
|
collect_parse_errors(@ast.root_node) if @ast&.root_node&.has_error?
|
|
363
|
+
validate_tree_sitter_document
|
|
363
364
|
|
|
364
365
|
# Extract declarations from AST
|
|
365
366
|
extract_tree_sitter_declarations
|
|
366
367
|
end
|
|
367
368
|
|
|
369
|
+
def validate_tree_sitter_document
|
|
370
|
+
return unless @ast&.root_node
|
|
371
|
+
|
|
372
|
+
@ast.root_node.each do |child|
|
|
373
|
+
child_type = child.type.to_s
|
|
374
|
+
next if %w[comment decl use_directive].include?(child_type)
|
|
375
|
+
|
|
376
|
+
canonical = NodeTypeNormalizer.canonical_type(child_type, :tree_sitter)
|
|
377
|
+
next if NodeTypeNormalizer.declaration_type?(canonical)
|
|
378
|
+
|
|
379
|
+
@errors << {
|
|
380
|
+
type: child_type,
|
|
381
|
+
start_point: child.start_point,
|
|
382
|
+
end_point: child.end_point,
|
|
383
|
+
message: 'RBS merge requires document syntax; inline RBS syntax is unsupported'
|
|
384
|
+
}
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
|
|
368
388
|
def collect_parse_errors(node)
|
|
369
389
|
if node.type.to_s == 'ERROR' || node.missing?
|
|
370
390
|
@errors << {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rbs
|
|
4
|
+
module Merge
|
|
5
|
+
# Produces the stable, location-free projection used for native RBS
|
|
6
|
+
# semantic verification and provider contract extension evidence.
|
|
7
|
+
module NativeProjection
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength -- native RBS values require recursive type dispatch
|
|
11
|
+
def call(value)
|
|
12
|
+
case value
|
|
13
|
+
when Array
|
|
14
|
+
value.map { |item| call(item) }
|
|
15
|
+
when Hash
|
|
16
|
+
value.map { |key, item| [call(key), call(item)] }
|
|
17
|
+
when String, Symbol, Numeric, true, false, nil
|
|
18
|
+
value
|
|
19
|
+
else
|
|
20
|
+
attributes = value.instance_variables.reject { |name| %i[@location @comment].include?(name) }
|
|
21
|
+
[
|
|
22
|
+
value.class.name,
|
|
23
|
+
attributes.map { |name| [name, call(value.instance_variable_get(name))] }
|
|
24
|
+
]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/MethodLength
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -243,8 +243,7 @@ module Rbs
|
|
|
243
243
|
if @backend == :rbs
|
|
244
244
|
@node.location&.start_line
|
|
245
245
|
else
|
|
246
|
-
|
|
247
|
-
pos ? pos.row + 1 : nil
|
|
246
|
+
super
|
|
248
247
|
end
|
|
249
248
|
end
|
|
250
249
|
|
|
@@ -254,8 +253,7 @@ module Rbs
|
|
|
254
253
|
if @backend == :rbs
|
|
255
254
|
@node.location&.end_line
|
|
256
255
|
else
|
|
257
|
-
|
|
258
|
-
pos ? pos.row + 1 : nil
|
|
256
|
+
super
|
|
259
257
|
end
|
|
260
258
|
end
|
|
261
259
|
|
data/lib/rbs/merge/provider.rb
CHANGED
|
@@ -5,13 +5,14 @@ require 'json'
|
|
|
5
5
|
|
|
6
6
|
module Rbs
|
|
7
7
|
module Merge
|
|
8
|
-
# Base-aware, source-preserving provider for
|
|
8
|
+
# Base-aware, source-preserving provider for normalized RBS declarations.
|
|
9
9
|
# rubocop:disable Metrics/AbcSize, Metrics/ClassLength, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/ParameterLists, Metrics/PerceivedComplexity -- provider decisions, source plans, and verification form one boundary
|
|
10
10
|
class Provider
|
|
11
11
|
DEFAULT_PROFILE = :source_preserving
|
|
12
|
+
SUPPORTED_BACKENDS = %i[rbs tslp kreuzberg-language-pack].freeze
|
|
12
13
|
Owner = Data.define(:id, :signature, :fingerprint, :start_line, :end_line, :role)
|
|
13
|
-
Document = Data.define(:source, :analysis, :owners, :by_id, :unmanaged_fingerprint)
|
|
14
|
-
ExactDocument = Data.define(:source, :analysis, :declarations, :issues, :role)
|
|
14
|
+
Document = Data.define(:source, :analysis, :owners, :by_id, :unmanaged_fingerprint, :backend)
|
|
15
|
+
ExactDocument = Data.define(:source, :analysis, :declarations, :issues, :role, :backend)
|
|
15
16
|
Decision = Data.define(:changes, :conflicts, :choices)
|
|
16
17
|
|
|
17
18
|
def provider_id = 'ruby.rbs'
|
|
@@ -21,9 +22,13 @@ module Rbs
|
|
|
21
22
|
{
|
|
22
23
|
operations: Ast::Merge::ProviderContract::OPERATIONS,
|
|
23
24
|
dialects: %i[rbs],
|
|
24
|
-
backends:
|
|
25
|
+
backends: SUPPORTED_BACKENDS,
|
|
25
26
|
profiles: [DEFAULT_PROFILE],
|
|
26
27
|
role: :workflow,
|
|
28
|
+
parser_requirements: {
|
|
29
|
+
allowed_backend_families: %w[rbs tree-sitter],
|
|
30
|
+
required_capabilities: %w[normalized-nodes exact-byte-spans]
|
|
31
|
+
},
|
|
27
32
|
source_preservation: %i[exact_source declaration_fragments line_provenance reparse semantic_verification]
|
|
28
33
|
}.freeze
|
|
29
34
|
end
|
|
@@ -36,7 +41,7 @@ module Rbs
|
|
|
36
41
|
:analyze,
|
|
37
42
|
request,
|
|
38
43
|
analysis: {
|
|
39
|
-
backend:
|
|
44
|
+
backend: document.backend.to_s,
|
|
40
45
|
valid: true,
|
|
41
46
|
declarations: document.owners.map { |owner| owner_description(owner) }
|
|
42
47
|
},
|
|
@@ -62,16 +67,59 @@ module Rbs
|
|
|
62
67
|
end
|
|
63
68
|
|
|
64
69
|
def merge2(request)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
merged
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
incoming = parse_document(:merge2, request, :incoming)
|
|
71
|
+
return incoming if provider_failure?(incoming)
|
|
72
|
+
|
|
73
|
+
current = parse_document(:merge2, request, :current)
|
|
74
|
+
return current if provider_failure?(current)
|
|
75
|
+
|
|
76
|
+
merged = with_requested_backend(request) do
|
|
77
|
+
SmartMerger.new(
|
|
78
|
+
request.fetch(:incoming_source),
|
|
79
|
+
request.fetch(:current_source),
|
|
80
|
+
add_template_only_nodes: true
|
|
81
|
+
).merge_result
|
|
82
|
+
end
|
|
83
|
+
output = merged.to_s
|
|
84
|
+
parsed = parse_source(output, :output, request)
|
|
85
|
+
return parse_failure(:merge2, request, :output, parsed) if provider_failure?(parsed)
|
|
86
|
+
|
|
87
|
+
planned_ids = current.owners.map(&:id) + incoming.owners.reject do |owner|
|
|
88
|
+
current.by_id.key?(owner.id)
|
|
89
|
+
end.map(&:id)
|
|
90
|
+
actual_ids = parsed.owners.map(&:id)
|
|
91
|
+
verification = {
|
|
92
|
+
output_reparsed: true,
|
|
93
|
+
semantic_match: actual_ids == planned_ids,
|
|
94
|
+
ordered_declaration_signatures_verified: actual_ids == planned_ids,
|
|
95
|
+
planned_declaration_count: planned_ids.length,
|
|
96
|
+
output_declaration_count: actual_ids.length
|
|
97
|
+
}
|
|
98
|
+
unless verification[:semantic_match]
|
|
99
|
+
return failure(
|
|
100
|
+
:merge2,
|
|
101
|
+
request,
|
|
102
|
+
category: :render_failure,
|
|
103
|
+
message: 'RBS two-way merge did not match the planned ordered declaration structure.',
|
|
104
|
+
verification: verification
|
|
105
|
+
)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
changes = diff_documents(current, parsed)
|
|
109
|
+
result(
|
|
110
|
+
:merge2,
|
|
111
|
+
request,
|
|
112
|
+
output: output,
|
|
113
|
+
changes: changes,
|
|
114
|
+
render_report: {
|
|
115
|
+
strategy: :rbs_substrate,
|
|
116
|
+
decisions: merged.decisions,
|
|
117
|
+
summary: merged.summary
|
|
118
|
+
},
|
|
119
|
+
verification: verification
|
|
74
120
|
)
|
|
121
|
+
rescue StandardError => e
|
|
122
|
+
failure(:merge2, request, category: :merge_failure, message: e.message)
|
|
75
123
|
end
|
|
76
124
|
|
|
77
125
|
def merge3(request)
|
|
@@ -92,7 +140,7 @@ module Rbs
|
|
|
92
140
|
def parse_merge3_documents(request)
|
|
93
141
|
%i[base ours theirs].each_with_object({}) do |role, documents|
|
|
94
142
|
source = request.fetch(:"#{role}_source")
|
|
95
|
-
document = parse_source(source, role)
|
|
143
|
+
document = parse_source(source, role, request)
|
|
96
144
|
if document.is_a?(Hash) && document[:parse_error]
|
|
97
145
|
return parse_failure(:merge3, request, role, document)
|
|
98
146
|
elsif provider_failure?(document)
|
|
@@ -105,32 +153,32 @@ module Rbs
|
|
|
105
153
|
|
|
106
154
|
def parse_document(operation, request, role)
|
|
107
155
|
source = request.fetch(role == :source ? :source : :"#{role}_source")
|
|
108
|
-
parsed = parse_source(source, role)
|
|
156
|
+
parsed = parse_source(source, role, request)
|
|
109
157
|
return parse_failure(operation, request, role, parsed) if provider_failure?(parsed)
|
|
110
158
|
|
|
111
159
|
parsed
|
|
112
160
|
end
|
|
113
161
|
|
|
114
|
-
def parse_source(source, role)
|
|
115
|
-
analysis =
|
|
116
|
-
|
|
117
|
-
return { parse_error: analysis.errors.map(&:to_s).join('; '), source_role: role }
|
|
118
|
-
end
|
|
162
|
+
def parse_source(source, role, request)
|
|
163
|
+
analysis = with_requested_backend(request) { FileAnalysis.new(source) }
|
|
164
|
+
return { parse_error: analysis.errors.map(&:to_s).join('; '), source_role: role } unless analysis.errors.empty?
|
|
119
165
|
|
|
120
166
|
owners = analysis.declarations.map do |declaration|
|
|
121
167
|
wrapper = NodeWrapper.new(
|
|
122
168
|
declaration,
|
|
123
169
|
lines: source.split("\n", -1),
|
|
124
170
|
source: source,
|
|
125
|
-
backend:
|
|
171
|
+
backend: analysis.backend
|
|
126
172
|
)
|
|
127
|
-
|
|
173
|
+
unless safe_declaration_range?(source, declaration, wrapper, analysis.backend)
|
|
174
|
+
return { unsafe_range: wrapper.signature, source_role: role }
|
|
175
|
+
end
|
|
128
176
|
|
|
129
177
|
signature = wrapper.signature
|
|
130
178
|
Owner.new(
|
|
131
179
|
id: owner_id(signature),
|
|
132
180
|
signature: signature,
|
|
133
|
-
fingerprint: owner_fingerprint(source, declaration),
|
|
181
|
+
fingerprint: owner_fingerprint(source, declaration, wrapper, analysis.backend),
|
|
134
182
|
start_line: wrapper.start_line,
|
|
135
183
|
end_line: wrapper.end_line,
|
|
136
184
|
role: role
|
|
@@ -145,26 +193,25 @@ module Rbs
|
|
|
145
193
|
analysis: analysis,
|
|
146
194
|
owners: owners.freeze,
|
|
147
195
|
by_id: owners.to_h { |owner| [owner.id, owner] }.freeze,
|
|
148
|
-
unmanaged_fingerprint: unmanaged_fingerprint(source, owners)
|
|
196
|
+
unmanaged_fingerprint: unmanaged_fingerprint(source, owners),
|
|
197
|
+
backend: analysis.backend
|
|
149
198
|
)
|
|
150
199
|
rescue StandardError => e
|
|
151
200
|
{ parse_error: e.message, source_role: role }
|
|
152
201
|
end
|
|
153
202
|
|
|
154
|
-
def parse_exact_source(source, role)
|
|
155
|
-
analysis =
|
|
156
|
-
|
|
157
|
-
return { parse_error: analysis.errors.map(&:to_s).join('; '), source_role: role }
|
|
158
|
-
end
|
|
203
|
+
def parse_exact_source(source, role, request)
|
|
204
|
+
analysis = with_requested_backend(request) { FileAnalysis.new(source) }
|
|
205
|
+
return { parse_error: analysis.errors.map(&:to_s).join('; '), source_role: role } unless analysis.errors.empty?
|
|
159
206
|
|
|
160
207
|
declarations = analysis.declarations.map do |declaration|
|
|
161
208
|
wrapper = NodeWrapper.new(
|
|
162
209
|
declaration,
|
|
163
210
|
lines: source.split("\n", -1),
|
|
164
211
|
source: source,
|
|
165
|
-
backend:
|
|
212
|
+
backend: analysis.backend
|
|
166
213
|
)
|
|
167
|
-
[wrapper.signature,
|
|
214
|
+
[wrapper.signature, semantic_projection(declaration, wrapper, analysis.backend)]
|
|
168
215
|
end.freeze
|
|
169
216
|
duplicate = declarations.group_by(&:first).find { |_signature, matches| matches.length > 1 }
|
|
170
217
|
issues = if duplicate
|
|
@@ -181,7 +228,8 @@ module Rbs
|
|
|
181
228
|
analysis: analysis,
|
|
182
229
|
declarations: declarations,
|
|
183
230
|
issues: issues.freeze,
|
|
184
|
-
role: role
|
|
231
|
+
role: role,
|
|
232
|
+
backend: analysis.backend
|
|
185
233
|
)
|
|
186
234
|
rescue StandardError => e
|
|
187
235
|
{ parse_error: e.message, source_role: role }
|
|
@@ -197,6 +245,27 @@ module Rbs
|
|
|
197
245
|
source.byteslice(location.end_pos...line_end).to_s.each_byte.all? { |byte| [9, 13, 32].include?(byte) }
|
|
198
246
|
end
|
|
199
247
|
|
|
248
|
+
def safe_declaration_range?(source, declaration, wrapper, backend)
|
|
249
|
+
return safe_range?(source, declaration.location) if backend == :rbs
|
|
250
|
+
return false unless wrapper.start_line&.positive? && wrapper.end_line.to_i >= wrapper.start_line
|
|
251
|
+
return false unless declaration.respond_to?(:start_byte) && declaration.respond_to?(:end_byte)
|
|
252
|
+
|
|
253
|
+
start_byte = declaration.start_byte
|
|
254
|
+
end_byte = declaration.end_byte
|
|
255
|
+
return false unless start_byte && end_byte && start_byte >= 0 && end_byte <= source.bytesize
|
|
256
|
+
return false unless point_column(declaration.start_point) == 0
|
|
257
|
+
|
|
258
|
+
line_end = source.index("\n", end_byte) || source.bytesize
|
|
259
|
+
source.byteslice(end_byte...line_end).to_s.each_byte.all? { |byte| [9, 13, 32].include?(byte) }
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def point_column(point)
|
|
263
|
+
return point.column if point.respond_to?(:column)
|
|
264
|
+
return point[:column] if point.respond_to?(:[])
|
|
265
|
+
|
|
266
|
+
nil
|
|
267
|
+
end
|
|
268
|
+
|
|
200
269
|
def non_overlapping?(owners)
|
|
201
270
|
owners.each_cons(2).all? { |left, right| left.end_line < right.start_line }
|
|
202
271
|
end
|
|
@@ -210,27 +279,35 @@ module Rbs
|
|
|
210
279
|
end.join
|
|
211
280
|
end
|
|
212
281
|
|
|
213
|
-
def
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
attributes = value.instance_variables.reject { |name| %i[@location @comment].include?(name) }
|
|
223
|
-
[
|
|
224
|
-
value.class.name,
|
|
225
|
-
attributes.map { |name| [name, semantic_attributes(value.instance_variable_get(name))] }
|
|
226
|
-
]
|
|
227
|
-
end
|
|
282
|
+
def owner_fingerprint(source, declaration, wrapper, backend)
|
|
283
|
+
exact_source = if backend == :rbs
|
|
284
|
+
location = declaration.location
|
|
285
|
+
source.byteslice(location.start_pos...location.end_pos)
|
|
286
|
+
else
|
|
287
|
+
source.byteslice(declaration.start_byte...declaration.end_byte)
|
|
288
|
+
end
|
|
289
|
+
fingerprint_value = [semantic_projection(declaration, wrapper, backend), exact_source]
|
|
290
|
+
Digest::SHA256.hexdigest(JSON.generate(Ast::Merge.json_ready(fingerprint_value)))
|
|
228
291
|
end
|
|
229
292
|
|
|
230
|
-
def
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
293
|
+
def semantic_projection(declaration, wrapper, backend)
|
|
294
|
+
return NativeProjection.call(declaration) if backend == :rbs
|
|
295
|
+
|
|
296
|
+
[wrapper.signature, tree_projection(declaration)]
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def tree_projection(node)
|
|
300
|
+
children = []
|
|
301
|
+
node.each { |child| children << tree_projection(child) } if node.respond_to?(:each)
|
|
302
|
+
leaf_text = node.text.to_s if children.empty? && node.respond_to?(:text)
|
|
303
|
+
[node.type.to_s, leaf_text, children]
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
def with_requested_backend(request, &block)
|
|
307
|
+
backend = request[:backend]
|
|
308
|
+
return yield unless backend
|
|
309
|
+
|
|
310
|
+
TreeHaver.with_backend(backend, &block)
|
|
234
311
|
end
|
|
235
312
|
|
|
236
313
|
def owner_id(signature)
|
|
@@ -407,7 +484,7 @@ module Rbs
|
|
|
407
484
|
|
|
408
485
|
def merge3_exact(request, role)
|
|
409
486
|
documents = %i[base ours theirs].to_h do |source_role|
|
|
410
|
-
[source_role, parse_exact_source(request.fetch(:"#{source_role}_source"), source_role)]
|
|
487
|
+
[source_role, parse_exact_source(request.fetch(:"#{source_role}_source"), source_role, request)]
|
|
411
488
|
end
|
|
412
489
|
winner = documents.fetch(role)
|
|
413
490
|
return parse_failure(:merge3, request, role, winner) if provider_failure?(winner)
|
|
@@ -418,7 +495,7 @@ module Rbs
|
|
|
418
495
|
def render_exact(request, documents, role)
|
|
419
496
|
winner = documents.fetch(role)
|
|
420
497
|
rendered = render_plan(request, [whole_source_fragment(role, request.fetch(:"#{role}_source"))])
|
|
421
|
-
verification = verify_exact_rendered(rendered.content, winner)
|
|
498
|
+
verification = verify_exact_rendered(rendered.content, winner, request)
|
|
422
499
|
unless verification[:semantic_match] && verification[:byte_exact]
|
|
423
500
|
return failure(
|
|
424
501
|
:merge3,
|
|
@@ -441,8 +518,8 @@ module Rbs
|
|
|
441
518
|
)
|
|
442
519
|
end
|
|
443
520
|
|
|
444
|
-
def verify_exact_rendered(output, expected)
|
|
445
|
-
parsed = parse_exact_source(output, :output)
|
|
521
|
+
def verify_exact_rendered(output, expected, request)
|
|
522
|
+
parsed = parse_exact_source(output, :output, request)
|
|
446
523
|
if provider_failure?(parsed)
|
|
447
524
|
return {
|
|
448
525
|
output_reparsed: false,
|
|
@@ -495,7 +572,7 @@ module Rbs
|
|
|
495
572
|
fragments = composite_fragments(documents, decision)
|
|
496
573
|
rendered = render_plan(request, fragments)
|
|
497
574
|
expected = expected_owners(documents, decision)
|
|
498
|
-
verification = verify_rendered(rendered.content, expected)
|
|
575
|
+
verification = verify_rendered(rendered.content, expected, request)
|
|
499
576
|
unless verification[:semantic_match]
|
|
500
577
|
return failure(
|
|
501
578
|
:merge3,
|
|
@@ -615,8 +692,8 @@ module Rbs
|
|
|
615
692
|
expected
|
|
616
693
|
end
|
|
617
694
|
|
|
618
|
-
def verify_rendered(output, expected)
|
|
619
|
-
parsed = parse_source(output, :output)
|
|
695
|
+
def verify_rendered(output, expected, request)
|
|
696
|
+
parsed = parse_source(output, :output, request)
|
|
620
697
|
if provider_failure?(parsed)
|
|
621
698
|
return {
|
|
622
699
|
output_reparsed: false,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rbs/merge'
|
|
4
|
+
|
|
5
|
+
module Rbs
|
|
6
|
+
module Merge
|
|
7
|
+
module RSpec
|
|
8
|
+
# Native RBS evidence for Ast::Merge provider contract snapshots.
|
|
9
|
+
module ProviderSnapshotExtension
|
|
10
|
+
module_function
|
|
11
|
+
|
|
12
|
+
def call(tree:, **)
|
|
13
|
+
{
|
|
14
|
+
schema: 'structuredmerge.extension/ruby-rbs/v1',
|
|
15
|
+
namespace: 'ruby-rbs',
|
|
16
|
+
capabilities: %w[declaration-kinds method-types type-nodes],
|
|
17
|
+
payload: {
|
|
18
|
+
declarations: NativeProjection.call(tree.declarations),
|
|
19
|
+
directives: NativeProjection.call(tree.directives),
|
|
20
|
+
native_tree_visibility: 'provider_internal'
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
data/lib/rbs/merge/version.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Rbs
|
|
|
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/lib/rbs/merge.rb
CHANGED
|
@@ -75,6 +75,7 @@ module Rbs
|
|
|
75
75
|
autoload :CommentTracker, 'rbs/merge/comment_tracker'
|
|
76
76
|
autoload :FreezeNode, 'rbs/merge/freeze_node'
|
|
77
77
|
autoload :MergeResult, 'rbs/merge/merge_result'
|
|
78
|
+
autoload :NativeProjection, 'rbs/merge/native_projection'
|
|
78
79
|
autoload :NodeTypeNormalizer, 'rbs/merge/node_type_normalizer'
|
|
79
80
|
autoload :NodeWrapper, 'rbs/merge/node_wrapper'
|
|
80
81
|
autoload :FileAnalysis, 'rbs/merge/file_analysis'
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rbs-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: rbs
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -71,14 +71,14 @@ 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: version_gem
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -108,7 +108,7 @@ dependencies:
|
|
|
108
108
|
version: '3.0'
|
|
109
109
|
- - ">="
|
|
110
110
|
- !ruby/object:Gem::Version
|
|
111
|
-
version: 3.0.
|
|
111
|
+
version: 3.0.31
|
|
112
112
|
type: :development
|
|
113
113
|
prerelease: false
|
|
114
114
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -118,7 +118,7 @@ dependencies:
|
|
|
118
118
|
version: '3.0'
|
|
119
119
|
- - ">="
|
|
120
120
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: 3.0.
|
|
121
|
+
version: 3.0.31
|
|
122
122
|
- !ruby/object:Gem::Dependency
|
|
123
123
|
name: bundler-audit
|
|
124
124
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -196,7 +196,7 @@ dependencies:
|
|
|
196
196
|
version: '3.2'
|
|
197
197
|
- - ">="
|
|
198
198
|
- !ruby/object:Gem::Version
|
|
199
|
-
version: 3.2.
|
|
199
|
+
version: 3.2.3
|
|
200
200
|
type: :development
|
|
201
201
|
prerelease: false
|
|
202
202
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -206,7 +206,7 @@ dependencies:
|
|
|
206
206
|
version: '3.2'
|
|
207
207
|
- - ">="
|
|
208
208
|
- !ruby/object:Gem::Version
|
|
209
|
-
version: 3.2.
|
|
209
|
+
version: 3.2.3
|
|
210
210
|
- !ruby/object:Gem::Dependency
|
|
211
211
|
name: kettle-test
|
|
212
212
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -236,7 +236,7 @@ dependencies:
|
|
|
236
236
|
version: '3.2'
|
|
237
237
|
- - ">="
|
|
238
238
|
- !ruby/object:Gem::Version
|
|
239
|
-
version: 3.2.
|
|
239
|
+
version: 3.2.7
|
|
240
240
|
type: :development
|
|
241
241
|
prerelease: false
|
|
242
242
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -246,7 +246,7 @@ dependencies:
|
|
|
246
246
|
version: '3.2'
|
|
247
247
|
- - ">="
|
|
248
248
|
- !ruby/object:Gem::Version
|
|
249
|
-
version: 3.2.
|
|
249
|
+
version: 3.2.7
|
|
250
250
|
- !ruby/object:Gem::Dependency
|
|
251
251
|
name: ruby-progressbar
|
|
252
252
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -321,9 +321,11 @@ files:
|
|
|
321
321
|
- lib/rbs/merge/file_analysis.rb
|
|
322
322
|
- lib/rbs/merge/freeze_node.rb
|
|
323
323
|
- lib/rbs/merge/merge_result.rb
|
|
324
|
+
- lib/rbs/merge/native_projection.rb
|
|
324
325
|
- lib/rbs/merge/node_type_normalizer.rb
|
|
325
326
|
- lib/rbs/merge/node_wrapper.rb
|
|
326
327
|
- lib/rbs/merge/provider.rb
|
|
328
|
+
- lib/rbs/merge/rspec/provider_snapshot_extension.rb
|
|
327
329
|
- lib/rbs/merge/smart_merger.rb
|
|
328
330
|
- lib/rbs/merge/version.rb
|
|
329
331
|
- sig/rbs/merge.rbs
|
|
@@ -333,10 +335,10 @@ licenses:
|
|
|
333
335
|
- PolyForm-Small-Business-1.0.0
|
|
334
336
|
metadata:
|
|
335
337
|
homepage_uri: https://structuredmerge.org
|
|
336
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
337
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
338
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.8
|
|
339
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.8/CHANGELOG.md
|
|
338
340
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
339
|
-
documentation_uri: https://www.rubydoc.info/gems/rbs-merge/7.1.
|
|
341
|
+
documentation_uri: https://www.rubydoc.info/gems/rbs-merge/7.1.8
|
|
340
342
|
funding_uri: https://github.com/sponsors/pboling
|
|
341
343
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
342
344
|
news_uri: https://www.railsbling.com/tags/rbs-merge
|
metadata.gz.sig
CHANGED
|
Binary file
|