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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c097eb6f739577b10418375f6ea52f1054e6347b5f9d3d56bdff42debec7fdf8
4
- data.tar.gz: 90ed64b940cae88a5c188a62f71974f03118ea7faffbb7c27970b6bda604e62f
3
+ metadata.gz: 12a8609c7be9157285536e84ae81c325ab55b0dd08197827a15c711fab58f502
4
+ data.tar.gz: ef2c73cd839f30ceb61dc6a7ac00ec168c1567213292170387b6a3b45cfdbece
5
5
  SHA512:
6
- metadata.gz: de2b06f3ee1c61a58185de491243075941dd7f2adb27fe51e4e68faa92a06063230d8a7c1fa0d00aee4c247b7f34f8cf9240a1b2233c5b5b5a35030a10baad91
7
- data.tar.gz: e82a0c007245ba2b973edd21573f2706afe45ddf973c557f635957348a289be79e229345aa28d2ea169ab19b7dd967bfaa925e2e8e30bf53b3c7966af514acfe
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
- pos = @node.start_point
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
- pos = @node.end_point
258
- pos ? pos.row + 1 : nil
256
+ super
259
257
  end
260
258
  end
261
259
 
@@ -5,13 +5,14 @@ require 'json'
5
5
 
6
6
  module Rbs
7
7
  module Merge
8
- # Base-aware, source-preserving provider for native RBS declarations.
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: %i[rbs],
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: 'rbs',
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
- merge3_request = request.merge(
66
- base_source: request.fetch(:current_source),
67
- ours_source: request.fetch(:current_source),
68
- theirs_source: request.fetch(:incoming_source)
69
- )
70
- merged = merge3(merge3_request)
71
- merged.merge(
72
- operation: :merge2,
73
- verification: merged.fetch(:verification).except(:base_participated)
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 = TreeHaver.with_backend(:rbs) { FileAnalysis.new(source) }
116
- unless analysis.errors.empty? && analysis.backend == :rbs
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: :rbs
171
+ backend: analysis.backend
126
172
  )
127
- return { unsafe_range: wrapper.signature, source_role: role } unless safe_range?(source, declaration.location)
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 = TreeHaver.with_backend(:rbs) { FileAnalysis.new(source) }
156
- unless analysis.errors.empty? && analysis.backend == :rbs
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: :rbs
212
+ backend: analysis.backend
166
213
  )
167
- [wrapper.signature, semantic_attributes(declaration)]
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 semantic_attributes(value)
214
- case value
215
- when Array
216
- value.map { |item| semantic_attributes(item) }
217
- when Hash
218
- value.map { |key, item| [semantic_attributes(key), semantic_attributes(item)] }
219
- when String, Symbol, Numeric, true, false, nil
220
- value
221
- else
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 owner_fingerprint(source, declaration)
231
- location = declaration.location
232
- exact_source = source.byteslice(location.start_pos...location.end_pos)
233
- Digest::SHA256.hexdigest(JSON.generate(Ast::Merge.json_ready([semantic_attributes(declaration), exact_source])))
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
@@ -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.7'
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.7
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.7
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.7
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.7
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.7
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.17
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.17
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.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.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.6
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.6
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.7
337
- changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.7/CHANGELOG.md
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.7
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