rust-merge 7.0.0 → 7.1.3
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/LICENSE.md +13 -0
- data/README.md +286 -0
- data/lib/rust/merge/file_analysis.rb +102 -0
- data/lib/rust/merge/node_wrapper.rb +219 -0
- data/lib/rust/merge/provider.rb +959 -0
- data/lib/rust/merge/version.rb +5 -3
- data/lib/rust/merge.rb +150 -37
- data/lib/rust-merge.rb +7 -1
- data/sig/rust/merge.rbs +55 -0
- data.tar.gz.sig +0 -0
- metadata +254 -15
- metadata.gz.sig +0 -0
data/lib/rust/merge/version.rb
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
module Rust
|
|
4
4
|
module Merge
|
|
5
|
+
# Version namespace for this gem.
|
|
5
6
|
module Version
|
|
6
|
-
|
|
7
|
+
# Current gem version.
|
|
8
|
+
VERSION = '7.1.3'
|
|
7
9
|
end
|
|
8
|
-
|
|
9
|
-
VERSION = Version::VERSION
|
|
10
|
+
# Current gem version exposed at the traditional constant location.
|
|
11
|
+
VERSION = Version::VERSION # Traditional Constant Location
|
|
10
12
|
end
|
|
11
13
|
end
|
data/lib/rust/merge.rb
CHANGED
|
@@ -1,26 +1,44 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require 'tree_haver'
|
|
4
|
+
require 'ast/merge'
|
|
5
|
+
require_relative 'merge/version'
|
|
4
6
|
|
|
5
7
|
module Rust
|
|
6
8
|
module Merge
|
|
7
|
-
PACKAGE_NAME =
|
|
9
|
+
PACKAGE_NAME = 'rust-merge'
|
|
8
10
|
TREE_SITTER_BACKEND = TreeHaver::KREUZBERG_LANGUAGE_PACK_BACKEND
|
|
9
|
-
DESTINATION_WINS_ARRAY_POLICY = { surface:
|
|
11
|
+
DESTINATION_WINS_ARRAY_POLICY = { surface: 'array', name: 'destination_wins_array' }.freeze
|
|
12
|
+
BACKEND_REGISTRY = Struct.new(:registered, :mutex).new(false, Mutex.new)
|
|
10
13
|
|
|
11
14
|
module_function
|
|
12
15
|
|
|
16
|
+
def register_backend!
|
|
17
|
+
BACKEND_REGISTRY.mutex.synchronize do
|
|
18
|
+
return if BACKEND_REGISTRY.registered
|
|
19
|
+
|
|
20
|
+
TreeHaver::BackendRegistry.register(TREE_SITTER_BACKEND)
|
|
21
|
+
|
|
22
|
+
grammar_finder = TreeHaver::GrammarFinder.new(:rust)
|
|
23
|
+
grammar_finder.register! if grammar_finder.available?
|
|
24
|
+
|
|
25
|
+
BACKEND_REGISTRY.registered = true
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
13
29
|
def rust_feature_profile
|
|
14
|
-
{ family:
|
|
30
|
+
{ family: 'rust', supported_dialects: ['rust'], supported_policies: [DESTINATION_WINS_ARRAY_POLICY] }
|
|
15
31
|
end
|
|
16
32
|
|
|
17
33
|
def available_rust_backends
|
|
18
|
-
[TREE_SITTER_BACKEND]
|
|
34
|
+
rust_backend_available_for_analysis?(TREE_SITTER_BACKEND.id) ? [TREE_SITTER_BACKEND] : []
|
|
19
35
|
end
|
|
20
36
|
|
|
21
37
|
def rust_backend_feature_profile(backend: nil)
|
|
22
|
-
requested = backend
|
|
23
|
-
|
|
38
|
+
requested = requested_tree_sitter_backend_id(backend)
|
|
39
|
+
unless rust_backend_available_for_analysis?(requested)
|
|
40
|
+
return unsupported_feature_result("Unsupported Rust backend #{requested}.")
|
|
41
|
+
end
|
|
24
42
|
|
|
25
43
|
rust_feature_profile.merge(
|
|
26
44
|
backend: requested,
|
|
@@ -44,81 +62,172 @@ module Rust
|
|
|
44
62
|
end
|
|
45
63
|
|
|
46
64
|
def parse_rust(source, dialect)
|
|
47
|
-
|
|
65
|
+
unless rust_backend_available_for_analysis?(nil)
|
|
66
|
+
diagnostic_backend = TreeHaver.current_backend_id || 'tree-sitter'
|
|
67
|
+
return unsupported_feature_result("Unsupported Rust backend #{diagnostic_backend}.")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
return analyze_rust_module(source) if dialect == 'rust'
|
|
71
|
+
|
|
72
|
+
{ ok: false,
|
|
73
|
+
diagnostics: [{ severity: 'error', category: 'unsupported_feature', message: "Unsupported Rust dialect #{dialect}." }], policies: [] }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def rust_backend_available_for_analysis?(backend_id)
|
|
77
|
+
register_backend!
|
|
78
|
+
|
|
79
|
+
if backend_id.to_s.empty?
|
|
80
|
+
TreeHaver.parser_for(:rust, backend_type: :tree_sitter)
|
|
81
|
+
else
|
|
82
|
+
TreeHaver.with_backend(backend_id) { TreeHaver.parser_for(:rust, backend_type: :tree_sitter) }
|
|
83
|
+
end
|
|
84
|
+
true
|
|
85
|
+
rescue TreeHaver::Error, ArgumentError
|
|
86
|
+
false
|
|
87
|
+
end
|
|
48
88
|
|
|
49
|
-
|
|
89
|
+
def requested_tree_sitter_backend_id(backend)
|
|
90
|
+
return backend.to_s unless backend.to_s.empty?
|
|
91
|
+
|
|
92
|
+
contextual = TreeHaver.current_backend_id || ENV['TREE_HAVER_BACKEND']
|
|
93
|
+
contextual.to_s.empty? || contextual.to_s == 'auto' ? TREE_SITTER_BACKEND.id : contextual.to_s
|
|
50
94
|
end
|
|
95
|
+
private_class_method :requested_tree_sitter_backend_id
|
|
51
96
|
|
|
52
97
|
def match_rust_owners(template, destination)
|
|
53
|
-
|
|
54
|
-
template_paths = template[:owners].to_h { |owner| [owner[:path], true] }
|
|
55
|
-
{
|
|
56
|
-
matched: template[:owners].filter { |owner| destination_paths[owner[:path]] }.map { |owner| { template_path: owner[:path], destination_path: owner[:path] } },
|
|
57
|
-
unmatched_template: template[:owners].map { |owner| owner[:path] }.reject { |path| destination_paths[path] },
|
|
58
|
-
unmatched_destination: destination[:owners].map { |owner| owner[:path] }.reject { |path| template_paths[path] }
|
|
59
|
-
}
|
|
98
|
+
Ast::Merge::OwnerSelection.match_by_path(template, destination)
|
|
60
99
|
end
|
|
61
100
|
|
|
62
101
|
def merge_rust(template_source, destination_source, dialect)
|
|
63
102
|
template = parse_rust(template_source, dialect)
|
|
64
103
|
return { ok: false, diagnostics: template[:diagnostics], policies: [] } unless template[:ok]
|
|
104
|
+
|
|
65
105
|
destination = parse_rust(destination_source, dialect)
|
|
66
106
|
unless destination[:ok]
|
|
67
107
|
return {
|
|
68
108
|
ok: false,
|
|
69
|
-
diagnostics: destination[:diagnostics].map
|
|
109
|
+
diagnostics: destination[:diagnostics].map do |diagnostic|
|
|
110
|
+
diagnostic[:category] == 'parse_error' ? diagnostic.merge(category: 'destination_parse_error') : diagnostic
|
|
111
|
+
end,
|
|
70
112
|
policies: []
|
|
71
113
|
}
|
|
72
114
|
end
|
|
73
115
|
|
|
74
116
|
destination_declarations = destination.dig(:analysis, :declarations).to_h { |item| [item[:path], item] }
|
|
75
117
|
merged_declaration_texts = destination.dig(:analysis, :declarations).map { |item| item[:text] } +
|
|
76
|
-
|
|
118
|
+
template.dig(:analysis, :declarations).reject do |item|
|
|
119
|
+
destination_declarations[item[:path]]
|
|
120
|
+
end.map { |item| item[:text] }
|
|
77
121
|
import_block = destination.dig(:analysis, :imports).map { |item| item[:text] }.join
|
|
78
122
|
declaration_block = merged_declaration_texts.join("\n").rstrip
|
|
79
123
|
sections = [import_block.rstrip, declaration_block].reject(&:empty?)
|
|
80
|
-
{ ok: true, diagnostics: [], output: "#{sections.join("\n\n").rstrip}\n",
|
|
124
|
+
{ ok: true, diagnostics: [], output: "#{sections.join("\n\n").rstrip}\n",
|
|
125
|
+
policies: [DESTINATION_WINS_ARRAY_POLICY] }
|
|
81
126
|
end
|
|
82
127
|
|
|
83
128
|
def analyze_rust_module(source)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
129
|
+
parser = TreeHaver.parser_for(:rust, backend_type: :tree_sitter)
|
|
130
|
+
tree = parser.parse(source)
|
|
131
|
+
collect_parse_errors(tree.root_node)
|
|
132
|
+
|
|
133
|
+
imports = []
|
|
134
|
+
declarations = []
|
|
135
|
+
tree.root_node.children.each do |node|
|
|
136
|
+
case node.type
|
|
137
|
+
when 'use_declaration'
|
|
138
|
+
import_source = line_anchored_slice(source, node)
|
|
139
|
+
imports << {
|
|
140
|
+
path: "/imports/#{imports.length}",
|
|
141
|
+
owner_kind: 'import',
|
|
142
|
+
match_key: normalize_rust_import_path(import_source),
|
|
143
|
+
text: import_text(source, node)
|
|
144
|
+
}
|
|
145
|
+
when 'function_item', 'struct_item', 'enum_item', 'trait_item', 'impl_item', 'const_item', 'static_item',
|
|
146
|
+
'type_item', 'mod_item'
|
|
147
|
+
name = first_named_descendant_text(source, node, %w[identifier type_identifier])
|
|
148
|
+
next unless name
|
|
149
|
+
|
|
150
|
+
declarations << {
|
|
151
|
+
path: "/declarations/#{name}",
|
|
152
|
+
owner_kind: 'declaration',
|
|
153
|
+
match_key: name,
|
|
154
|
+
text: declaration_text(source, node)
|
|
155
|
+
}
|
|
156
|
+
end
|
|
91
157
|
end
|
|
92
|
-
declarations = processed[:analysis].structure
|
|
93
|
-
.select { |item| item.name }
|
|
94
|
-
.map { |item| { path: "/declarations/#{item.name}", match_key: item.name, text: declaration_text(source, item.span) } }
|
|
95
|
-
.sort_by { |item| item[:path] }
|
|
96
158
|
|
|
97
159
|
{
|
|
98
160
|
ok: true,
|
|
99
161
|
diagnostics: [],
|
|
100
162
|
analysis: {
|
|
101
|
-
kind:
|
|
102
|
-
dialect:
|
|
103
|
-
source: source,
|
|
104
|
-
owners: imports.map { |item| { path: item[:path], owner_kind: "import", match_key: item[:match_key] } } +
|
|
105
|
-
declarations.map { |item| { path: item[:path], owner_kind: "declaration", match_key: item[:match_key] } },
|
|
163
|
+
kind: 'rust',
|
|
164
|
+
dialect: 'rust',
|
|
106
165
|
imports: imports,
|
|
107
|
-
declarations: declarations
|
|
166
|
+
declarations: declarations,
|
|
167
|
+
owners: owner_views(imports + declarations)
|
|
108
168
|
},
|
|
109
169
|
policies: []
|
|
110
170
|
}
|
|
171
|
+
rescue TreeHaver::Error, StandardError => e
|
|
172
|
+
parse_failure_result(e)
|
|
111
173
|
end
|
|
112
174
|
private_class_method :analyze_rust_module
|
|
113
175
|
|
|
176
|
+
def collect_parse_errors(node)
|
|
177
|
+
raise TreeHaver::NotAvailable, 'Rust parse returned no root node' unless node
|
|
178
|
+
return unless node.respond_to?(:has_error?) && node.has_error?
|
|
179
|
+
|
|
180
|
+
raise TreeHaver::NotAvailable,
|
|
181
|
+
'Rust parse contains syntax errors'
|
|
182
|
+
end
|
|
183
|
+
private_class_method :collect_parse_errors
|
|
184
|
+
|
|
185
|
+
def parse_failure_result(error)
|
|
186
|
+
{ ok: false,
|
|
187
|
+
diagnostics: [{ severity: 'error', category: 'parse_error', message: error.message }],
|
|
188
|
+
policies: [] }
|
|
189
|
+
end
|
|
190
|
+
private_class_method :parse_failure_result
|
|
191
|
+
|
|
192
|
+
def unsupported_feature_result(message)
|
|
193
|
+
{
|
|
194
|
+
ok: false,
|
|
195
|
+
diagnostics: [{ severity: 'error', category: 'unsupported_feature', message: message }],
|
|
196
|
+
policies: []
|
|
197
|
+
}
|
|
198
|
+
end
|
|
199
|
+
private_class_method :unsupported_feature_result
|
|
200
|
+
|
|
114
201
|
def normalize_rust_import_path(import_source)
|
|
115
|
-
import_source.sub(/\Ause\s+/,
|
|
202
|
+
import_source.sub(/\Ause\s+/, '').sub(/;\z/, '').strip
|
|
116
203
|
end
|
|
117
204
|
private_class_method :normalize_rust_import_path
|
|
118
205
|
|
|
206
|
+
def first_named_descendant_text(source, node, types)
|
|
207
|
+
return slice_span(source, node) if types.include?(node.type)
|
|
208
|
+
|
|
209
|
+
node.children.each do |child|
|
|
210
|
+
value = first_named_descendant_text(source, child, types)
|
|
211
|
+
return value if value && !value.empty?
|
|
212
|
+
end
|
|
213
|
+
nil
|
|
214
|
+
end
|
|
215
|
+
private_class_method :first_named_descendant_text
|
|
216
|
+
|
|
217
|
+
def owner_view(item)
|
|
218
|
+
item.slice(:path, :owner_kind, :match_key)
|
|
219
|
+
end
|
|
220
|
+
private_class_method :owner_view
|
|
221
|
+
|
|
222
|
+
def owner_views(items)
|
|
223
|
+
items.map { |item| owner_view(item) }
|
|
224
|
+
end
|
|
225
|
+
private_class_method :owner_views
|
|
226
|
+
|
|
119
227
|
def import_text(source, span) = "#{slice_span(source, span)}\n"
|
|
120
228
|
def declaration_text(source, span) = "#{line_anchored_slice(source, span)}\n"
|
|
121
229
|
def slice_span(source, span) = source[span.start_byte...span.end_byte].strip
|
|
230
|
+
|
|
122
231
|
def line_anchored_slice(source, span)
|
|
123
232
|
line_start = source.rindex("\n", [span.start_byte - 1, 0].max)
|
|
124
233
|
line_start = line_start ? line_start + 1 : 0
|
|
@@ -127,3 +236,7 @@ module Rust
|
|
|
127
236
|
private_class_method :import_text, :declaration_text, :slice_span, :line_anchored_slice
|
|
128
237
|
end
|
|
129
238
|
end
|
|
239
|
+
|
|
240
|
+
Rust::Merge.register_backend!
|
|
241
|
+
require_relative 'merge/provider'
|
|
242
|
+
Rust::Merge.register_provider!
|
data/lib/rust-merge.rb
CHANGED
data/sig/rust/merge.rbs
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Rust
|
|
2
|
+
module Merge
|
|
3
|
+
class NodeWrapper
|
|
4
|
+
DECLARATION_TYPES: Array[String]
|
|
5
|
+
NAMED_ITEMS: Hash[String, [Symbol, Array[String]]]
|
|
6
|
+
COMMENT_TYPES: Array[String]
|
|
7
|
+
ATTRIBUTE_TYPES: Array[String]
|
|
8
|
+
|
|
9
|
+
attr_reader node: untyped
|
|
10
|
+
attr_reader source: String
|
|
11
|
+
attr_reader leading_comments: Array[untyped]
|
|
12
|
+
attr_reader trailing_comments: Array[untyped]
|
|
13
|
+
|
|
14
|
+
def initialize: (untyped node, source: String, ?leading_comments: Array[untyped]) -> void
|
|
15
|
+
def signature: () -> Array[untyped]
|
|
16
|
+
def membership_signature: () -> Array[untyped]
|
|
17
|
+
def compound?: () -> bool
|
|
18
|
+
def start_byte: () -> Integer
|
|
19
|
+
def end_byte: () -> Integer
|
|
20
|
+
def start_line: () -> Integer
|
|
21
|
+
def end_line: () -> Integer
|
|
22
|
+
def source_text: () -> String
|
|
23
|
+
def semantic_tree: () -> Array[untyped]
|
|
24
|
+
def attach_trailing_comment!: (untyped comment) -> untyped
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class FileAnalysis
|
|
28
|
+
attr_reader source: String
|
|
29
|
+
attr_reader root_node: untyped
|
|
30
|
+
attr_reader declarations: Array[NodeWrapper]
|
|
31
|
+
attr_reader errors: Array[StandardError]
|
|
32
|
+
attr_reader backend: Symbol
|
|
33
|
+
|
|
34
|
+
def initialize: (String source) -> void
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class Provider
|
|
38
|
+
def provider_id: () -> String
|
|
39
|
+
def family: () -> String
|
|
40
|
+
def capabilities: () -> Hash[Symbol, untyped]
|
|
41
|
+
def analyze: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
42
|
+
def diff2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
43
|
+
def merge2: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
44
|
+
def merge3: (Hash[Symbol, untyped] request) -> Hash[Symbol, untyped]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.merge_provider: () -> Provider
|
|
48
|
+
def self.register_provider!: (?replace: bool) -> untyped
|
|
49
|
+
|
|
50
|
+
module Version
|
|
51
|
+
VERSION: String
|
|
52
|
+
end
|
|
53
|
+
VERSION: String
|
|
54
|
+
end
|
|
55
|
+
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rust-merge
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.
|
|
4
|
+
version: 7.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
8
|
-
bindir:
|
|
8
|
+
bindir: exe
|
|
9
9
|
cert_chain:
|
|
10
10
|
- |
|
|
11
11
|
-----BEGIN CERTIFICATE-----
|
|
@@ -43,54 +43,293 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - '='
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 7.
|
|
46
|
+
version: 7.1.3
|
|
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.
|
|
53
|
+
version: 7.1.3
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: tree_haver
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - '='
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: 7.
|
|
60
|
+
version: 7.1.3
|
|
61
61
|
type: :runtime
|
|
62
62
|
prerelease: false
|
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - '='
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 7.
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
version: 7.1.3
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: version_gem
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - "~>"
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '1.1'
|
|
75
|
+
- - ">="
|
|
76
|
+
- !ruby/object:Gem::Version
|
|
77
|
+
version: 1.1.15
|
|
78
|
+
type: :runtime
|
|
79
|
+
prerelease: false
|
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
81
|
+
requirements:
|
|
82
|
+
- - "~>"
|
|
83
|
+
- !ruby/object:Gem::Version
|
|
84
|
+
version: '1.1'
|
|
85
|
+
- - ">="
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: 1.1.15
|
|
88
|
+
- !ruby/object:Gem::Dependency
|
|
89
|
+
name: kettle-dev
|
|
90
|
+
requirement: !ruby/object:Gem::Requirement
|
|
91
|
+
requirements:
|
|
92
|
+
- - "~>"
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '3.0'
|
|
95
|
+
- - ">="
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: 3.0.0
|
|
98
|
+
type: :development
|
|
99
|
+
prerelease: false
|
|
100
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - "~>"
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: '3.0'
|
|
105
|
+
- - ">="
|
|
106
|
+
- !ruby/object:Gem::Version
|
|
107
|
+
version: 3.0.0
|
|
108
|
+
- !ruby/object:Gem::Dependency
|
|
109
|
+
name: bundler-audit
|
|
110
|
+
requirement: !ruby/object:Gem::Requirement
|
|
111
|
+
requirements:
|
|
112
|
+
- - "~>"
|
|
113
|
+
- !ruby/object:Gem::Version
|
|
114
|
+
version: 0.9.3
|
|
115
|
+
type: :development
|
|
116
|
+
prerelease: false
|
|
117
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
118
|
+
requirements:
|
|
119
|
+
- - "~>"
|
|
120
|
+
- !ruby/object:Gem::Version
|
|
121
|
+
version: 0.9.3
|
|
122
|
+
- !ruby/object:Gem::Dependency
|
|
123
|
+
name: rake
|
|
124
|
+
requirement: !ruby/object:Gem::Requirement
|
|
125
|
+
requirements:
|
|
126
|
+
- - "~>"
|
|
127
|
+
- !ruby/object:Gem::Version
|
|
128
|
+
version: '13.0'
|
|
129
|
+
type: :development
|
|
130
|
+
prerelease: false
|
|
131
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
132
|
+
requirements:
|
|
133
|
+
- - "~>"
|
|
134
|
+
- !ruby/object:Gem::Version
|
|
135
|
+
version: '13.0'
|
|
136
|
+
- !ruby/object:Gem::Dependency
|
|
137
|
+
name: require_bench
|
|
138
|
+
requirement: !ruby/object:Gem::Requirement
|
|
139
|
+
requirements:
|
|
140
|
+
- - "~>"
|
|
141
|
+
- !ruby/object:Gem::Version
|
|
142
|
+
version: '1.0'
|
|
143
|
+
- - ">="
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: 1.0.4
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - "~>"
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '1.0'
|
|
153
|
+
- - ">="
|
|
154
|
+
- !ruby/object:Gem::Version
|
|
155
|
+
version: 1.0.4
|
|
156
|
+
- !ruby/object:Gem::Dependency
|
|
157
|
+
name: anonymous_loader
|
|
158
|
+
requirement: !ruby/object:Gem::Requirement
|
|
159
|
+
requirements:
|
|
160
|
+
- - "~>"
|
|
161
|
+
- !ruby/object:Gem::Version
|
|
162
|
+
version: '0.1'
|
|
163
|
+
- - ">="
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: 0.1.3
|
|
166
|
+
type: :development
|
|
167
|
+
prerelease: false
|
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
169
|
+
requirements:
|
|
170
|
+
- - "~>"
|
|
171
|
+
- !ruby/object:Gem::Version
|
|
172
|
+
version: '0.1'
|
|
173
|
+
- - ">="
|
|
174
|
+
- !ruby/object:Gem::Version
|
|
175
|
+
version: 0.1.3
|
|
176
|
+
- !ruby/object:Gem::Dependency
|
|
177
|
+
name: appraisal2
|
|
178
|
+
requirement: !ruby/object:Gem::Requirement
|
|
179
|
+
requirements:
|
|
180
|
+
- - "~>"
|
|
181
|
+
- !ruby/object:Gem::Version
|
|
182
|
+
version: '3.2'
|
|
183
|
+
- - ">="
|
|
184
|
+
- !ruby/object:Gem::Version
|
|
185
|
+
version: 3.2.2
|
|
186
|
+
type: :development
|
|
187
|
+
prerelease: false
|
|
188
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
189
|
+
requirements:
|
|
190
|
+
- - "~>"
|
|
191
|
+
- !ruby/object:Gem::Version
|
|
192
|
+
version: '3.2'
|
|
193
|
+
- - ">="
|
|
194
|
+
- !ruby/object:Gem::Version
|
|
195
|
+
version: 3.2.2
|
|
196
|
+
- !ruby/object:Gem::Dependency
|
|
197
|
+
name: kettle-test
|
|
198
|
+
requirement: !ruby/object:Gem::Requirement
|
|
199
|
+
requirements:
|
|
200
|
+
- - "~>"
|
|
201
|
+
- !ruby/object:Gem::Version
|
|
202
|
+
version: '2.0'
|
|
203
|
+
- - ">="
|
|
204
|
+
- !ruby/object:Gem::Version
|
|
205
|
+
version: 2.0.19
|
|
206
|
+
type: :development
|
|
207
|
+
prerelease: false
|
|
208
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
209
|
+
requirements:
|
|
210
|
+
- - "~>"
|
|
211
|
+
- !ruby/object:Gem::Version
|
|
212
|
+
version: '2.0'
|
|
213
|
+
- - ">="
|
|
214
|
+
- !ruby/object:Gem::Version
|
|
215
|
+
version: 2.0.19
|
|
216
|
+
- !ruby/object:Gem::Dependency
|
|
217
|
+
name: turbo_tests2
|
|
218
|
+
requirement: !ruby/object:Gem::Requirement
|
|
219
|
+
requirements:
|
|
220
|
+
- - "~>"
|
|
221
|
+
- !ruby/object:Gem::Version
|
|
222
|
+
version: '3.2'
|
|
223
|
+
- - ">="
|
|
224
|
+
- !ruby/object:Gem::Version
|
|
225
|
+
version: 3.2.5
|
|
226
|
+
type: :development
|
|
227
|
+
prerelease: false
|
|
228
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
229
|
+
requirements:
|
|
230
|
+
- - "~>"
|
|
231
|
+
- !ruby/object:Gem::Version
|
|
232
|
+
version: '3.2'
|
|
233
|
+
- - ">="
|
|
234
|
+
- !ruby/object:Gem::Version
|
|
235
|
+
version: 3.2.5
|
|
236
|
+
- !ruby/object:Gem::Dependency
|
|
237
|
+
name: ruby-progressbar
|
|
238
|
+
requirement: !ruby/object:Gem::Requirement
|
|
239
|
+
requirements:
|
|
240
|
+
- - "~>"
|
|
241
|
+
- !ruby/object:Gem::Version
|
|
242
|
+
version: '1.13'
|
|
243
|
+
type: :development
|
|
244
|
+
prerelease: false
|
|
245
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
246
|
+
requirements:
|
|
247
|
+
- - "~>"
|
|
248
|
+
- !ruby/object:Gem::Version
|
|
249
|
+
version: '1.13'
|
|
250
|
+
- !ruby/object:Gem::Dependency
|
|
251
|
+
name: stone_checksums
|
|
252
|
+
requirement: !ruby/object:Gem::Requirement
|
|
253
|
+
requirements:
|
|
254
|
+
- - "~>"
|
|
255
|
+
- !ruby/object:Gem::Version
|
|
256
|
+
version: '1.0'
|
|
257
|
+
- - ">="
|
|
258
|
+
- !ruby/object:Gem::Version
|
|
259
|
+
version: 1.0.8
|
|
260
|
+
type: :development
|
|
261
|
+
prerelease: false
|
|
262
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
263
|
+
requirements:
|
|
264
|
+
- - "~>"
|
|
265
|
+
- !ruby/object:Gem::Version
|
|
266
|
+
version: '1.0'
|
|
267
|
+
- - ">="
|
|
268
|
+
- !ruby/object:Gem::Version
|
|
269
|
+
version: 1.0.8
|
|
270
|
+
- !ruby/object:Gem::Dependency
|
|
271
|
+
name: gitmoji-regex
|
|
272
|
+
requirement: !ruby/object:Gem::Requirement
|
|
273
|
+
requirements:
|
|
274
|
+
- - "~>"
|
|
275
|
+
- !ruby/object:Gem::Version
|
|
276
|
+
version: '2.0'
|
|
277
|
+
- - ">="
|
|
278
|
+
- !ruby/object:Gem::Version
|
|
279
|
+
version: 2.0.11
|
|
280
|
+
type: :development
|
|
281
|
+
prerelease: false
|
|
282
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
283
|
+
requirements:
|
|
284
|
+
- - "~>"
|
|
285
|
+
- !ruby/object:Gem::Version
|
|
286
|
+
version: '2.0'
|
|
287
|
+
- - ">="
|
|
288
|
+
- !ruby/object:Gem::Version
|
|
289
|
+
version: 2.0.11
|
|
290
|
+
description: "☯️ Portable Rust module owner analysis and merge behavior for Structured
|
|
291
|
+
Merge."
|
|
70
292
|
email:
|
|
71
|
-
-
|
|
293
|
+
- floss@galtzo.com
|
|
72
294
|
executables: []
|
|
73
295
|
extensions: []
|
|
74
296
|
extra_rdoc_files: []
|
|
75
297
|
files:
|
|
298
|
+
- LICENSE.md
|
|
299
|
+
- README.md
|
|
76
300
|
- lib/rust-merge.rb
|
|
77
301
|
- lib/rust/merge.rb
|
|
302
|
+
- lib/rust/merge/file_analysis.rb
|
|
303
|
+
- lib/rust/merge/node_wrapper.rb
|
|
304
|
+
- lib/rust/merge/provider.rb
|
|
78
305
|
- lib/rust/merge/version.rb
|
|
306
|
+
- sig/rust/merge.rbs
|
|
79
307
|
homepage: https://github.com/structuredmerge/structuredmerge-ruby
|
|
80
308
|
licenses:
|
|
81
309
|
- AGPL-3.0-only
|
|
82
310
|
- PolyForm-Small-Business-1.0.0
|
|
83
311
|
metadata:
|
|
84
312
|
homepage_uri: https://structuredmerge.org
|
|
85
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.
|
|
86
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.
|
|
313
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.3
|
|
314
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.3/CHANGELOG.md
|
|
87
315
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
88
|
-
documentation_uri: https://www.rubydoc.info/gems/rust-merge/7.
|
|
316
|
+
documentation_uri: https://www.rubydoc.info/gems/rust-merge/7.1.3
|
|
89
317
|
funding_uri: https://github.com/sponsors/pboling
|
|
90
318
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
319
|
+
news_uri: https://www.railsbling.com/tags/rust-merge
|
|
91
320
|
discord_uri: https://discord.gg/3qme4XHNKN
|
|
321
|
+
mailing_list_uri: https://www.rubyforum.org/tag/structuredmerge
|
|
92
322
|
rubygems_mfa_required: 'true'
|
|
93
|
-
rdoc_options:
|
|
323
|
+
rdoc_options:
|
|
324
|
+
- "--title"
|
|
325
|
+
- rust-merge - ☯️ Structured Merge Rust module analysis and merge for Ruby
|
|
326
|
+
- "--main"
|
|
327
|
+
- README.md
|
|
328
|
+
- "--exclude"
|
|
329
|
+
- "^sig/"
|
|
330
|
+
- "--line-numbers"
|
|
331
|
+
- "--inline-source"
|
|
332
|
+
- "--quiet"
|
|
94
333
|
require_paths:
|
|
95
334
|
- lib
|
|
96
335
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
@@ -104,7 +343,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
104
343
|
- !ruby/object:Gem::Version
|
|
105
344
|
version: '0'
|
|
106
345
|
requirements: []
|
|
107
|
-
rubygems_version: 4.0.
|
|
346
|
+
rubygems_version: 4.0.17
|
|
108
347
|
specification_version: 4
|
|
109
|
-
summary: Structured Merge Rust module analysis and merge for Ruby
|
|
348
|
+
summary: "☯️ Structured Merge Rust module analysis and merge for Ruby"
|
|
110
349
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|