psych-merge 7.1.8 → 7.1.10
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/psych/merge/core_parser_host.rb +148 -0
- data/lib/psych/merge/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +26 -25
- 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: d92d6b29109c879c6deeaefa231b53ef40d78c2c689f85c4b389d3144928d2e1
|
|
4
|
+
data.tar.gz: 700a78701d48f95479e1b165647d27e94e3c6f76823bea4e97265c55a109d125
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9fd36c8415435121b7810e61c642af591116372289c3d0f07d8cc37aa6ed2b7e8cde74cba601a5f44e87b1759d7c76e55860b7f0f9f128f0179b3d4b1e2afce9
|
|
7
|
+
data.tar.gz: 16e7cb7df228080a1cb993a3d8b4625dec2b52d2840072a43268563a5e6f14f2914b6b5f1eb8e2e6c8ea0b35fa11c9849ddae4aa7e8bad8cb7ca2f0619e848a1
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Explicit opt-in: the normal psych/merge entry point does not load the core or
|
|
4
|
+
# mutate its registry. Install a compatible generated core artifact separately.
|
|
5
|
+
require 'psych'
|
|
6
|
+
require 'json'
|
|
7
|
+
require 'structuredmerge_core'
|
|
8
|
+
require_relative 'version'
|
|
9
|
+
|
|
10
|
+
module Psych
|
|
11
|
+
module Merge
|
|
12
|
+
# Native syntax projection only. Rust owns semantic analysis and merging.
|
|
13
|
+
# Derived from the retained Psych conformance projector in the kernel.
|
|
14
|
+
class CoreParserHost
|
|
15
|
+
CORE = ::StructuredmergeCore
|
|
16
|
+
PROVIDER_ID = 'ruby.psych'
|
|
17
|
+
# Psych 5.3.1 rejects valid BOM-prefixed Unicode fixtures. Keep the native
|
|
18
|
+
# profile on the verified series until other versions pass the same gate.
|
|
19
|
+
SUPPORTED_PSYCH = Gem::Requirement.new('~> 5.5.0')
|
|
20
|
+
BOM_COLUMN_WIDTH = Psych.parse_stream("\uFEFFx: 1\n").children.first.start_column
|
|
21
|
+
raise 'Unsupported Psych BOM column convention' unless [0, 1].include?(BOM_COLUMN_WIDTH)
|
|
22
|
+
|
|
23
|
+
def descriptor
|
|
24
|
+
CORE::ParserProviderDescriptor.new(id: PROVIDER_ID, family: 'native', runtime: RUBY_ENGINE,
|
|
25
|
+
package: 'psych-merge', package_version: Version::VERSION, parser: 'psych', parser_version: Psych::VERSION,
|
|
26
|
+
languages: ['yaml'], dialects: [], contracts: ['structuredmerge.parse-result/v1'],
|
|
27
|
+
capabilities: %w[diagnostics native_extensions source_spans], probe_id: 'psych.loaded',
|
|
28
|
+
priority: 0, metadata: {}, extensions: [])
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def probe_batch(request)
|
|
32
|
+
raise TypeError, 'Expected typed ProbeBatchRequest' unless request.is_a?(CORE::ProbeBatchRequest)
|
|
33
|
+
|
|
34
|
+
CORE::ProbeBatchResult.new(items: request.items.map do |item|
|
|
35
|
+
CORE::ParserProbeResult.new(available: compatible? && item.language == 'yaml' && item.dialect.nil?,
|
|
36
|
+
loadable: true)
|
|
37
|
+
end)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def parse_batch(request)
|
|
41
|
+
raise TypeError, 'Expected typed ParseBatchRequest' unless request.is_a?(CORE::ParseBatchRequest)
|
|
42
|
+
|
|
43
|
+
CORE::ParseBatchResult.new(items: request.items.map { |item| parse(item) })
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def compatible? = SUPPORTED_PSYCH.satisfied_by?(Gem::Version.new(Psych::VERSION))
|
|
49
|
+
|
|
50
|
+
def parse(item)
|
|
51
|
+
text = item.source.bytes.pack('C*').force_encoding(Encoding::UTF_8)
|
|
52
|
+
code = if !compatible?
|
|
53
|
+
'psych.unsupported_version'
|
|
54
|
+
elsif item.language != 'yaml' || !item.dialect.nil?
|
|
55
|
+
'psych.unsupported_language'
|
|
56
|
+
elsif item.options.comments || item.options.tokens
|
|
57
|
+
'psych.unsupported_options'
|
|
58
|
+
elsif !text.valid_encoding? || item.source.descriptor.encoding.to_s != 'utf8'
|
|
59
|
+
'psych.unsupported_source'
|
|
60
|
+
end
|
|
61
|
+
# Bare CR has different native coordinate semantics. Inspect bytes, not
|
|
62
|
+
# source syntax; comments and ownership are never inferred from text.
|
|
63
|
+
code = 'psych.unsupported_source' if text.b.gsub("\r\n", '').include?("\r")
|
|
64
|
+
return failure(item, code) if code
|
|
65
|
+
|
|
66
|
+
nodes = project(Psych.parse_stream(text), text, item.options.native_extensions)
|
|
67
|
+
CORE::ParseOutput.new(request_id: item.request_id, source: item.source.descriptor,
|
|
68
|
+
ok: true, root_id: nodes.first.id, nodes: nodes, comments: [], diagnostics: [],
|
|
69
|
+
extensions: [], metadata: {}, extra: {})
|
|
70
|
+
rescue Psych::SyntaxError
|
|
71
|
+
# Psych exception messages can contain private source. Never forward them.
|
|
72
|
+
failure(item, 'psych.syntax')
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def failure(item, code)
|
|
76
|
+
message = case code
|
|
77
|
+
when 'psych.syntax' then 'Psych syntax error'
|
|
78
|
+
when 'psych.unsupported_version' then 'Psych provider requires the verified Psych 5.5.x series'
|
|
79
|
+
else 'Unsupported Psych provider input'
|
|
80
|
+
end
|
|
81
|
+
diagnostic = CORE::ParseDiagnostic.new(id: code, severity: :error, category: 'parse_error', code: code,
|
|
82
|
+
message: message,
|
|
83
|
+
source_role: item.source.descriptor.role, blocking: true, metadata: {}, extra: {})
|
|
84
|
+
CORE::ParseOutput.new(request_id: item.request_id, source: item.source.descriptor, ok: false,
|
|
85
|
+
nodes: [], comments: [], diagnostics: [diagnostic], extensions: [], metadata: {}, extra: {})
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def project(stream, text, native_extensions)
|
|
89
|
+
lines = text.split("\n", -1)
|
|
90
|
+
bom_bytes = text.start_with?("\uFEFF") ? 3 : 0
|
|
91
|
+
lines[0] = lines[0].delete_prefix("\uFEFF") if bom_bytes.positive?
|
|
92
|
+
starts = [0]
|
|
93
|
+
text.bytes.each_with_index { |byte, index| starts << index + 1 if byte == 10 }
|
|
94
|
+
offset = lambda do |row, column|
|
|
95
|
+
next text.bytesize if row == lines.length && column.zero?
|
|
96
|
+
|
|
97
|
+
column -= BOM_COLUMN_WIDTH if row.zero? && bom_bytes.positive?
|
|
98
|
+
line = lines.fetch(row)
|
|
99
|
+
raise 'Invalid Psych character column' if column.negative? || column > line.length
|
|
100
|
+
|
|
101
|
+
starts.fetch(row) + (row.zero? ? bom_bytes : 0) + line[0, column].bytesize
|
|
102
|
+
end
|
|
103
|
+
point = lambda do |byte|
|
|
104
|
+
row = starts.bsearch_index { |start| start > byte }
|
|
105
|
+
row = row ? row - 1 : starts.length - 1
|
|
106
|
+
CORE::SourcePoint.new(row: row, column: byte - starts.fetch(row))
|
|
107
|
+
end
|
|
108
|
+
# Allocate stable preorder IDs before constructing immutable typed nodes.
|
|
109
|
+
# Iterative traversal avoids adding a Ruby recursion limit to native ASTs.
|
|
110
|
+
entries = []
|
|
111
|
+
stack = [[stream, nil]]
|
|
112
|
+
until stack.empty?
|
|
113
|
+
node, parent = stack.pop
|
|
114
|
+
id = "n#{entries.length}"
|
|
115
|
+
entries << [node, parent, id]
|
|
116
|
+
(node.children || []).reverse_each { |child| stack << [child, id] }
|
|
117
|
+
end
|
|
118
|
+
ids = entries.to_h { |node, _parent, id| [node.object_id, id] }
|
|
119
|
+
entries.map do |node, parent, id|
|
|
120
|
+
kind = node.class.name.split('::').last.downcase
|
|
121
|
+
first = kind == 'stream' ? 0 : offset.call(node.start_line, node.start_column)
|
|
122
|
+
last = kind == 'stream' ? text.bytesize : offset.call(node.end_line, node.end_column)
|
|
123
|
+
facts = %i[value style plain quoted anchor tag implicit
|
|
124
|
+
implicit_end].each_with_object({}) do |attribute, result|
|
|
125
|
+
result[attribute] = node.public_send(attribute) if node.respond_to?(attribute)
|
|
126
|
+
end
|
|
127
|
+
extensions = if native_extensions
|
|
128
|
+
[CORE::NativeExtension.new(schema: 'structuredmerge.extension/ruby-psych/v1',
|
|
129
|
+
namespace: 'ruby-psych', capabilities: [], payload: ::JSON.generate(facts), extra: {})]
|
|
130
|
+
else
|
|
131
|
+
[]
|
|
132
|
+
end
|
|
133
|
+
CORE::ParseNode.new(id: id, kind: kind, native_type: node.class.name, role: :structural,
|
|
134
|
+
named: true, missing: false, has_error: false, parent_id: parent,
|
|
135
|
+
span: CORE::SourceSpan.new(range: CORE::ByteRange.new(start_byte: first, end_byte: last),
|
|
136
|
+
start_point: point.call(first), end_point: point.call(last)),
|
|
137
|
+
children: (node.children || []).each_with_index.map do |child, index|
|
|
138
|
+
CORE::ChildEdge.new(node_id: ids.fetch(child.object_id), index: index,
|
|
139
|
+
field_name: if kind == 'mapping'
|
|
140
|
+
index.even? ? 'key' : 'value'
|
|
141
|
+
end)
|
|
142
|
+
end,
|
|
143
|
+
semantic_roles: [], unsupported_features: [], extensions: extensions, metadata: {}, extra: {})
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
data/lib/psych/merge/version.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Psych
|
|
|
5
5
|
# Version namespace for this gem.
|
|
6
6
|
module Version
|
|
7
7
|
# Current gem version.
|
|
8
|
-
VERSION = '7.1.
|
|
8
|
+
VERSION = '7.1.10'
|
|
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: psych-merge
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.1.
|
|
4
|
+
version: 7.1.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -43,28 +43,28 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - '='
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 7.1.
|
|
46
|
+
version: 7.1.10
|
|
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.10
|
|
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.1.
|
|
60
|
+
version: 7.1.10
|
|
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.1.
|
|
67
|
+
version: 7.1.10
|
|
68
68
|
- !ruby/object:Gem::Dependency
|
|
69
69
|
name: version_gem
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -91,34 +91,34 @@ dependencies:
|
|
|
91
91
|
requirements:
|
|
92
92
|
- - '='
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: 7.1.
|
|
94
|
+
version: 7.1.10
|
|
95
95
|
type: :runtime
|
|
96
96
|
prerelease: false
|
|
97
97
|
version_requirements: !ruby/object:Gem::Requirement
|
|
98
98
|
requirements:
|
|
99
99
|
- - '='
|
|
100
100
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: 7.1.
|
|
101
|
+
version: 7.1.10
|
|
102
102
|
- !ruby/object:Gem::Dependency
|
|
103
103
|
name: kettle-dev
|
|
104
104
|
requirement: !ruby/object:Gem::Requirement
|
|
105
105
|
requirements:
|
|
106
106
|
- - "~>"
|
|
107
107
|
- !ruby/object:Gem::Version
|
|
108
|
-
version: '3.
|
|
108
|
+
version: '3.1'
|
|
109
109
|
- - ">="
|
|
110
110
|
- !ruby/object:Gem::Version
|
|
111
|
-
version: 3.
|
|
111
|
+
version: 3.1.8
|
|
112
112
|
type: :development
|
|
113
113
|
prerelease: false
|
|
114
114
|
version_requirements: !ruby/object:Gem::Requirement
|
|
115
115
|
requirements:
|
|
116
116
|
- - "~>"
|
|
117
117
|
- !ruby/object:Gem::Version
|
|
118
|
-
version: '3.
|
|
118
|
+
version: '3.1'
|
|
119
119
|
- - ">="
|
|
120
120
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: 3.
|
|
121
|
+
version: 3.1.8
|
|
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.5
|
|
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.5
|
|
210
210
|
- !ruby/object:Gem::Dependency
|
|
211
211
|
name: kettle-test
|
|
212
212
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -216,7 +216,7 @@ dependencies:
|
|
|
216
216
|
version: '2.0'
|
|
217
217
|
- - ">="
|
|
218
218
|
- !ruby/object:Gem::Version
|
|
219
|
-
version: 2.0.
|
|
219
|
+
version: 2.0.23
|
|
220
220
|
type: :development
|
|
221
221
|
prerelease: false
|
|
222
222
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -226,7 +226,7 @@ dependencies:
|
|
|
226
226
|
version: '2.0'
|
|
227
227
|
- - ">="
|
|
228
228
|
- !ruby/object:Gem::Version
|
|
229
|
-
version: 2.0.
|
|
229
|
+
version: 2.0.23
|
|
230
230
|
- !ruby/object:Gem::Dependency
|
|
231
231
|
name: turbo_tests2
|
|
232
232
|
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.14
|
|
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.14
|
|
250
250
|
- !ruby/object:Gem::Dependency
|
|
251
251
|
name: ruby-progressbar
|
|
252
252
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -270,7 +270,7 @@ dependencies:
|
|
|
270
270
|
version: '1.0'
|
|
271
271
|
- - ">="
|
|
272
272
|
- !ruby/object:Gem::Version
|
|
273
|
-
version: 1.0.
|
|
273
|
+
version: 1.0.9
|
|
274
274
|
type: :development
|
|
275
275
|
prerelease: false
|
|
276
276
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -280,7 +280,7 @@ dependencies:
|
|
|
280
280
|
version: '1.0'
|
|
281
281
|
- - ">="
|
|
282
282
|
- !ruby/object:Gem::Version
|
|
283
|
-
version: 1.0.
|
|
283
|
+
version: 1.0.9
|
|
284
284
|
- !ruby/object:Gem::Dependency
|
|
285
285
|
name: gitmoji-regex
|
|
286
286
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -290,7 +290,7 @@ dependencies:
|
|
|
290
290
|
version: '2.0'
|
|
291
291
|
- - ">="
|
|
292
292
|
- !ruby/object:Gem::Version
|
|
293
|
-
version: 2.0.
|
|
293
|
+
version: 2.0.15
|
|
294
294
|
type: :development
|
|
295
295
|
prerelease: false
|
|
296
296
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -300,7 +300,7 @@ dependencies:
|
|
|
300
300
|
version: '2.0'
|
|
301
301
|
- - ">="
|
|
302
302
|
- !ruby/object:Gem::Version
|
|
303
|
-
version: 2.0.
|
|
303
|
+
version: 2.0.15
|
|
304
304
|
description: "☯️ Psych-backed YAML provider gem for the Structured Merge YAML family."
|
|
305
305
|
email:
|
|
306
306
|
- floss@galtzo.com
|
|
@@ -314,6 +314,7 @@ files:
|
|
|
314
314
|
- lib/psych/merge.rb
|
|
315
315
|
- lib/psych/merge/comment_tracker.rb
|
|
316
316
|
- lib/psych/merge/conflict_resolver.rb
|
|
317
|
+
- lib/psych/merge/core_parser_host.rb
|
|
317
318
|
- lib/psych/merge/debug_logger.rb
|
|
318
319
|
- lib/psych/merge/diff_mapper.rb
|
|
319
320
|
- lib/psych/merge/emitter.rb
|
|
@@ -337,10 +338,10 @@ licenses:
|
|
|
337
338
|
- PolyForm-Small-Business-1.0.0
|
|
338
339
|
metadata:
|
|
339
340
|
homepage_uri: https://structuredmerge.org
|
|
340
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
341
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
341
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.10
|
|
342
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.10/CHANGELOG.md
|
|
342
343
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
343
|
-
documentation_uri: https://www.rubydoc.info/gems/psych-merge/7.1.
|
|
344
|
+
documentation_uri: https://www.rubydoc.info/gems/psych-merge/7.1.10
|
|
344
345
|
funding_uri: https://github.com/sponsors/pboling
|
|
345
346
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
346
347
|
news_uri: https://www.railsbling.com/tags/psych-merge
|
|
@@ -370,7 +371,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
370
371
|
- !ruby/object:Gem::Version
|
|
371
372
|
version: '0'
|
|
372
373
|
requirements: []
|
|
373
|
-
rubygems_version: 4.0.
|
|
374
|
+
rubygems_version: 4.0.20
|
|
374
375
|
specification_version: 4
|
|
375
376
|
summary: "☯️ Structured Merge Psych-backed YAML analysis for Ruby"
|
|
376
377
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|